package main import ( "context" "errors" "net/http" "os" "os/signal" "syscall" "github.com/sirupsen/logrus" "git.urec56.ru/urec/chat_back_go/config" "git.urec56.ru/urec/chat_back_go/internal/database" "git.urec56.ru/urec/chat_back_go/internal/domain" "git.urec56.ru/urec/chat_back_go/internal/logger" "git.urec56.ru/urec/chat_back_go/internal/repository" "git.urec56.ru/urec/chat_back_go/internal/service" "git.urec56.ru/urec/chat_back_go/internal/transport/rest" ) func main() { logrus.Info("app is starting...") cfg := config.GetConfig() log := logger.NewLogger(cfg) db, rdb, mc, closeDBs, err := database.New(cfg, log) if err != nil { log.Fatalf("error occurred while database initialization: %s", err) } defer closeDBs() mdb := mc.Database(cfg.Mongo.DB) domain.Init(log) repo := repository.NewRepository(db, log, mdb) serv := service.NewService(repo, cfg, log, rdb) srv := rest.NewServer(serv, log, cfg) go func() { if err = srv.Run(cfg.Srv.Port); !errors.Is(err, http.ErrServerClosed) { log.Fatalf("error occurred while running rest server: %s", err) } }() log.Infof("starting server on port %d\n", cfg.Srv.Port) quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit log.Info("shutting down the server") if err = srv.Shutdown(context.Background()); err != nil { log.Fatalf("error occurred while shutting down rest server: %s", err) } }