94 lines
1.9 KiB
Go
94 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
)
|
|
|
|
func initDB() {
|
|
log.Println("Setting up database...")
|
|
|
|
tx, err := db.Begin()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer tx.Rollback()
|
|
|
|
_, err = tx.Exec("set foreign_key_checks = 0")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
var name string
|
|
rows, err := db.Query("show tables")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
for rows.Next() {
|
|
err = rows.Scan(&name)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
_, err = tx.Exec("drop table " + name)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
err = rows.Err()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
rows.Close()
|
|
|
|
_, err = tx.Exec("set foreign_key_checks = 1")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
err = tx.Commit()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
log.Println("Database cleaned up")
|
|
_, err = db.Exec(`CREATE TABLE user (
|
|
id BIGINT UNSIGNED NOT NULL,
|
|
user_id VARCHAR(32) NOT NULL,
|
|
name VARCHAR(80) NOT NULL,
|
|
guild_id SMALLINT(5),
|
|
last_msg TIMESTAMP,
|
|
busy_until TIMESTAMP,
|
|
role ENUM('commander', 'bartebder', 'squire', 'none'),
|
|
PRIMARY KEY (id)
|
|
) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_unicode_ci;`)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
_, err = db.Exec(`CREATE TABLE msg (
|
|
id BIGINT UNSIGNED NOT NULL,
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
direction ENUM('incoming', 'outgoing'),
|
|
date TIMESTAMP NOT NULL,
|
|
text VARCHAR(4096) NOT NULL,
|
|
FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE
|
|
) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_unicode_ci;`)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
log.Println("Database set up")
|
|
}
|
|
|
|
func putMsg(m ChatWarsMessage) {
|
|
stmt, err := db.Prepare(`INSERT INTO msg (id, user_id, direction, date, text)
|
|
VALUES (?, ?, ?, FROM_UNIXTIME(?), ?);`)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
_, err = stmt.Exec(m.MsgID64, m.UserID64, m.Direction, m.MsgDate, m.MsgText)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|