119 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
		
			Executable File
		
	
	
	
	
package main
 | 
						|
 | 
						|
import (
 | 
						|
	adapters2 "Sipro-Marketplaces/internal/test/adapters"
 | 
						|
	"context"
 | 
						|
	"database/sql"
 | 
						|
	"github.com/carlmjohnson/requests"
 | 
						|
	"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() {
 | 
						|
	type post struct {
 | 
						|
		Name     string  `json:"name"`
 | 
						|
		Language string  `json:"language"`
 | 
						|
		ID       string  `json:"id"`
 | 
						|
		Bio      string  `json:"bio"`
 | 
						|
		Version  float64 `json:"version"`
 | 
						|
	}
 | 
						|
	response := new([]post)
 | 
						|
	err := requests.URL("https://microsoftedge.github.io/Demos/json-dummy-data/5MB-min.json").ToJSON(&response).Fetch(context.Background())
 | 
						|
	if err != nil {
 | 
						|
		log.Fatalf("Failed to fetch URL: %v", err)
 | 
						|
 | 
						|
	}
 | 
						|
	println(len(*response))
 | 
						|
	return
 | 
						|
	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)
 | 
						|
	}
 | 
						|
}
 |