add leaderboard
This commit is contained in:
@@ -59,4 +59,9 @@ func InitializeControllers(c *dig.Container) {
|
||||
if err != nil {
|
||||
logging.Panic("unable to initialize websocket controller")
|
||||
}
|
||||
|
||||
err = c.Invoke(NewLeaderboardController)
|
||||
if err != nil {
|
||||
logging.Panic("unable to initialize leaderboard controller")
|
||||
}
|
||||
}
|
||||
|
||||
66
local/controller/leaderboard.go
Normal file
66
local/controller/leaderboard.go
Normal file
@@ -0,0 +1,66 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"acc-server-manager/local/middleware"
|
||||
"acc-server-manager/local/model"
|
||||
"acc-server-manager/local/service"
|
||||
"acc-server-manager/local/utl/common"
|
||||
"acc-server-manager/local/utl/error_handler"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type LeaderboardController struct {
|
||||
service *service.LeaderboardService
|
||||
errorHandler *error_handler.ControllerErrorHandler
|
||||
}
|
||||
|
||||
func NewLeaderboardController(ls *service.LeaderboardService, routeGroups *common.RouteGroups, auth *middleware.AuthMiddleware) *LeaderboardController {
|
||||
lc := &LeaderboardController{
|
||||
service: ls,
|
||||
errorHandler: error_handler.NewControllerErrorHandler(),
|
||||
}
|
||||
|
||||
routeGroups.Leaderboard.Get("/", lc.Get)
|
||||
routeGroups.Leaderboard.Put("/", auth.Authenticate, lc.Update)
|
||||
|
||||
return lc
|
||||
}
|
||||
|
||||
// Get returns the leaderboard for a server (public, no auth required).
|
||||
func (lc *LeaderboardController) Get(c *fiber.Ctx) error {
|
||||
serverIDStr := c.Params("id")
|
||||
serverID, err := uuid.Parse(serverIDStr)
|
||||
if err != nil {
|
||||
return lc.errorHandler.HandleUUIDError(c, "server ID")
|
||||
}
|
||||
|
||||
data, err := lc.service.Get(c.UserContext(), serverID)
|
||||
if err != nil {
|
||||
return lc.errorHandler.HandleServiceError(c, err)
|
||||
}
|
||||
|
||||
return c.JSON(data)
|
||||
}
|
||||
|
||||
// Update replaces the leaderboard for a server (requires JWT auth).
|
||||
func (lc *LeaderboardController) Update(c *fiber.Ctx) error {
|
||||
serverIDStr := c.Params("id")
|
||||
serverID, err := uuid.Parse(serverIDStr)
|
||||
if err != nil {
|
||||
return lc.errorHandler.HandleUUIDError(c, "server ID")
|
||||
}
|
||||
|
||||
var input model.LeaderboardInput
|
||||
if err := c.BodyParser(&input); err != nil {
|
||||
return lc.errorHandler.HandleParsingError(c, err)
|
||||
}
|
||||
|
||||
data, err := lc.service.Update(c.UserContext(), serverID, &input)
|
||||
if err != nil {
|
||||
return lc.errorHandler.HandleServiceError(c, err)
|
||||
}
|
||||
|
||||
return c.JSON(data)
|
||||
}
|
||||
Reference in New Issue
Block a user