2026-06-14 11:33:31 +08:00
|
|
|
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"
|
2026-07-04 02:34:20 +00:00
|
|
|
"github.com/muyuqingfeng/iloom/auth-service/internal/storage"
|
2026-06-14 11:33:31 +08:00
|
|
|
"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)
|
|
|
|
|
|
2026-07-04 02:34:20 +00:00
|
|
|
minioStorage, err := storage.NewMinIOStorage(storage.MinIOConfig{
|
|
|
|
|
Endpoint: cfg.MinIOEndpoint,
|
|
|
|
|
AccessKey: cfg.MinIOAccessKey,
|
|
|
|
|
SecretKey: cfg.MinIOSecretKey,
|
|
|
|
|
Bucket: cfg.MinIOBucket,
|
|
|
|
|
UseSSL: cfg.MinIOUseSSL,
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("warning: minio init failed: %v (file upload disabled)", err)
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-14 11:33:31 +08:00
|
|
|
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)
|
2026-07-04 02:34:20 +00:00
|
|
|
commonH := handler.NewCommonHandler(shareLinkRepo, auditLogRepo, minioStorage)
|
2026-06-14 11:33:31 +08:00
|
|
|
|
|
|
|
|
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)
|
2026-07-04 02:34:20 +00:00
|
|
|
commonGroup.POST("/upload", commonH.Upload)
|
2026-06-14 11:33:31 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
addr := ":" + cfg.Port
|
|
|
|
|
log.Printf("auth-service listening on %s", addr)
|
|
|
|
|
if err := r.Run(addr); err != nil {
|
|
|
|
|
log.Fatalf("server error: %v", err)
|
|
|
|
|
}
|
|
|
|
|
}
|