Files
shooting-event/backend/routes.go
2026-04-01 11:47:03 +04:00

58 lines
2.0 KiB
Go

package main
import (
"net/http"
"os"
"path/filepath"
"strings"
"github.com/labstack/echo/v4"
)
func registerAPIRoutes(e *echo.Echo, app *App) {
api := e.Group("/api")
api.GET("/health", app.handleHealth)
api.GET("/state", app.handleGetState)
api.GET("/events", app.handleEvents)
api.POST("/admin/login", app.handleAdminLogin)
api.POST("/admin/logout", app.handleAdminLogout, app.adminOnly)
api.GET("/admin/state", app.handleGetState, app.adminOnly)
api.PUT("/admin/settings", app.handleUpdateAdminSettings, app.adminOnly)
api.POST("/admin/players", app.handleCreatePlayer, app.adminOnly)
api.POST("/admin/players/auto-group", app.handleAutoGroupPlayers, app.adminOnly)
api.PUT("/admin/players/:id", app.handleUpdatePlayer, app.adminOnly)
api.DELETE("/admin/players/:id", app.handleDeletePlayer, app.adminOnly)
api.PUT("/admin/scores/:stage/:id", app.handleUpdateScore, app.adminOnly)
api.PUT("/admin/scores/:stage/:id/proof", app.handleUpdateScoreProof, app.adminOnly)
api.DELETE("/admin/scores/:stage/:id/proof", app.handleDeleteScoreProof, app.adminOnly)
api.POST("/admin/scores/:stage/:id/advice", app.handleScoreAdvice, app.adminOnly)
api.POST("/admin/scores/:stage/reset", app.handleResetStageScores, app.adminOnly)
}
func registerWebRoutes(e *echo.Echo, cfg Config) {
e.GET("/*", func(c echo.Context) error {
requestPath := strings.TrimPrefix(c.Param("*"), "/")
if strings.HasPrefix(requestPath, "api") {
return echo.ErrNotFound
}
if requestPath == "" {
requestPath = "index.html"
}
clean := strings.TrimPrefix(filepath.Clean("/"+requestPath), "/")
assetPath := filepath.Join(cfg.WebDir, clean)
if stat, err := os.Stat(assetPath); err == nil && !stat.IsDir() {
return c.File(assetPath)
}
indexPath := filepath.Join(cfg.WebDir, "index.html")
if stat, err := os.Stat(indexPath); err == nil && !stat.IsDir() {
return c.File(indexPath)
}
return c.String(http.StatusNotFound, "frontend build not found. run make build")
})
}