Rework query to return lists
This commit is contained in:
270
main.go
270
main.go
@@ -6,8 +6,6 @@ import (
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
var Error *log.Logger
|
||||
@@ -32,6 +30,9 @@ func init() {
|
||||
}
|
||||
|
||||
var db DB
|
||||
var gs GuildService
|
||||
var ps PlayerService
|
||||
var ns NoteService
|
||||
|
||||
func main() {
|
||||
inputFile := flag.String("if", "input", "Input file")
|
||||
@@ -48,155 +49,168 @@ func main() {
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
gs = GuildService{db: &db}
|
||||
ps = PlayerService{db: &db}
|
||||
ns = NoteService{db: &db}
|
||||
|
||||
inputData, err := os.ReadFile(*inputFile)
|
||||
if err != nil {
|
||||
Error.Printf("Failed reading input file: %v", err)
|
||||
return
|
||||
}
|
||||
note, err := ParseNote(string(inputData))
|
||||
log.Printf("%#v", string(inputData))
|
||||
|
||||
res, err := gs.Query(GuildServiceQuery{})
|
||||
if err != nil {
|
||||
Error.Printf("Failed parsing note: %v", err)
|
||||
Error.Printf("Failed getting guilds: %v", err)
|
||||
return
|
||||
}
|
||||
log.Printf("%#v", res)
|
||||
// note, err := ParseNote(string(inputData))
|
||||
// if err != nil {
|
||||
// Error.Printf("Failed parsing note: %v", err)
|
||||
// return
|
||||
// }
|
||||
|
||||
err = SaveNote(note)
|
||||
if err != nil {
|
||||
Error.Printf("Failed saving note: %v", err)
|
||||
return
|
||||
}
|
||||
// err = SaveNote(note)
|
||||
// if err != nil {
|
||||
// Error.Printf("Failed saving note: %v", err)
|
||||
// return
|
||||
// }
|
||||
}
|
||||
|
||||
func ParseNote(data string) (NoteData, error) {
|
||||
res := NoteData{}
|
||||
lines := strings.Split(data, "\n")
|
||||
note := []string{}
|
||||
for _, line := range lines {
|
||||
line = strings.TrimSpace(line)
|
||||
if line == "" {
|
||||
continue
|
||||
}
|
||||
parts := strings.Split(line, ":")
|
||||
switch parts[0] {
|
||||
case "p":
|
||||
res.Player = parts[1]
|
||||
case "d":
|
||||
var err error
|
||||
res.Date, err = time.Parse(time.DateOnly, parts[1])
|
||||
if err != nil {
|
||||
return res, fmt.Errorf("failed to parse date: %v", err)
|
||||
}
|
||||
case "g":
|
||||
res.Guild = parts[1]
|
||||
default:
|
||||
note = append(note, line)
|
||||
}
|
||||
}
|
||||
res.Note = strings.Join(note, "\n")
|
||||
return res, nil
|
||||
}
|
||||
// func ParseNote(data string) (NoteData, error) {
|
||||
// res := NoteData{}
|
||||
// lines := strings.Split(data, "\n")
|
||||
// note := []string{}
|
||||
// for _, line := range lines {
|
||||
// line = strings.TrimSpace(line)
|
||||
// if line == "" {
|
||||
// continue
|
||||
// }
|
||||
// parts := strings.Split(line, ":")
|
||||
// switch parts[0] {
|
||||
// case "p":
|
||||
// res.Player = parts[1]
|
||||
// case "d":
|
||||
// var err error
|
||||
// res.Date, err = time.Parse(time.DateOnly, parts[1])
|
||||
// if err != nil {
|
||||
// return res, fmt.Errorf("failed to parse date: %v", err)
|
||||
// }
|
||||
// case "g":
|
||||
// res.Guild = parts[1]
|
||||
// default:
|
||||
// note = append(note, line)
|
||||
// }
|
||||
// }
|
||||
// res.Note = strings.Join(note, "\n")
|
||||
// return res, nil
|
||||
// }
|
||||
|
||||
func SaveNote(data NoteData) error {
|
||||
guild, err := GetOrCreateGuildByName(data.Guild)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed getting guild for %s: %v", data.Guild, err)
|
||||
}
|
||||
// func SaveNote(data NoteData) error {
|
||||
// guild, err := GetOrCreateGuildByName(data.Guild)
|
||||
// if err != nil {
|
||||
// return fmt.Errorf("failed getting guild for %s: %v", data.Guild, err)
|
||||
// }
|
||||
|
||||
stinky, err := GetOrCreateStinkyByName(data.Player, guild)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed getting stinky for %s: %v", data.Player, err)
|
||||
}
|
||||
// stinky, err := GetOrCreateStinkyByName(data.Player, guild)
|
||||
// if err != nil {
|
||||
// return fmt.Errorf("failed getting stinky for %s: %v", data.Player, err)
|
||||
// }
|
||||
|
||||
stinky.Guild = guild
|
||||
note := Note{
|
||||
Content: data.Note,
|
||||
Timestamp: data.Date,
|
||||
Stinky: stinky,
|
||||
}
|
||||
err = InsertNote(note)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed inserting note: %v", err)
|
||||
}
|
||||
// stinky.Guild = guild
|
||||
// note := Note{
|
||||
// Content: data.Note,
|
||||
// Timestamp: data.Date,
|
||||
// Stinky: stinky,
|
||||
// }
|
||||
// err = InsertNote(note)
|
||||
// if err != nil {
|
||||
// return fmt.Errorf("failed inserting note: %v", err)
|
||||
// }
|
||||
|
||||
return nil
|
||||
}
|
||||
// return nil
|
||||
// }
|
||||
|
||||
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 {
|
||||
guild, err = CreateGuild(name)
|
||||
if err != nil {
|
||||
return guild, fmt.Errorf("failed creating guild: %v", err)
|
||||
}
|
||||
}
|
||||
return guild, nil
|
||||
}
|
||||
// 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 {
|
||||
// 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)
|
||||
}
|
||||
// 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)
|
||||
}
|
||||
// id, err := res.LastInsertId()
|
||||
// if err != nil {
|
||||
// return guild, fmt.Errorf("failed to get last insert id: %v", err)
|
||||
// }
|
||||
|
||||
return GetGuildById(int(id))
|
||||
}
|
||||
// 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
|
||||
}
|
||||
// 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
|
||||
// }
|
||||
|
||||
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, creating: %v", err)
|
||||
stinky, err = CreateStinky(name, Guild{})
|
||||
if err != nil {
|
||||
return stinky, fmt.Errorf("failed creating stinky: %v", err)
|
||||
}
|
||||
}
|
||||
return stinky, 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, creating: %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)
|
||||
}
|
||||
// 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)
|
||||
}
|
||||
// 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))
|
||||
}
|
||||
// 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
|
||||
}
|
||||
// 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
|
||||
// }
|
||||
|
||||
func InsertNote(note Note) error {
|
||||
_, err := db.writeConn.Exec("insert into note (content, timestamp, stinky) values (?, ?, ?)", note.Content, note.Timestamp, note.Stinky.ID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to insert note: %v", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
// func InsertNote(note Note) error {
|
||||
// log.Printf("Inserting note: %#v", note)
|
||||
// _, err := db.writeConn.Exec("insert into note (content, timestamp, stinky) values (?, ?, ?)", note.Content, note.Timestamp, note.Stinky.ID)
|
||||
// if err != nil {
|
||||
// return fmt.Errorf("failed to insert note: %v", err)
|
||||
// }
|
||||
// return nil
|
||||
// }
|
||||
Reference in New Issue
Block a user