/
foult080
/
hackaton-app
Обзор
Документация
Войти
/
foult080
/
hackaton-app
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
cmd/server/main.go
95 строк
2 KB
Foult080
fix(): some fixes for auth
10 июл 2026, 10:58
10 июл 2026, 10:58
ff9ca13
Код
Авторство
О чём код?
package main import ( "context" "log/slog" "net/http" "os" "os/signal" "syscall" "time" "github.com/kkrit/hackaton/internal/config" "github.com/kkrit/hackaton/internal/handler" "github.com/kkrit/hackaton/internal/repository" "github.com/kkrit/hackaton/internal/router" "github.com/kkrit/hackaton/internal/service" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) func main() { cfg := config.Load() ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() client, err := mongo.Connect(ctx, options.Client().ApplyURI(cfg.MongoURI)) if err != nil { slog.Error("failed to connect to MongoDB", "error", err) os.Exit(1) } if err := client.Ping(ctx, nil); err != nil { slog.Error("failed to ping MongoDB", "error", err) os.Exit(1) } slog.Info("connected to MongoDB") db := client.Database("app") expiresIn := 900 if n, err := time.ParseDuration(cfg.JWTExpiresIn + "s"); err == nil { expiresIn = int(n.Seconds()) } refreshExpiresIn := 604800 if n, err := time.ParseDuration(cfg.RefreshExpiresIn + "s"); err == nil { refreshExpiresIn = int(n.Seconds()) } repos := repository.NewRepositories(db) svcs := service.NewServices(repos, &service.Config{ JWTSecret: cfg.JWTSecret, JWTExpiresIn: expiresIn, RefreshExpiresIn: refreshExpiresIn, }) hdlrs := handler.NewHandlers(svcs) r := router.Setup(hdlrs, cfg) srv := &http.Server{ Addr: ":" + cfg.Port, Handler: r, ReadTimeout: 15 * time.Second, WriteTimeout: 15 * time.Second, IdleTimeout: 60 * time.Second, } go func() { slog.Info("server starting", "port", cfg.Port, "env", cfg.Env) if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { slog.Error("server error", "error", err) os.Exit(1) } }() quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit slog.Info("shutting down server...") shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), 10*time.Second) defer shutdownCancel() if err := srv.Shutdown(shutdownCtx); err != nil { slog.Error("server forced to shutdown", "error", err) } if err := client.Disconnect(shutdownCtx); err != nil { slog.Error("MongoDB disconnect error", "error", err) } slog.Info("server stopped") }