更新前后端代码
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"filestoragesystem/internal/config"
|
||||
"filestoragesystem/internal/controller"
|
||||
"filestoragesystem/internal/middleware"
|
||||
"filestoragesystem/internal/repository"
|
||||
"filestoragesystem/internal/service"
|
||||
)
|
||||
|
||||
// New 创建gin引擎并注册全部路由
|
||||
func New(cfg *config.Config, db *gorm.DB, svc *service.Services) *gin.Engine {
|
||||
gin.SetMode(cfg.Server.Mode)
|
||||
|
||||
r := gin.New()
|
||||
r.Use(gin.Recovery())
|
||||
r.Use(middleware.RequestID())
|
||||
r.Use(middleware.CORS())
|
||||
r.Use(middleware.Logger())
|
||||
|
||||
// 健康检查
|
||||
r.GET("/health", func(c *gin.Context) {
|
||||
c.JSON(200, gin.H{"status": "ok"})
|
||||
})
|
||||
|
||||
// 托管前端静态资源(前端为hash路由,全部路径回退到index.html)
|
||||
dist := "../backend/dist"
|
||||
if _, err := os.Stat(dist); err == nil {
|
||||
r.Static("/assets", dist+"/assets")
|
||||
r.StaticFile("/favicon.svg", dist+"/favicon.svg")
|
||||
r.NoRoute(func(c *gin.Context) {
|
||||
c.File(dist + "/index.html")
|
||||
})
|
||||
}
|
||||
|
||||
api := r.Group("/api/v1")
|
||||
|
||||
// 公开接口
|
||||
api.GET("/status", controller.NewAdminController(controller.NewBase(svc)).SiteStatus)
|
||||
|
||||
authCtl := controller.NewAuthController(controller.NewBase(svc))
|
||||
api.POST("/auth/register", authCtl.Register)
|
||||
api.POST("/auth/login", authCtl.Login)
|
||||
|
||||
fileCtl := controller.NewFileController(controller.NewBase(svc))
|
||||
api.GET("/files/temp/:token", fileCtl.TempAccess) // 临时链接公开访问
|
||||
|
||||
// 认证接口
|
||||
authed := api.Group("")
|
||||
authed.Use(middleware.Auth(svc.Auth))
|
||||
authed.Use(middleware.RateLimit(&repository.SettingRepo{DB: db}))
|
||||
authed.Use(middleware.SiteStatus(svc.Admin))
|
||||
|
||||
// API密钥管理
|
||||
authed.POST("/auth/apikeys", authCtl.CreateAPIKey)
|
||||
authed.GET("/auth/apikeys", authCtl.ListAPIKeys)
|
||||
authed.DELETE("/auth/apikeys/:id", authCtl.DeleteAPIKey)
|
||||
|
||||
// 个人资料
|
||||
userCtl := controller.NewUserController(controller.NewBase(svc))
|
||||
authed.GET("/user/profile", userCtl.GetProfile)
|
||||
authed.PUT("/user/profile", userCtl.UpdateProfile)
|
||||
authed.PUT("/user/password", userCtl.ChangePassword)
|
||||
|
||||
// 项目管理
|
||||
projectCtl := controller.NewProjectController(controller.NewBase(svc))
|
||||
authed.POST("/projects", projectCtl.Create)
|
||||
authed.GET("/projects", projectCtl.List)
|
||||
authed.GET("/projects/:id", projectCtl.Get)
|
||||
authed.PUT("/projects/:id", projectCtl.Update)
|
||||
authed.DELETE("/projects/:id", projectCtl.Delete)
|
||||
|
||||
// 文件操作
|
||||
authed.POST("/files/upload", fileCtl.Upload)
|
||||
authed.GET("/files", fileCtl.List)
|
||||
authed.GET("/files/:id", fileCtl.GetInfo)
|
||||
authed.GET("/files/:id/download", fileCtl.Download)
|
||||
authed.DELETE("/files/:id", fileCtl.Delete)
|
||||
authed.POST("/files/:id/restore", fileCtl.Restore)
|
||||
authed.POST("/files/:id/temp-link", fileCtl.CreateTempLink)
|
||||
|
||||
// 统计
|
||||
statsCtl := controller.NewStatsController(controller.NewBase(svc))
|
||||
authed.GET("/stats/user", statsCtl.UserStats)
|
||||
authed.GET("/stats/project/:id", statsCtl.ProjectStats)
|
||||
authed.GET("/stats/traffic", statsCtl.TrafficStats)
|
||||
|
||||
// Webhook管理
|
||||
webhookCtl := controller.NewWebhookController(controller.NewBase(svc))
|
||||
authed.POST("/webhooks", webhookCtl.Create)
|
||||
authed.GET("/webhooks", webhookCtl.List)
|
||||
authed.PUT("/webhooks/:id", webhookCtl.Update)
|
||||
authed.DELETE("/webhooks/:id", webhookCtl.Delete)
|
||||
|
||||
// 管理后台
|
||||
adminCtl := controller.NewAdminController(controller.NewBase(svc))
|
||||
roleCtl := controller.NewRoleController(controller.NewBase(svc))
|
||||
|
||||
admin := authed.Group("/admin")
|
||||
// 用户管理(需要对应权限)
|
||||
users := admin.Group("/users")
|
||||
{
|
||||
users.GET("", middleware.RequirePermission("user:list"), adminCtl.ListUsers)
|
||||
users.GET("/:id", middleware.RequirePermission("user:detail"), adminCtl.GetUser)
|
||||
users.POST("", middleware.RequirePermission("user:create"), adminCtl.CreateUser)
|
||||
users.PUT("/:id", middleware.RequirePermission("user:edit"), adminCtl.UpdateUser)
|
||||
users.DELETE("/:id", middleware.RequirePermission("user:delete"), adminCtl.DeleteUser)
|
||||
users.PUT("/:id/status", middleware.RequirePermission("user:disable"), adminCtl.SetUserStatus)
|
||||
users.PUT("/:id/role", middleware.RequirePermission("user:assign_role"), adminCtl.AssignRole)
|
||||
users.POST("/:id/reset-password", middleware.RequirePermission("user:reset_password"), adminCtl.ResetPassword)
|
||||
}
|
||||
|
||||
// 角色权限管理(超级管理员)
|
||||
roles := admin.Group("/roles")
|
||||
{
|
||||
roles.GET("", middleware.RequirePermission("user:assign_role"), roleCtl.ListRoles)
|
||||
roles.GET("/:id", middleware.RequirePermission("user:assign_role"), roleCtl.GetRole)
|
||||
roles.POST("", middleware.RequirePermission("user:assign_role"), roleCtl.CreateRole)
|
||||
roles.PUT("/:id", middleware.RequirePermission("user:assign_role"), roleCtl.UpdateRole)
|
||||
roles.DELETE("/:id", middleware.RequirePermission("user:assign_role"), roleCtl.DeleteRole)
|
||||
roles.PUT("/:id/permissions", middleware.RequirePermission("user:assign_role"), roleCtl.SetPermissions)
|
||||
}
|
||||
admin.GET("/permissions", middleware.RequirePermission("user:assign_role"), roleCtl.ListPermissions)
|
||||
|
||||
// 系统设置
|
||||
settings := admin.Group("/settings")
|
||||
{
|
||||
settings.GET("", middleware.RequirePermission("system:settings:view"), adminCtl.GetSettings)
|
||||
settings.PUT("", middleware.RequirePermission("system:settings:edit"), adminCtl.UpdateSettings)
|
||||
settings.GET("/:group", middleware.RequirePermission("system:settings:view"), adminCtl.GetSettingsByGroup)
|
||||
settings.PUT("/:group", middleware.RequirePermission("system:settings:edit"), adminCtl.UpdateSettingsByGroup)
|
||||
}
|
||||
|
||||
// 日志管理
|
||||
logs := admin.Group("/logs")
|
||||
{
|
||||
logs.GET("/operation", middleware.RequirePermission("system:logs:operation"), adminCtl.ListOperationLogs)
|
||||
logs.GET("/operation/:id", middleware.RequirePermission("system:logs:operation"), adminCtl.GetOperationLog)
|
||||
logs.GET("/system", middleware.RequirePermission("system:logs:system"), adminCtl.ListSystemLogs)
|
||||
logs.GET("/system/:id", middleware.RequirePermission("system:logs:system"), adminCtl.GetSystemLog)
|
||||
logs.DELETE("/cleanup", middleware.RequirePermission("system:logs:cleanup"), adminCtl.CleanupLogs)
|
||||
}
|
||||
|
||||
// 数据备份
|
||||
admin.POST("/backup", middleware.RequirePermission("system:settings:edit"), adminCtl.Backup)
|
||||
admin.GET("/backups", middleware.RequirePermission("system:settings:view"), adminCtl.ListBackups)
|
||||
admin.GET("/backups/download", middleware.RequirePermission("system:settings:view"), adminCtl.DownloadBackup)
|
||||
|
||||
return r
|
||||
}
|
||||
Reference in New Issue
Block a user