diff --git a/main.go b/main.go index 142c89b..a994005 100644 --- a/main.go +++ b/main.go @@ -6,6 +6,9 @@ import ( "io" "log" "os" + "regexp" + "strings" + "time" ) var Error *log.Logger @@ -60,157 +63,49 @@ func main() { } log.Printf("%#v", string(inputData)) - res, err := gs.Query(GuildServiceQuery{}) + note, err := ParseNote(string(inputData)) if err != nil { - Error.Printf("Failed getting guilds: %v", err) + Error.Printf("Failed parsing note: %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 - // } + log.Printf("%#v", note) } -// 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 -// } +var associationRe = regexp.MustCompile(`r:(\w+)(?:\(([^)]+)\))?`) +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") -// 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) -// } + matches := associationRe.FindAllStringSubmatch(res.Note, -1) + for _, match := range matches { + res.Associations = append(res.Associations, NoteAssociationData{ + Player: match[1], + Note: match[2], + }) + } -// 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 -// } \ No newline at end of file + return res, nil +}