package main import ( "flag" "fmt" "io" "log" "os" ) var Error *log.Logger var Warning *log.Logger func init() { log.SetFlags(log.Lmicroseconds | log.Lshortfile) logFile, err := os.Create("main.log") if err != nil { log.Printf("Error creating log file: %v", err) os.Exit(1) } logger := io.MultiWriter(os.Stdout, logFile) log.SetOutput(logger) Error = log.New(io.MultiWriter(logFile, os.Stderr, os.Stdout), fmt.Sprintf("%sERROR:%s ", "\033[0;101m", "\033[0m"), log.Lmicroseconds|log.Lshortfile) Warning = log.New(io.MultiWriter(logFile, os.Stdout), fmt.Sprintf("%sWarning:%s ", "\033[0;93m", "\033[0m"), log.Lmicroseconds|log.Lshortfile) } var db DB var gs GuildService var ps PlayerService var ns NoteService func main() { inputFile := flag.String("if", "input", "Input file") flag.Parse() log.Printf("Input file: %s", *inputFile) db = DB{ path: "data/db.db", } err := db.Open() if err != nil { Error.Printf("Failed opening database: %v", err) return } 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 } log.Printf("%#v", string(inputData)) res, err := gs.Query(GuildServiceQuery{}) if err != nil { 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 // } } // 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) // } // 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) // } // 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 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 // } // 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) // } // 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 // } // 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 // }