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,
 | 
						|
	})
 | 
						|
}
 |