amocrm/internal/app/app.go

77 lines
1.6 KiB
Go
Raw Normal View History

2024-04-04 09:42:40 +00:00
package app
import (
"amocrm/internal/controllers"
"amocrm/internal/repository"
"amocrm/internal/server/http"
"amocrm/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()
// Инициализация репозиториев
accountRepository := repository.NewAccountRepository()
differentRepository := repository.NewDifferentRepository()
// Инициализация сервисов
accountService := service.NewAccountService(accountRepository)
differentService := service.NewDifferentService(differentRepository)
// Инициализация контроллеров
accountController := controllers.NewAccountController(accountService)
differentController := controllers.NewDifferentController(differentService)
// Создание сервера
server := http.NewServer(http.ServerConfig{
Controllers: []http.Controller{
accountController,
differentController,
},
})
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
}