首次提交
This commit is contained in:
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user