[feature] migrate to monorepo
This commit is contained in:
commit
05ddc1f783
267 changed files with 75165 additions and 0 deletions
90
backend/internal/server/server.go
Normal file
90
backend/internal/server/server.go
Normal file
|
@ -0,0 +1,90 @@
|
|||
package server
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/rs/zerolog/log"
|
||||
"tss-rocks-be/ent"
|
||||
"tss-rocks-be/internal/config"
|
||||
"tss-rocks-be/internal/handler"
|
||||
"tss-rocks-be/internal/middleware"
|
||||
"tss-rocks-be/internal/service"
|
||||
"tss-rocks-be/internal/storage"
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
config *config.Config
|
||||
router *gin.Engine
|
||||
handler *handler.Handler
|
||||
server *http.Server
|
||||
}
|
||||
|
||||
func New(cfg *config.Config, client *ent.Client) (*Server, error) {
|
||||
// Initialize storage
|
||||
store, err := storage.NewStorage(context.Background(), &cfg.Storage)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to initialize storage: %w", err)
|
||||
}
|
||||
|
||||
// Initialize service
|
||||
svc := service.NewService(client, store)
|
||||
|
||||
// Initialize RBAC
|
||||
if err := svc.InitializeRBAC(context.Background()); err != nil {
|
||||
return nil, fmt.Errorf("failed to initialize RBAC: %w", err)
|
||||
}
|
||||
|
||||
// Initialize handler
|
||||
h := handler.NewHandler(cfg, svc)
|
||||
|
||||
// Initialize router
|
||||
router := gin.Default()
|
||||
|
||||
// Add CORS middleware if needed
|
||||
router.Use(middleware.CORS())
|
||||
|
||||
// 添加全局中间件
|
||||
router.Use(gin.Logger())
|
||||
router.Use(gin.Recovery())
|
||||
router.Use(middleware.RateLimit(&cfg.RateLimit))
|
||||
|
||||
// 添加访问日志中间件
|
||||
accessLog, err := middleware.AccessLog(&cfg.AccessLog)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to initialize access log: %w", err)
|
||||
}
|
||||
router.Use(accessLog)
|
||||
|
||||
// 为上传路由添加文件验证中间件
|
||||
router.POST("/api/v1/media/upload", middleware.ValidateUpload(&cfg.Storage.Upload))
|
||||
|
||||
// Register routes
|
||||
h.RegisterRoutes(router)
|
||||
|
||||
return &Server{
|
||||
config: cfg,
|
||||
router: router,
|
||||
handler: h,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Server) Start() error {
|
||||
addr := fmt.Sprintf("%s:%d", s.config.Server.Host, s.config.Server.Port)
|
||||
s.server = &http.Server{
|
||||
Addr: addr,
|
||||
Handler: s.router,
|
||||
}
|
||||
|
||||
log.Info().Msgf("Starting server on %s", addr)
|
||||
return s.server.ListenAndServe()
|
||||
}
|
||||
|
||||
func (s *Server) Shutdown(ctx context.Context) error {
|
||||
if s.server != nil {
|
||||
return s.server.Shutdown(ctx)
|
||||
}
|
||||
return nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue