2024-07-23 14:16:26 +05:30
|
|
|
package transport
|
|
|
|
|
|
|
|
|
|
import (
|
2024-09-18 16:42:54 +05:30
|
|
|
"cybertron/internal/transport/middleware"
|
2024-07-23 14:16:26 +05:30
|
|
|
"cybertron/internal/transport/router"
|
2024-09-18 16:42:54 +05:30
|
|
|
"cybertron/pkg/metrics"
|
2024-07-23 14:16:26 +05:30
|
|
|
"fmt"
|
2024-08-21 13:01:17 +05:30
|
|
|
"github.com/gin-contrib/cors"
|
2024-07-23 14:16:26 +05:30
|
|
|
"os"
|
|
|
|
|
"os/signal"
|
|
|
|
|
"syscall"
|
2024-07-24 12:51:37 +05:30
|
|
|
"time"
|
2024-07-23 14:16:26 +05:30
|
|
|
|
|
|
|
|
"cybertron/configs"
|
|
|
|
|
"cybertron/internal/dependencies"
|
|
|
|
|
|
|
|
|
|
ginzap "github.com/gin-contrib/zap"
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
"go.uber.org/zap"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Server struct {
|
|
|
|
|
gin *gin.Engine
|
|
|
|
|
dependencies *dependencies.Dependencies
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func NewServer(dep *dependencies.Dependencies) *Server {
|
|
|
|
|
return &Server{
|
|
|
|
|
gin: gin.New(),
|
|
|
|
|
dependencies: dep,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *Server) router() {
|
|
|
|
|
router.ReadinessRouter(s.gin)
|
2024-07-24 12:51:37 +05:30
|
|
|
router.ProjectRouter(s.gin, s.dependencies)
|
2024-08-16 13:47:08 +05:30
|
|
|
router.SourceMapRouter(s.gin, s.dependencies)
|
2024-07-24 15:46:50 +05:30
|
|
|
router.ReleasesRouter(s.gin, s.dependencies)
|
2024-07-27 19:54:12 +05:30
|
|
|
router.ExceptionRouter(s.gin, s.dependencies)
|
2024-08-21 13:01:17 +05:30
|
|
|
router.SearchRouter(s.gin, s.dependencies)
|
2024-07-23 14:16:26 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *Server) Start() {
|
2024-07-24 12:51:37 +05:30
|
|
|
s.gin.Use(ginzap.Ginzap(s.dependencies.Logger, time.RFC3339, false))
|
2024-08-21 13:01:17 +05:30
|
|
|
s.gin.Use(cors.New(cors.Config{
|
|
|
|
|
AllowOrigins: []string{"*"},
|
|
|
|
|
AllowMethods: []string{"PUT", "PATCH", "GET", "POST", "OPTIONS"},
|
|
|
|
|
AllowHeaders: []string{"*", "x-session-token"},
|
|
|
|
|
ExposeHeaders: []string{"Content-Length"},
|
|
|
|
|
AllowCredentials: true,
|
|
|
|
|
MaxAge: 24 * time.Hour,
|
|
|
|
|
}))
|
2024-09-18 16:42:54 +05:30
|
|
|
s.gin.Use(middleware.MetricMiddleware())
|
2024-09-10 10:04:08 +05:30
|
|
|
//s.gin.Use(middleware.PermissionMiddleware(s.dependencies.Service.AuthService))
|
2024-07-23 14:16:26 +05:30
|
|
|
s.router()
|
2024-09-18 16:42:54 +05:30
|
|
|
metrics.AdminHandler()
|
2024-07-23 14:16:26 +05:30
|
|
|
|
|
|
|
|
port := configs.GetPort()
|
|
|
|
|
s.dependencies.Logger.Info("Starting server", zap.Int("port", port))
|
|
|
|
|
|
|
|
|
|
err := s.gin.Run(fmt.Sprintf(":%v", port))
|
|
|
|
|
if err != nil {
|
|
|
|
|
s.dependencies.Logger.Fatal("error while starting the server", zap.Error(err))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *Server) Close() {
|
|
|
|
|
quit := make(chan os.Signal, 1)
|
|
|
|
|
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
|
|
|
|
<-quit
|
|
|
|
|
s.dependencies.Logger.Info("Shutdown server ...")
|
|
|
|
|
}
|