diff --git a/main.go b/main.go index 6d817ec..85eae4b 100644 --- a/main.go +++ b/main.go @@ -51,8 +51,9 @@ var ( db *sql.DB - cfg Config - MQCWMsgQueue chan ChatWarsMessage + cfg Config + MQCWMsgQueue chan ChatWarsMessage + SQLMsgIdQueue chan int64 ) func PrintText(m *tb.Message) { @@ -103,6 +104,9 @@ func main() { for w := 1; w <= 6; w++ { go SQLCWMsgWorker(w, MQCWMsgQueue) } + for w := 1; w <= 6; w++ { + go SQLIdentifyMsgWorker(w, SQLMsgIdQueue) + } fmt.Println("Started !") diff --git a/sql.go b/sql.go index d0f067d..7053dac 100644 --- a/sql.go +++ b/sql.go @@ -62,6 +62,18 @@ func initDB() { log.Fatal(err) } + _, err = db.Exec(`CREATE TABLE code_obj_sub_type ( + id SMALLINT(5) UNSIGNED NOT NULL + ,intl_id VARCHAR(32) NOT NULL + ,name VARCHAR(80) NOT NULL + ,obj_type_id SMALLINT UNSIGNED NOT NULL + ,PRIMARY KEY (id) + ,FOREIGN KEY (obj_type_id) REFERENCES code_obj_type(id) ON DELETE CASCADE + ) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_unicode_ci;`) + if err != nil { + log.Fatal(err) + } + _, err = db.Exec(`CREATE TABLE obj ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,obj_type_id SMALLINT UNSIGNED NOT NULL @@ -112,6 +124,23 @@ func initDB() { log.Fatal(err) } + _, err = db.Exec(`CREATE TABLE obj_msg_report ( + obj_id BIGINT UNSIGNED NOT NULL + ,war_date TIMESTAMP NOT NULL + ,attack SMALLINT UNSIGNED NOT NULL + ,defense SMALLINT UNSIGNED NOT NULL + ,gold SMALLINT UNSIGNED NOT NULL + ,stock SMALLINT UNSIGNED NOT NULL + ,exp SMALLINT UNSIGNED NOT NULL + ,stamina BOOLEAN NOT NULL + ,crit BOOLEAN NOT NULL + ,FOREIGN KEY (obj_id) REFERENCES obj(id) ON DELETE CASCADE + ,UNIQUE KEY (msg_id, chat_id, sender_user_id) + ) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_unicode_ci;`) + if err != nil { + log.Fatal(err) + } + _, err = db.Exec(`INSERT INTO code_obj_type (id, intl_id, name) VALUES (1, "user", "User") ,(2, "guild", "Guild") @@ -120,40 +149,63 @@ func initDB() { log.Fatal(err) } - log.Println("Database set up") -} - -func SQLCWMsgWorker(id int, msgs <-chan ChatWarsMessage) { - for m := range msgs { - err := putMsg(m) - if err != nil { - logOnError(err, "SQLCWMsgWorker["+strconv.Itoa(id)+"] : Inserting message.") - } - } - - log.Printf("SQLCWMsgWorker[" + strconv.Itoa(id) + "] : Closing.") - -} - -func putMsg(m ChatWarsMessage) error { - res, err := db.Exec(`INSERT INTO obj (obj_type_id) - VALUES (3);`) + _, err = db.Exec(`INSERT INTO code_obj_sub_type (id, intl_id, name, obj_type_id) + VALUES (1, "unprocessed", "Unprocessed", 3) + ,(2, "unknown", "Unknown", 3) + ,(3, "report", "War report", 3) + ,(4, "g_report", "Guild War report", 3) + ,(5, "quest", "Quest result", 3) + ,(6, "fight", "Fight result", 3) + ,(7, "hero", "Hero summary", 3) + ,(8, "me", "Hero short summary", 3) + ,(9, "inv", "Inventory", 3);`) if err != nil { log.Fatal(err) } + + log.Println("Database set up") +} + +func putUnprocessedMsg(m ChatWarsMessage) (int64, error) { + res, err := db.Exec(`INSERT INTO obj (obj_type_id, obj_sub_type_id) + VALUES (3 , 1);`) + if err != nil { + return nil, err + } + objId, err := res.LastInsertId() + if err != nil { + return nil, err + } stmt, err := db.Prepare(`INSERT INTO obj_msg (obj_id, msg_id, chat_id, sender_user_id, date , text) VALUES (?, ?, ?, ?, FROM_UNIXTIME(?), ?);`) if err != nil { - return err + return nil, err } defer stmt.Close() _, err = stmt.Exec(objId, m.ID64, m.ChatID64, m.SenderUserID64, m.Date, m.Text) if err != nil { - return err + return nil, err } - return nil + return objId, nil +} + +func getMsg(objId int64) (ChatWarsMessage, error) { + var m ChatWarsMessage + + stmt, err := db.Prepare(`SELECT om.msg_id, om.chat_id, om.sender_user_id, UNIX_TIMESTAMP(om.date), om.text FROM obj_msg om WHERE om.id = ?`) + if err != nil { + return nil, err + } + defer stmt.Close() + + err = stmtOut.QueryRow(objId).Scan(&m.ID64, &m.ChatID64, &m.SenderUserID64, &m.Date, &m.Text) + if err != nil { + return nil, err + } + + return m, nil } diff --git a/workers.go b/workers.go new file mode 100644 index 0000000..1630fe8 --- /dev/null +++ b/workers.go @@ -0,0 +1,29 @@ +package main + +import ( + "log" + "strconv" +) + +func SQLCWMsgWorker(id int, msgs <-chan ChatWarsMessage) { + log.Printf("SQLCWMsgWorker[" + strconv.Itoa(id) + "] : Starting.") + for m := range msgs { + objId, err := putUnprocessedMsg(m) + if err != nil { + logOnError(err, "SQLCWMsgWorker["+strconv.Itoa(id)+"] : Inserting message.") + } else { + + } + } + + log.Printf("SQLCWMsgWorker[" + strconv.Itoa(id) + "] : Closing.") + +} + +func SQLIdentifyMsgWorker(id int, objIds <-chan int64) { + log.Printf("SQLIdentifyMsgWorker[" + strconv.Itoa(id) + "] : Starting.") + for objId := range objIds { + + } + log.Printf("SQLIdentifyMsgWorker[" + strconv.Itoa(id) + "] : Closing.") +}