147 lines
3.1 KiB
Go
147 lines
3.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/gofiber/fiber/v3"
|
|
"github.com/gofiber/fiber/v3/middleware/logger"
|
|
|
|
_ "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 selectPlayers.sql
|
|
var selectPlayers 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.Use(logger.New(logger.Config{
|
|
Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
|
|
}))
|
|
|
|
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.GetAllPlayers()
|
|
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,
|
|
})
|
|
}
|