Refactored project structure
This commit is contained in:
74
backend/server.go
Normal file
74
backend/server.go
Normal file
@@ -0,0 +1,74 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"menu/handlers"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/go-chi/chi/v5/middleware"
|
||||
"github.com/go-chi/cors"
|
||||
)
|
||||
|
||||
func NewServer(app *handlers.App, address string, allowedOrigins []string) *http.Server {
|
||||
r := chi.NewRouter()
|
||||
|
||||
// Middleware
|
||||
r.Use(middleware.RequestID)
|
||||
r.Use(middleware.Recoverer)
|
||||
r.Use(middleware.Logger)
|
||||
r.Use(cors.Handler(cors.Options{
|
||||
AllowedOrigins: allowedOrigins,
|
||||
AllowedMethods: []string{"GET", "POST", "OPTIONS"},
|
||||
AllowedHeaders: []string{"Accept", "Authorization", "Content-Type"},
|
||||
AllowCredentials: true,
|
||||
MaxAge: 300,
|
||||
}))
|
||||
|
||||
// Routes (bind methods to app)
|
||||
r.Post("/api/register", app.HandleRegister)
|
||||
r.Post("/api/login", app.HandleLogin)
|
||||
r.Get("/api/options", app.HandleOptions)
|
||||
r.Post("/api/selection", app.HandleSaveSelection)
|
||||
r.Get("/api/selection", app.HandleGetSelection)
|
||||
r.Get("/api/orders", app.HandleGetOrders)
|
||||
r.Post("/api/orders", app.HandleAddOrder)
|
||||
r.Get("/api/orders/stream", app.HandleOrdersStream)
|
||||
r.Delete("/api/orders/{id}", app.HandleDeleteOrder)
|
||||
r.Get("/api/me", app.HandleWhoAmI)
|
||||
r.Get("/api/finalize/time", app.HandleGetFinalizeTime)
|
||||
|
||||
// Only role 0 and 1 allowed
|
||||
r.Route("/api/admin", func(r chi.Router) {
|
||||
r.Use(app.RequireLevel(1))
|
||||
r.Post("/menu", app.HandleAdminMenu)
|
||||
r.Get("/menu", app.HandleGetMenuRaw)
|
||||
r.Get("/users", app.HandleGetUsers)
|
||||
r.Delete("/users/{id}", app.HandleDeleteUser)
|
||||
r.Put("/users/{id}", app.HandleUpdateUser)
|
||||
r.Get("/orders", app.HandleGetAllOrders)
|
||||
r.Put("/orders/{id}/status", app.HandleAdminUpdateOrderStatus)
|
||||
r.Delete("/orders/{id}", app.HandleAdminDeleteOrder)
|
||||
r.Get("/finalize/time", app.HandleGetFinalizeTime)
|
||||
r.Post("/finalize/time", app.HandleSetFinalizeTime)
|
||||
r.Post("/finalize/now", app.HandleFinalizeNow)
|
||||
r.Get("/finalize/last", app.HandleGetLastSummary)
|
||||
})
|
||||
|
||||
// Moderators (role <= 50)
|
||||
r.Route("/api/mod", func(r chi.Router) {
|
||||
r.Use(app.RequireLevel(50))
|
||||
r.Post("/menu", app.HandleAdminMenu) // menu editor
|
||||
r.Get("/menu", app.HandleGetMenuRaw)
|
||||
r.Get("/finalize/time", app.HandleGetFinalizeTime)
|
||||
r.Post("/finalize/time", app.HandleSetFinalizeTime)
|
||||
r.Post("/finalize/now", app.HandleFinalizeNow)
|
||||
r.Get("/finalize/last", app.HandleGetLastSummary)
|
||||
})
|
||||
|
||||
// Return configured server
|
||||
return &http.Server{
|
||||
Addr: address,
|
||||
Handler: r,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user