first commit
This commit is contained in:
102
cmd/server/main.go
Normal file
102
cmd/server/main.go
Normal file
@@ -0,0 +1,102 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
adapters2 "Sipro-Marketplaces/internal/test/adapters"
|
||||
"context"
|
||||
"database/sql"
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"sync"
|
||||
"syscall"
|
||||
|
||||
"Sipro-Marketplaces/internal/config"
|
||||
"Sipro-Marketplaces/internal/db"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"google.golang.org/grpc"
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
httpApp *fiber.App
|
||||
grpcServer *grpc.Server
|
||||
db *sql.DB
|
||||
}
|
||||
|
||||
func NewServer(cfg config.Config) (*Server, error) {
|
||||
dbConn, err := db.NewConnection(cfg.DB)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
httpApp := fiber.New()
|
||||
//adapters.RegisterHTTPRoutes(httpApp, testService)
|
||||
kal := httpApp.Group("/test")
|
||||
adapters2.RegisterRouter(&kal)
|
||||
grpcServer := grpc.NewServer()
|
||||
|
||||
return &Server{
|
||||
httpApp: httpApp,
|
||||
grpcServer: grpcServer,
|
||||
db: dbConn,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Server) Start(cfg config.Config) error {
|
||||
var wg sync.WaitGroup
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
log.Printf("Starting HTTP server on %s", cfg.HTTP)
|
||||
if err := s.httpApp.Listen(cfg.HTTP); err != nil {
|
||||
log.Printf("HTTP server failed: %v", err)
|
||||
cancel()
|
||||
}
|
||||
}()
|
||||
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
log.Printf("Starting gRPC server on %s", cfg.GRPC)
|
||||
}()
|
||||
|
||||
wg.Add(1)
|
||||
|
||||
quit := make(chan os.Signal, 1)
|
||||
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
||||
select {
|
||||
case <-quit:
|
||||
log.Println("Shutting down...")
|
||||
case <-ctx.Done():
|
||||
log.Println("Context cancelled, shutting down...")
|
||||
}
|
||||
|
||||
s.shutdown()
|
||||
wg.Wait()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Server) shutdown() {
|
||||
log.Println("Initiating graceful shutdown...")
|
||||
if err := s.httpApp.Shutdown(); err != nil {
|
||||
log.Printf("Failed to stop HTTP: %v", err)
|
||||
}
|
||||
s.grpcServer.GracefulStop()
|
||||
if err := s.db.Close(); err != nil {
|
||||
log.Printf("Failed to close DB: %v", err)
|
||||
}
|
||||
log.Println("Shutdown complete")
|
||||
}
|
||||
|
||||
func main() {
|
||||
cfg := config.Load()
|
||||
server, err := NewServer(cfg)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to initialize server: %v", err)
|
||||
}
|
||||
if err := server.Start(cfg); err != nil {
|
||||
log.Fatalf("Server failed: %v", err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user