Implement stinky creation and gettage

This commit is contained in:
2024-10-27 17:28:14 +01:00
parent a9af44c381
commit 664081ba73

54
main.go
View File

@@ -12,6 +12,7 @@ import (
var Error *log.Logger var Error *log.Logger
var Warning *log.Logger var Warning *log.Logger
func init() { func init() {
log.SetFlags(log.Lmicroseconds | log.Lshortfile) log.SetFlags(log.Lmicroseconds | log.Lshortfile)
logFile, err := os.Create("main.log") logFile, err := os.Create("main.log")
@@ -31,6 +32,7 @@ func init() {
} }
var db DB var db DB
func main() { func main() {
inputFile := flag.String("if", "input", "Input file") inputFile := flag.String("if", "input", "Input file")
flag.Parse() flag.Parse()
@@ -94,16 +96,21 @@ func ParseNote(data string) (NoteData, error) {
} }
func SaveNote(data NoteData) error { func SaveNote(data NoteData) error {
log.Printf("%#v", data) guild, err := GetOrCreateGuildByName(data.Guild)
guild, err := GetGuildByName(data.Guild)
if err != nil { 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 return nil
} }
func GetGuildByName(name string) (Guild, error) { func GetOrCreateGuildByName(name string) (Guild, error) {
var guild Guild var guild Guild
err := db.readConn.QueryRow("select id, name from guild where name = ?", name).Scan(&guild.ID, &guild.Name) err := db.readConn.QueryRow("select id, name from guild where name = ?", name).Scan(&guild.ID, &guild.Name)
if err != nil { if err != nil {
@@ -138,3 +145,40 @@ func GetGuildById(id int) (Guild, error) {
} }
return guild, nil return guild, nil
} }
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
}