codeword/internal/app/app.go

85 lines
1.8 KiB
Go
Raw Normal View History

2023-12-29 11:30:20 +00:00
package app
import (
2024-03-03 20:18:42 +00:00
"codeword/internal/controllers"
2023-12-29 11:30:20 +00:00
"codeword/internal/repository"
2024-03-03 20:18:42 +00:00
"codeword/internal/server/http"
"codeword/internal/service"
2023-12-29 11:30:20 +00:00
"context"
2024-03-03 20:18:42 +00:00
2023-12-29 11:30:20 +00:00
"go.uber.org/zap"
)
2024-03-03 20:18:42 +00:00
type Config struct {
AppName string `env:"APP_NAME"`
}
func Run(ctx context.Context, config Config, logger *zap.Logger) error {
2024-01-15 20:21:16 +00:00
defer func() {
if r := recover(); r != nil {
logger.Error("Recovered from a panic", zap.Any("error", r))
}
}()
2024-03-03 20:18:42 +00:00
logger.Info("App started", zap.Any("config", config))
2023-12-29 11:30:20 +00:00
2024-01-15 08:43:55 +00:00
ctx, cancel := context.WithCancel(ctx)
defer cancel()
2024-03-03 20:18:42 +00:00
// Инициализация репозиториев
2024-01-17 13:51:42 +00:00
2024-03-03 20:18:42 +00:00
promocodeRepository := repository.NewPromocodeRepository()
2024-03-03 07:34:19 +00:00
2024-03-03 20:18:42 +00:00
recoverRepository := repository.NewRecoverRepository()
2024-01-11 16:29:53 +00:00
2024-03-03 20:18:42 +00:00
statsRepository := repository.NewStatsRepository()
2024-01-11 16:29:53 +00:00
2024-03-03 20:18:42 +00:00
// Инициализация сервисов
2023-12-29 18:02:50 +00:00
2024-03-03 20:18:42 +00:00
promocodeService := service.NewPromocodeService(promocodeRepository)
2023-12-29 18:02:50 +00:00
2024-03-03 20:18:42 +00:00
recoverService := service.NewRecoverService(recoverRepository)
2024-01-11 16:29:53 +00:00
2024-03-03 20:18:42 +00:00
statsService := service.NewStatsService(statsRepository)
2024-03-03 10:13:13 +00:00
2024-03-03 20:18:42 +00:00
// Инициализация контроллеров
2023-12-29 12:41:26 +00:00
2024-03-03 20:18:42 +00:00
promocodeController := controllers.NewPromocodeController(promocodeService)
2024-01-01 14:13:54 +00:00
2024-03-03 20:18:42 +00:00
recoverController := controllers.NewRecoverController(recoverService)
statsController := controllers.NewStatsController(statsService)
// Создание сервера
server := http.NewServer(http.ServerConfig{
Controllers: []http.Controller{
promocodeController,
2024-01-05 11:37:06 +00:00
2024-03-03 20:18:42 +00:00
recoverController,
2024-01-01 14:13:54 +00:00
2024-03-03 20:18:42 +00:00
statsController,
},
2023-12-29 11:30:20 +00:00
})
go func() {
2024-03-03 20:18:42 +00:00
err := server.Start("Host + : + Port")
if err != nil {
2024-01-05 11:37:06 +00:00
logger.Error("Server startup error", zap.Error(err))
2024-01-16 15:10:16 +00:00
cancel()
2023-12-29 11:30:20 +00:00
}
}()
2024-03-03 20:18:42 +00:00
// Вывод маршрутов
2024-02-25 12:00:05 +00:00
server.ListRoutes()
2024-01-16 15:10:16 +00:00
<-ctx.Done()
2023-12-29 18:02:50 +00:00
2024-03-03 20:18:42 +00:00
logger.Info("App shutting down gracefully")
//TODO
// Остановка сервера
2023-12-29 18:02:50 +00:00
2023-12-29 11:30:20 +00:00
return nil
}