Files
stinkinator/main.go

216 lines
5.7 KiB
Go

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