package main import ( "log" "net/http" "github.com/gin-gonic/gin" "github.com/muyuqingfeng/iloom/auth-service/internal/config" "github.com/muyuqingfeng/iloom/auth-service/internal/handler" "github.com/muyuqingfeng/iloom/auth-service/internal/repository" "github.com/muyuqingfeng/iloom/auth-service/internal/service" "github.com/muyuqingfeng/iloom/shared/pkg/auth" "github.com/muyuqingfeng/iloom/shared/pkg/database" sgrpc "github.com/muyuqingfeng/iloom/shared/pkg/grpc" sharedMW "github.com/muyuqingfeng/iloom/shared/pkg/middleware" ) func main() { cfg := config.Load() db, err := database.NewDBFromDSN(cfg.DBDSN) if err != nil { log.Fatalf("connect database: %v", err) } defer db.Close() sysClient, err := sgrpc.NewSystemClient(cfg.SystemRPCAddr) if err != nil { log.Fatalf("connect system-rpc: %v", err) } defer sysClient.Close() jwtMgr := auth.NewJWTManager(cfg.JWTSecret, cfg.JWTRefreshSecret) profileRepo := repository.NewProfileRepo(db) companyRepo := repository.NewCompanyRepo(db) memberRepo := repository.NewMemberRepo(db) notifRepo := repository.NewNotificationRepo(db) shareLinkRepo := repository.NewShareLinkRepo(db) auditLogRepo := repository.NewAuditLogRepo(db) authSvc := service.NewAuthService(profileRepo, companyRepo, memberRepo, sysClient, jwtMgr) companySvc := service.NewCompanyService(companyRepo) memberSvc := service.NewMemberService(memberRepo, sysClient) notifSvc := service.NewNotificationService(notifRepo) authH := handler.NewAuthHandler(authSvc) companyH := handler.NewCompanyHandler(companySvc) memberH := handler.NewMemberHandler(memberSvc) notifH := handler.NewNotificationHandler(notifSvc) commonH := handler.NewCommonHandler(shareLinkRepo, auditLogRepo) r := gin.New() r.Use( sharedMW.RequestID(), sharedMW.Logger(), sharedMW.Recovery(), ) r.GET("/health", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"status": "ok"}) }) authGroup := r.Group("/api/v1/auth") { authGroup.POST("/register", authH.Register) authGroup.POST("/login", authH.Login) authGroup.POST("/logout", authH.Logout) authGroup.POST("/refresh", authH.Refresh) authGroup.GET("/me", authH.Me) } commonGroup := r.Group("/api/v1/common") { commonGroup.GET("/companies", companyH.ListRelationships) commonGroup.GET("/companies/:id", companyH.GetCompany) commonGroup.GET("/members", memberH.List) commonGroup.POST("/members", memberH.Create) commonGroup.DELETE("/members/:id", memberH.Delete) commonGroup.GET("/notifications", notifH.List) commonGroup.PATCH("/notifications/:id", notifH.MarkRead) commonGroup.POST("/share-links", commonH.CreateShareLink) commonGroup.GET("/share-links/:code", commonH.GetShareLink) commonGroup.POST("/feedback", commonH.Feedback) commonGroup.POST("/crash-reports", commonH.CrashReport) } addr := ":" + cfg.Port log.Printf("auth-service listening on %s", addr) if err := r.Run(addr); err != nil { log.Fatalf("server error: %v", err) } }