53 lines
1.5 KiB
Go
53 lines
1.5 KiB
Go
|
package app
|
||
|
|
||
|
import (
|
||
|
"codeword/internal/adapters/client"
|
||
|
controller "codeword/internal/controller/recovery"
|
||
|
"codeword/internal/initialize"
|
||
|
"codeword/internal/repository"
|
||
|
httpserver "codeword/internal/server/http"
|
||
|
"codeword/internal/services"
|
||
|
"context"
|
||
|
"go.uber.org/zap"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func Run(ctx context.Context, cfg initialize.Config, logger *zap.Logger) error {
|
||
|
logger.Info("Запуск приложения", zap.String("AppName", cfg.AppName))
|
||
|
|
||
|
userRepo := repository.NewUserRepository()
|
||
|
recoveryEmailSender := &client.RecoveryEmailSender{}
|
||
|
recoveryService := services.NewRecoveryService(logger, userRepo, recoveryEmailSender)
|
||
|
recoveryController := controller.NewRecoveryController(logger, recoveryService)
|
||
|
server := httpserver.NewServer(httpserver.ServerConfig{
|
||
|
Logger: logger,
|
||
|
Repo: userRepo,
|
||
|
RecoveryController: recoveryController,
|
||
|
})
|
||
|
|
||
|
go func() {
|
||
|
if err := server.Start(":3000"); err != nil {
|
||
|
logger.Error("Ошибка запуска сервера", zap.Error(err))
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
<-ctx.Done()
|
||
|
|
||
|
if err := shutdownApp(server, logger); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
logger.Info("Приложение остановлено")
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func shutdownApp(server *httpserver.Server, logger *zap.Logger) error {
|
||
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||
|
defer cancel()
|
||
|
|
||
|
if err := server.Shutdown(ctx); err != nil {
|
||
|
logger.Error("Ошибка при остановке сервера Fiber", zap.Error(err))
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
}
|