85 lines
1.8 KiB
Go
85 lines
1.8 KiB
Go
package app
|
|
|
|
import (
|
|
"codeword/internal/controllers"
|
|
"codeword/internal/repository"
|
|
"codeword/internal/server/http"
|
|
"codeword/internal/service"
|
|
"context"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
type Config struct {
|
|
AppName string `env:"APP_NAME"`
|
|
}
|
|
|
|
func Run(ctx context.Context, config Config, logger *zap.Logger) error {
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
logger.Error("Recovered from a panic", zap.Any("error", r))
|
|
}
|
|
}()
|
|
|
|
logger.Info("App started", zap.Any("config", config))
|
|
|
|
ctx, cancel := context.WithCancel(ctx)
|
|
defer cancel()
|
|
|
|
// Инициализация репозиториев
|
|
|
|
promocodeRepository := repository.NewPromocodeRepository()
|
|
|
|
recoverRepository := repository.NewRecoverRepository()
|
|
|
|
statsRepository := repository.NewStatsRepository()
|
|
|
|
// Инициализация сервисов
|
|
|
|
promocodeService := service.NewPromocodeService(promocodeRepository)
|
|
|
|
recoverService := service.NewRecoverService(recoverRepository)
|
|
|
|
statsService := service.NewStatsService(statsRepository)
|
|
|
|
// Инициализация контроллеров
|
|
|
|
promocodeController := controllers.NewPromocodeController(promocodeService)
|
|
|
|
recoverController := controllers.NewRecoverController(recoverService)
|
|
|
|
statsController := controllers.NewStatsController(statsService)
|
|
|
|
// Создание сервера
|
|
server := http.NewServer(http.ServerConfig{
|
|
Controllers: []http.Controller{
|
|
|
|
promocodeController,
|
|
|
|
recoverController,
|
|
|
|
statsController,
|
|
},
|
|
})
|
|
|
|
go func() {
|
|
err := server.Start("Host + : + Port")
|
|
if err != nil {
|
|
logger.Error("Server startup error", zap.Error(err))
|
|
cancel()
|
|
}
|
|
}()
|
|
|
|
// Вывод маршрутов
|
|
server.ListRoutes()
|
|
|
|
<-ctx.Done()
|
|
|
|
logger.Info("App shutting down gracefully")
|
|
|
|
//TODO
|
|
// Остановка сервера
|
|
|
|
return nil
|
|
}
|