77 lines
1.6 KiB
Go
77 lines
1.6 KiB
Go
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
|
|
}
|