99 lines
2.4 KiB
Go
Executable File
99 lines
2.4 KiB
Go
Executable File
package main
|
||
|
||
import (
|
||
"context"
|
||
"fmt"
|
||
"github.com/jackc/pgx/v5/pgxpool"
|
||
"github.com/joho/godotenv"
|
||
"google.golang.org/grpc"
|
||
"net"
|
||
"os"
|
||
"sipro-mps/internal/marketplace"
|
||
ozon "sipro-mps/internal/ozon/products"
|
||
"sipro-mps/internal/redis"
|
||
)
|
||
|
||
func logMessage(level string, format string, a ...interface{}) {
|
||
const (
|
||
green = "\033[32m"
|
||
red = "\033[31m"
|
||
yellow = "\033[33m"
|
||
blue = "\033[34m"
|
||
reset = "\033[0m"
|
||
)
|
||
switch level {
|
||
case "info":
|
||
fmt.Printf("%s✅ [INFO]%s %s %s\n", green, reset, fmt.Sprintf(format, a...), "ℹ️")
|
||
case "error":
|
||
fmt.Printf("%s❌ [ERROR]%s %s %s\n", red, reset, fmt.Sprintf(format, a...), "🚨")
|
||
default:
|
||
fmt.Printf("%s[LOG]%s %s\n", blue, reset, fmt.Sprintf(format, a...))
|
||
}
|
||
}
|
||
|
||
func createGrpcServer(pool *pgxpool.Pool) {
|
||
|
||
lis, err := net.Listen("tcp", ":8080")
|
||
if err != nil {
|
||
fmt.Printf("failed to listen: %v\n", err)
|
||
return
|
||
}
|
||
grpcServer := grpc.NewServer()
|
||
|
||
repo, err := marketplace.RegisterAdapterGRPC(grpcServer, pool)
|
||
if err != nil {
|
||
fmt.Printf("failed to register gRPC server: %v\n", err)
|
||
return
|
||
}
|
||
_, err = ozon.RegisterAdapterGRPC(grpcServer, *repo)
|
||
if err != nil {
|
||
fmt.Printf("failed to register Ozon Products gRPC server: %v\n", err)
|
||
return
|
||
}
|
||
|
||
fmt.Println("gRPC server registered successfully.")
|
||
// Start serving gRPC requests
|
||
fmt.Println("gRPC server is starting on port 8080...")
|
||
|
||
if err := grpcServer.Serve(lis); err != nil {
|
||
fmt.Printf("failed to serve: %v\n", err)
|
||
}
|
||
fmt.Println("gRPC server created.")
|
||
}
|
||
|
||
func main() {
|
||
// Initializing the dotenv file
|
||
err := godotenv.Load()
|
||
if err != nil {
|
||
logMessage("error", "Error loading .env file: %v", err)
|
||
return
|
||
}
|
||
logMessage("info", "Dotenv file loaded successfully. 🌱")
|
||
|
||
ctx := context.Background()
|
||
|
||
// Initializing the Redis client
|
||
err = redis.InitClient(ctx)
|
||
if err != nil {
|
||
logMessage("error", "Failed to initialize Redis client: %v", err)
|
||
return
|
||
}
|
||
defer redis.CloseClient()
|
||
logMessage("info", "Redis client initialized successfully. 🟥")
|
||
|
||
// Initializing pgx connection
|
||
dbpool, err := pgxpool.New(ctx, os.Getenv("POSTGRES_URL"))
|
||
if err != nil {
|
||
logMessage("error", "Failed to connect to PostgreSQL: %v", err)
|
||
return
|
||
}
|
||
defer dbpool.Close()
|
||
logMessage("info", "Connected to PostgreSQL successfully. 🐘")
|
||
createGrpcServer(dbpool)
|
||
|
||
}
|
||
|
||
//for _, item := range items {
|
||
// //logMessage("info", "Product ID: %s, Name: %s, Price: %d", item.Price, item.Name, item.Price)
|
||
//}
|