56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
|
|
package main
|
||
|
|
|
||
|
|
import (
|
||
|
|
"log/slog"
|
||
|
|
"net/http"
|
||
|
|
"os"
|
||
|
|
"os/signal"
|
||
|
|
"smpp-otp/internal/config"
|
||
|
|
"smpp-otp/internal/delivery/routers"
|
||
|
|
"smpp-otp/internal/repository"
|
||
|
|
"smpp-otp/internal/service"
|
||
|
|
db "smpp-otp/pkg/database"
|
||
|
|
"smpp-otp/pkg/lib/logger"
|
||
|
|
"syscall"
|
||
|
|
)
|
||
|
|
|
||
|
|
func main() {
|
||
|
|
cfg := config.LoadConfig()
|
||
|
|
|
||
|
|
logger, err := logger.SetupLogger(cfg.Env)
|
||
|
|
if err != nil {
|
||
|
|
slog.Error("failed to set up logger: %v", err)
|
||
|
|
os.Exit(1)
|
||
|
|
}
|
||
|
|
|
||
|
|
logger.InfoLogger.Info("Server is up and running")
|
||
|
|
slog.Info("Server is up and running")
|
||
|
|
|
||
|
|
database, err := db.InitDB(cfg)
|
||
|
|
if err != nil {
|
||
|
|
logger.ErrorLogger.Error("failed to initialize database: %v", err)
|
||
|
|
os.Exit(1)
|
||
|
|
}
|
||
|
|
repo := repository.NewOTPRepository(database.GetClient(), logger)
|
||
|
|
otpService := service.NewOTPService(repo, logger)
|
||
|
|
|
||
|
|
r := routers.SetupOTPRoutes(otpService, logger)
|
||
|
|
|
||
|
|
stop := make(chan os.Signal, 1)
|
||
|
|
signal.Notify(stop, os.Interrupt, syscall.SIGTERM)
|
||
|
|
|
||
|
|
go func() {
|
||
|
|
<-stop
|
||
|
|
logger.InfoLogger.Info("Shutting down the server gracefully...")
|
||
|
|
if err := database.Close(); err != nil {
|
||
|
|
logger.ErrorLogger.Error("Error closing database:", err)
|
||
|
|
}
|
||
|
|
os.Exit(0)
|
||
|
|
}()
|
||
|
|
|
||
|
|
err = http.ListenAndServe(cfg.HTTPServer.Address, r)
|
||
|
|
if err != nil {
|
||
|
|
logger.ErrorLogger.Error("Server failed to start:", err)
|
||
|
|
}
|
||
|
|
}
|