chat_back_go/cmd/app/main.go

59 lines
1.4 KiB
Go

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)
}
}