package api import ( "github.com/gin-gonic/gin" socialcore "veza-backend-api/internal/core/social" "veza-backend-api/internal/handlers" ) // setupSocialRoutes configure les routes sociales func (r *APIRouter) setupSocialRoutes(router *gin.RouterGroup) { socialService := socialcore.NewService(r.db.GormDB, r.logger) if r.config.CacheService != nil { socialService.SetCacheService(r.config.CacheService) } socialHandler := handlers.NewSocialHandler(socialService, r.logger) groupHandler := handlers.NewGroupHandler(socialService, r.logger) social := router.Group("/social") { if r.config.AuthMiddleware != nil { social.GET("/feed", r.config.AuthMiddleware.OptionalAuth(), socialHandler.GetFeed) } else { social.GET("/feed", socialHandler.GetFeed) } social.GET("/explore", socialHandler.GetExplore) social.GET("/trending", socialHandler.GetTrending) social.GET("/posts/user/:user_id", socialHandler.GetPostsByUser) social.GET("/groups", groupHandler.ListGroups) if r.config.AuthMiddleware != nil { social.GET("/groups/mine", r.config.AuthMiddleware.RequireAuth(), groupHandler.ListMyGroups) social.GET("/groups/:id", r.config.AuthMiddleware.OptionalAuth(), groupHandler.GetGroup) } else { social.GET("/groups/:id", groupHandler.GetGroup) } if r.config.AuthMiddleware != nil { protected := social.Group("") protected.Use(r.config.AuthMiddleware.RequireAuth()) r.applyCSRFProtection(protected) protected.POST("/posts", socialHandler.CreatePost) protected.POST("/like", socialHandler.ToggleLike) protected.POST("/comments", socialHandler.AddComment) protected.POST("/groups", groupHandler.CreateGroup) protected.POST("/groups/:id/join", groupHandler.JoinGroup) protected.DELETE("/groups/:id/leave", groupHandler.LeaveGroup) protected.POST("/groups/:id/request", groupHandler.RequestToJoin) protected.GET("/groups/:id/requests", groupHandler.ListJoinRequests) protected.POST("/groups/:id/requests/:request_id/approve", groupHandler.ApproveJoinRequest) protected.POST("/groups/:id/requests/:request_id/reject", groupHandler.RejectJoinRequest) protected.POST("/groups/:id/invite", groupHandler.InviteMember) protected.PUT("/groups/:id/members/:user_id/role", groupHandler.UpdateMemberRole) } } }