From 664081ba7392bf761bcd21c6983bb08cc6910c80 Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Sun, 27 Oct 2024 17:28:14 +0100 Subject: [PATCH] Implement stinky creation and gettage --- main.go | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 51 insertions(+), 7 deletions(-) diff --git a/main.go b/main.go index bb56dfd..186d189 100644 --- a/main.go +++ b/main.go @@ -12,6 +12,7 @@ import ( var Error *log.Logger var Warning *log.Logger + func init() { log.SetFlags(log.Lmicroseconds | log.Lshortfile) logFile, err := os.Create("main.log") @@ -31,6 +32,7 @@ func init() { } var db DB + func main() { inputFile := flag.String("if", "input", "Input file") flag.Parse() @@ -56,7 +58,7 @@ func main() { Error.Printf("Failed parsing note: %v", err) return } - + err = SaveNote(note) if err != nil { Error.Printf("Failed saving note: %v", err) @@ -94,16 +96,21 @@ func ParseNote(data string) (NoteData, error) { } func SaveNote(data NoteData) error { - log.Printf("%#v", data) - guild, err := GetGuildByName(data.Guild) + guild, err := GetOrCreateGuildByName(data.Guild) if err != nil { - return err + return fmt.Errorf("failed getting guild for %s: %v", data.Guild, err) } - log.Printf("%#v", guild) + + stinky, err := GetOrCreateStinkyByName(data.Player, guild) + if err != nil { + return fmt.Errorf("failed getting stinky for %s: %v", data.Player, err) + } + + return nil } -func GetGuildByName(name string) (Guild, error) { +func GetOrCreateGuildByName(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 { @@ -137,4 +144,41 @@ func GetGuildById(id int) (Guild, error) { log.Printf("Guild not found: %v", err) } return guild, nil -} \ No newline at end of file +} + +func GetOrCreateStinkyByName(name string, guild Guild) (Stinky, error) { + var stinky Stinky + err := db.readConn.QueryRow("select id, name, guild from stinky where name = ?", name).Scan(&stinky.ID, &stinky.Name, &stinky.Guild.ID) + if err != nil { + log.Printf("Stinky not found: %v", err) + stinky, err = CreateStinky(name, Guild{}) + if err != nil { + return stinky, fmt.Errorf("failed creating stinky: %v", err) + } + } + return stinky, nil +} + +func CreateStinky(name string, guild Guild) (Stinky, error) { + stinky := Stinky{} + res, err := db.writeConn.Exec("insert into stinky (name, guild) values (?, ?)", name, guild.ID) + if err != nil { + return stinky, fmt.Errorf("failed to insert stinky: %v", err) + } + + id, err := res.LastInsertId() + if err != nil { + return stinky, fmt.Errorf("failed getting last insert id for %d: %v", id, err) + } + + return GetStinkyById(int(id)) +} + +func GetStinkyById(id int) (Stinky, error) { + stinky := Stinky{} + err := db.readConn.QueryRow("select id, name, guild from stinky where id = ?", id).Scan(&stinky.ID, &stinky.Name, &stinky.Guild.ID) + if err != nil { + return stinky, fmt.Errorf("failed getting stinky for %d: %v", id, err) + } + return stinky, nil +}