107 lines
3.3 KiB
Go
Raw Normal View History

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/auth-service/internal/storage"
"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)
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)
}
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, minioStorage)
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)
commonGroup.POST("/upload", commonH.Upload)
}
addr := ":" + cfg.Port
log.Printf("auth-service listening on %s", addr)
if err := r.Run(addr); err != nil {
log.Fatalf("server error: %v", err)
}
}