amocrm/template/internal/app/app.go.tmpl
2024-04-04 12:42:40 +03:00

67 lines
1.7 KiB
Cheetah

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
}