package app import ( "context" "{{.Modules.logger.Import}}" ) {{.Modules.env.Struct}} func Run(ctx context.Context, config Config, logger {{.Modules.logger.Type}}) error { defer func() { if r := recover(); r != nil { logger.Error("Recovered from a panic", zap.Any("error", r)) } }() {{.Modules.logger.Message "info" "App started" "config" "config"}} ctx, cancel := context.WithCancel(ctx) defer cancel() // Инициализация репозиториев {{range $key, $value := .LayersData.Repositories}} {{$key}}Repository := {{$value.PackageName}}.New{{$value.Name}}Repository() {{end}} // Инициализация сервисов {{range $key, $value := .LayersData.Services}} {{$key}}Service := {{$value.PackageName}}.New{{$value.Name}}Service({{$key}}Repository) {{end}} // Инициализация контроллеров {{range $key, $value := .LayersData.Controllers}} {{$key}}Controller := {{$value.PackageName}}.New{{$value.Name}}Controller({{$key}}Service) {{end}} // Создание сервера server := {{.LayersData.ServerData}}.NewServer({{.LayersData.ServerData}}.ServerConfig{ Controllers: []{{.LayersData.ServerData}}.Controller{ {{range $key, $value := .LayersData.Controllers}} {{$key}}Controller, {{end}} }, }) 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 }