diff --git a/main.go b/main.go index 7f17405..bb56dfd 100644 --- a/main.go +++ b/main.go @@ -30,12 +30,13 @@ func init() { log.Lmicroseconds|log.Lshortfile) } +var db DB func main() { inputFile := flag.String("if", "input", "Input file") flag.Parse() log.Printf("Input file: %s", *inputFile) - db := DB{ + db = DB{ path: "data/db.db", } err := db.Open() @@ -55,7 +56,12 @@ func main() { Error.Printf("Failed parsing note: %v", err) return } - log.Printf("%#v", note) + + err = SaveNote(note) + if err != nil { + Error.Printf("Failed saving note: %v", err) + return + } } func ParseNote(data string) (NoteData, error) { @@ -68,7 +74,6 @@ func ParseNote(data string) (NoteData, error) { continue } parts := strings.Split(line, ":") - log.Printf("%#v", parts) switch parts[0] { case "p": res.Player = parts[1] @@ -86,4 +91,50 @@ func ParseNote(data string) (NoteData, error) { } res.Note = strings.Join(note, "\n") return res, nil +} + +func SaveNote(data NoteData) error { + log.Printf("%#v", data) + guild, err := GetGuildByName(data.Guild) + if err != nil { + return err + } + log.Printf("%#v", guild) + return nil +} + +func GetGuildByName(name string) (Guild, error) { + var guild Guild + err := db.readConn.QueryRow("select id, name from guild where name = ?", name).Scan(&guild.ID, &guild.Name) + if err != nil { + guild, err = CreateGuild(name) + if err != nil { + return guild, fmt.Errorf("failed creating guild: %v", err) + } + } + return guild, nil +} + +func CreateGuild(name string) (Guild, error) { + guild := Guild{} + res, err := db.writeConn.Exec("insert into guild (name) values (?)", name) + if err != nil { + return guild, fmt.Errorf("failed to insert guild: %v", err) + } + + id, err := res.LastInsertId() + if err != nil { + return guild, fmt.Errorf("failed to get last insert id: %v", err) + } + + return GetGuildById(int(id)) +} + +func GetGuildById(id int) (Guild, error) { + var guild Guild + err := db.readConn.QueryRow("select id, name from guild where id = ?", id).Scan(&guild.ID, &guild.Name) + if err != nil { + log.Printf("Guild not found: %v", err) + } + return guild, nil } \ No newline at end of file