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