feat(backend): implement task creation and admin web

This commit is contained in:
QiuSW
2026-07-26 14:03:32 +08:00
parent 2b265c92fc
commit c5d3b215ff
58 changed files with 8773 additions and 83 deletions
@@ -19,26 +19,62 @@ type DatabasePinger interface {
type EventLogger func(string)
func NewRouter(
database DatabasePinger,
logEvent EventLogger,
) (http.Handler, error) {
if database == nil {
type RouteRegistrar func(gin.IRoutes) error
type RouterDependencies struct {
Database DatabasePinger
RegisterAdminRoutes RouteRegistrar
LogEvent EventLogger
}
type AdminWeb interface {
Register(gin.IRoutes)
}
func NewAdminRouteRegistrar(
services AdminServices,
web AdminWeb,
) (RouteRegistrar, error) {
if err := services.validate(); err != nil {
return nil, err
}
if web == nil {
return nil, errors.New("admin web handler is required")
}
return func(routes gin.IRoutes) error {
if err := registerAdminAPI(routes, services); err != nil {
return err
}
web.Register(routes)
return nil
}, nil
}
func NewRouter(dependencies RouterDependencies) (http.Handler, error) {
if dependencies.Database == nil {
return nil, errors.New("database pinger is required")
}
if logEvent == nil {
if dependencies.RegisterAdminRoutes == nil {
return nil, errors.New("admin route registrar is required")
}
if dependencies.LogEvent == nil {
return nil, errors.New("event logger is required")
}
gin.SetMode(gin.ReleaseMode)
router := gin.New()
router.Use(requestIDMiddleware())
router.Use(safeRecovery(logEvent))
router.Use(safeRecovery(dependencies.LogEvent))
router.HandleMethodNotAllowed = true
if err := router.SetTrustedProxies(nil); err != nil {
return nil, err
}
router.GET("/healthz", healthHandler(database))
router.GET("/healthz", healthHandler(dependencies.Database))
adminRoutes := router.Group("")
adminRoutes.Use(loopbackAdminOnly())
if err := dependencies.RegisterAdminRoutes(adminRoutes); err != nil {
return nil, err
}
router.NoRoute(func(ctx *gin.Context) {
ctx.JSON(http.StatusNotFound, errorResponse(
ctx,