首次提交

This commit is contained in:
zeronline
2026-06-25 08:39:47 +08:00
parent 20a93c703a
commit c5cccd346b
169 changed files with 24720 additions and 0 deletions
+124
View File
@@ -0,0 +1,124 @@
package router
import (
"github.com/gin-gonic/gin"
"github.com/inchstep/server/internal/config"
"github.com/inchstep/server/internal/handlers"
"github.com/inchstep/server/internal/middleware"
"github.com/inchstep/server/internal/services"
"gorm.io/gorm"
)
// Setup 配置所有路由
func Setup(db *gorm.DB, cfg *config.Config) *gin.Engine {
r := gin.Default()
r.Use(middleware.CORS())
r.Use(middleware.ErrorHandler())
userSvc := services.NewUserService(db)
checkinSvc := services.NewCheckInService(db)
pointsSvc := services.NewPointsService(db)
socialSvc := services.NewSocialService(db)
adminSvc := services.NewAdminService(db, userSvc)
pointsSvc.InitAchievements()
adminSvc.SeedAdmin()
userH := handlers.NewUserHandler(userSvc, cfg.JWTSecret)
checkinH := handlers.NewCheckInHandler(checkinSvc, pointsSvc)
socialH := handlers.NewSocialHandler(socialSvc)
achievementH := handlers.NewAchievementHandler(pointsSvc)
adminH := handlers.NewAdminHandler(adminSvc, cfg.JWTSecret)
api := r.Group("/api")
{
// 公开路由
auth := api.Group("/auth")
{
auth.POST("/register", userH.Register)
auth.POST("/login", userH.Login)
}
// 管理员登录(公开)
admin := api.Group("/admin")
{
admin.POST("/auth/login", adminH.Login)
}
// 需要认证的路由
authed := api.Group("")
authed.Use(middleware.AuthRequired(cfg.JWTSecret))
{
// 用户模块
user := authed.Group("/users")
{
user.GET("/profile", userH.GetProfile)
user.PUT("/profile", userH.UpdateProfile)
user.DELETE("/account", userH.DeleteAccount)
user.GET("/points", userH.GetPoints)
}
// 打卡模块
checkin := authed.Group("/checkin")
{
checkin.POST("/items", checkinH.CreateItem)
checkin.GET("/items", checkinH.ListItems)
checkin.GET("/items/:id", checkinH.GetItem)
checkin.PUT("/items/:id", checkinH.UpdateItem)
checkin.DELETE("/items/:id", checkinH.DeleteItem)
checkin.POST("/items/:id/pause", checkinH.PauseItem)
checkin.POST("/items/:id/resume", checkinH.ResumeItem)
checkin.POST("/records", checkinH.CreateRecord)
checkin.GET("/records", checkinH.GetRecords)
checkin.POST("/records/makeup", checkinH.MakeupRecord)
checkin.GET("/streak/:id", checkinH.GetStreak)
checkin.GET("/stats/monthly", checkinH.GetMonthlyStats)
checkin.GET("/today-status", checkinH.GetTodayStatus)
}
// 社交模块
social := authed.Group("/social")
{
social.POST("/friends/request", socialH.SendFriendRequest)
social.POST("/friends/accept", socialH.AcceptFriendRequest)
social.DELETE("/friends/:userId", socialH.RemoveFriend)
social.GET("/friends", socialH.ListFriends)
social.GET("/feed", socialH.GetFeed)
social.POST("/posts", socialH.CreatePost)
social.POST("/posts/:id/like", socialH.LikePost)
social.POST("/posts/:id/comment", socialH.CommentPost)
social.POST("/groups", socialH.CreateGroup)
social.POST("/groups/:id/join", socialH.JoinGroup)
social.POST("/groups/:id/leave", socialH.LeaveGroup)
social.GET("/groups/:id/members", socialH.GetGroupMembers)
}
// 成就模块
authed.GET("/achievements", achievementH.ListAll)
authed.GET("/achievements/mine", achievementH.ListUserAchievements)
// 管理后台 API(需额外管理员认证)
adminAuthed := api.Group("/admin")
adminAuthed.Use(middleware.AuthRequired(cfg.JWTSecret))
{
adminAuthed.GET("/dashboard", adminH.Dashboard)
adminAuthed.GET("/users", adminH.ListUsers)
adminAuthed.GET("/posts", adminH.ListPosts)
adminAuthed.GET("/admins", adminH.ListAdmins)
adminAuthed.POST("/admins", adminH.CreateAdmin)
adminAuthed.DELETE("/admins/:id", adminH.DisableAdmin)
}
}
}
r.GET("/health", func(c *gin.Context) {
c.JSON(200, gin.H{"status": "ok"})
})
return r
}