Implement stinky creation and gettage

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

58
main.go
View File

@@ -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
}
}
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
}