80 lines
2.3 KiB
Go
80 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"git.sch9.ru/new_gate/ms-tester/config"
|
|
"git.sch9.ru/new_gate/ms-tester/internal/tester/delivery/rest"
|
|
problemsRepository "git.sch9.ru/new_gate/ms-tester/internal/tester/repository"
|
|
testerUseCase "git.sch9.ru/new_gate/ms-tester/internal/tester/usecase"
|
|
"git.sch9.ru/new_gate/ms-tester/pkg/external/postgres"
|
|
testerv1 "git.sch9.ru/new_gate/ms-tester/proto/tester/v1"
|
|
"github.com/gofiber/fiber/v2"
|
|
fiberlogger "github.com/gofiber/fiber/v2/middleware/logger"
|
|
"github.com/ilyakaznacheev/cleanenv"
|
|
"go.uber.org/zap"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
)
|
|
|
|
func main() {
|
|
var cfg config.Config
|
|
err := cleanenv.ReadConfig(".env", &cfg)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("error reading config: %s", err.Error()))
|
|
}
|
|
|
|
var logger *zap.Logger
|
|
if cfg.Env == "prod" {
|
|
logger = zap.Must(zap.NewProduction())
|
|
} else if cfg.Env == "dev" {
|
|
logger = zap.Must(zap.NewDevelopment())
|
|
} else {
|
|
panic(fmt.Sprintf(`error reading config: env expected "prod" or "dev", got "%s"`, cfg.Env))
|
|
}
|
|
|
|
logger.Info("connecting to postgres")
|
|
db, err := postgres.NewPostgresDB(cfg.PostgresDSN)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer db.Close()
|
|
logger.Info("successfully connected to postgres")
|
|
|
|
//pandocClient := pandoc.NewPandocClient(&http.Client{}, cfg.Pandoc)
|
|
|
|
problemRepo := problemsRepository.NewProblemRepository(db, logger)
|
|
problemUC := testerUseCase.NewProblemUseCase(problemRepo)
|
|
|
|
contestRepo := problemsRepository.NewContestRepository(db, logger)
|
|
contestUC := testerUseCase.NewContestUseCase(contestRepo)
|
|
|
|
server := fiber.New()
|
|
|
|
testerv1.RegisterHandlersWithOptions(server, rest.NewTesterHandlers(problemUC, contestUC), testerv1.FiberServerOptions{
|
|
Middlewares: []testerv1.MiddlewareFunc{
|
|
fiberlogger.New(),
|
|
//rest.AuthMiddleware(cfg.JWTSecret, userUC),
|
|
//cors.New(cors.Config{
|
|
// AllowOrigins: "http://localhost:3000",
|
|
// AllowMethods: "GET,POST,PUT,DELETE,OPTIONS",
|
|
// AllowHeaders: "Content-Type,Set-Cookie,Credentials",
|
|
// AllowCredentials: true,
|
|
//}),
|
|
},
|
|
})
|
|
|
|
go func() {
|
|
err := server.Listen(cfg.Address)
|
|
if err != nil {
|
|
logger.Fatal(fmt.Sprintf("error starting server: %s", err.Error()))
|
|
}
|
|
}()
|
|
|
|
logger.Info(fmt.Sprintf("server started on %s", cfg.Address))
|
|
|
|
stop := make(chan os.Signal, 1)
|
|
signal.Notify(stop, syscall.SIGTERM, syscall.SIGINT)
|
|
|
|
<-stop
|
|
}
|