package main import ( "fmt" "github.com/gofiber/fiber/v3" "io" "log" "os" _ "embed" ) 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 var as AssociationService //go:embed selectPlayer.sql var selectPlayer string //go:embed selectAssociation.sql var selectAssociation string //go:embed selectNotes.sql var selectNotes string func main() { 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} as = AssociationService{db: &db} app := fiber.New() app.Post("/note/new", CreateNote) app.Get("/player/:name", GetPlayer) app.Get("/player", GetPlayers) log.Fatal(app.Listen(":3000")) } func CreateNote(c fiber.Ctx) error { data := c.Body() res := Response{} note, err := ParseNote(string(data)) if err != nil { Error.Printf("Failed parsing note: %v", err) res.Success = false res.Message = err.Error() return c.Status(400).JSON(res) } if note.Player == "" { Error.Printf("No player specified in note: %v", note) res.Success = false res.Message = "No player specified" return c.Status(400).JSON(res) } dbnote, _, err := PersistNoteData(note) if err != nil { Error.Printf("Failed persisting note: %v", err) res.Success = false res.Message = err.Error() return c.Status(500).JSON(res) } res.Data = dbnote res.Message = "OK" return c.Status(200).JSON(res) } func GetPlayer(c fiber.Ctx) error { name := c.Params("name") log.Printf("Getting player %s", name) player, err := ps.GetAllPlayerInfo(name, 10) if err != nil { Error.Printf("Failed getting player: %v", err) return c.Status(500).JSON(Response{ Success: false, Message: err.Error(), }) } return c.Status(200).JSON(Response{ Success: true, Data: player, }) } func GetPlayers(c fiber.Ctx) error { players, err := ps.Query(PlayerServiceQuery{}) if err != nil { Error.Printf("Failed getting players: %v", err) return c.Status(500).JSON(Response{ Success: false, Message: err.Error(), }) } return c.Status(200).JSON(Response{ Success: true, Data: players, }) }