Files
infinite-canvas/router/router.go
T
HouYunFei fff7074218 feat(admin): 添加管理员用户算力点管理和日志功能
- 在管理员API中新增用户算力点调整功能和信用日志相关接口
- 实现后端用户算力点调整逻辑和信用日志的增删改查操作
- 在管理员界面用户管理页面添加算力点调整功能
- 新增独立的算力点日志管理页面,支持日志查看和编辑
- 添加算力点日志相关的数据模型和服务函数
- 更新数据库文档说明第三方资料存储结构
- 添加dayjs依赖用于时间格式化显示
2026-05-25 12:57:27 +08:00

76 lines
3.1 KiB
Go

package router
import (
"net/http"
"github.com/basketikun/infinite-canvas/handler"
"github.com/basketikun/infinite-canvas/middleware"
"github.com/gin-gonic/gin"
)
func New() *gin.Engine {
router := gin.Default()
router.RedirectTrailingSlash = false
_ = router.SetTrustedProxies(nil)
api := router.Group("/api")
api.GET("/health", func(c *gin.Context) {
c.String(http.StatusOK, "ok")
})
api.POST("/auth/register", gin.WrapF(handler.Register))
api.POST("/auth/login", gin.WrapF(handler.Login))
api.GET("/auth/linux-do/authorize", gin.WrapF(handler.LinuxDoAuthorize))
api.GET("/auth/linux-do/callback", gin.WrapF(handler.LinuxDoCallback))
api.GET("/auth/me", middleware.OptionalAuth, gin.WrapF(handler.CurrentUser))
api.GET("/settings", gin.WrapF(handler.Settings))
v1 := api.Group("/v1", middleware.UserAuth)
v1.POST("/images/generations", gin.WrapF(handler.AIImagesGenerations))
v1.POST("/images/edits", gin.WrapF(handler.AIImagesEdits))
v1.POST("/chat/completions", gin.WrapF(handler.AIChatCompletions))
v1.POST("/videos", gin.WrapF(handler.AIVideos))
v1.GET("/videos/:id", func(c *gin.Context) {
handler.AIVideo(c.Writer, c.Request, c.Param("id"))
})
v1.GET("/videos/:id/content", func(c *gin.Context) {
handler.AIVideoContent(c.Writer, c.Request, c.Param("id"))
})
api.GET("/prompts", middleware.OptionalAuth, gin.WrapF(handler.Prompts))
api.GET("/assets", middleware.OptionalAuth, gin.WrapF(handler.Assets))
api.POST("/admin/login", gin.WrapF(handler.AdminLogin))
admin := api.Group("/admin", middleware.AdminAuth)
admin.GET("/users", gin.WrapF(handler.AdminUsers))
admin.POST("/users", gin.WrapF(handler.AdminSaveUser))
admin.POST("/users/:id/credits", func(c *gin.Context) {
handler.AdminAdjustUserCredits(c.Writer, c.Request, c.Param("id"))
})
admin.DELETE("/users/:id", func(c *gin.Context) {
handler.AdminDeleteUser(c.Writer, c.Request, c.Param("id"))
})
admin.GET("/credit-logs", gin.WrapF(handler.AdminCreditLogs))
admin.POST("/credit-logs", gin.WrapF(handler.AdminSaveCreditLog))
admin.DELETE("/credit-logs/:id", func(c *gin.Context) {
handler.AdminDeleteCreditLog(c.Writer, c.Request, c.Param("id"))
})
admin.GET("/settings", gin.WrapF(handler.AdminSettings))
admin.POST("/settings", gin.WrapF(handler.AdminSaveSettings))
admin.POST("/settings/channel-models", gin.WrapF(handler.AdminChannelModels))
admin.POST("/settings/channel-test", gin.WrapF(handler.AdminTestChannelModel))
admin.GET("/prompt-categories", gin.WrapF(handler.AdminPromptCategories))
admin.POST("/prompt-categories/sync", gin.WrapF(handler.AdminSyncPromptCategories))
admin.GET("/prompts", gin.WrapF(handler.AdminPrompts))
admin.POST("/prompts", gin.WrapF(handler.AdminSavePrompt))
admin.POST("/prompts/batch-delete", gin.WrapF(handler.AdminDeletePrompts))
admin.DELETE("/prompts/:id", func(c *gin.Context) {
handler.AdminDeletePrompt(c.Writer, c.Request, c.Param("id"))
})
admin.GET("/assets", gin.WrapF(handler.AdminAssets))
admin.POST("/assets", gin.WrapF(handler.AdminSaveAsset))
admin.DELETE("/assets/:id", func(c *gin.Context) {
handler.AdminDeleteAsset(c.Writer, c.Request, c.Param("id"))
})
router.NoRoute(middleware.NotFoundJSON)
return router
}