83 lines
3.0 KiB
Go
83 lines
3.0 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
"os"
|
|
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/config"
|
|
customlogger "github.com/SamuelTariku/FortuneBet-Backend/internal/logger"
|
|
mockemail "github.com/SamuelTariku/FortuneBet-Backend/internal/mocks/mock_email"
|
|
mocksms "github.com/SamuelTariku/FortuneBet-Backend/internal/mocks/mock_sms"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/repository"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/authentication"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/bet"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/branch"
|
|
notificationservice "github.com/SamuelTariku/FortuneBet-Backend/internal/services/notfication"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/ticket"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/transaction"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/user"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/services/wallet"
|
|
httpserver "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server"
|
|
jwtutil "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/jwt"
|
|
customvalidator "github.com/SamuelTariku/FortuneBet-Backend/internal/web_server/validator"
|
|
"github.com/go-playground/validator/v10"
|
|
)
|
|
|
|
// @title FortuneBet API
|
|
// @version 1.0
|
|
// @description This is server for FortuneBet.
|
|
// @termsOfService http://swagger.io/terms/
|
|
// @contact.name API Support
|
|
// @contact.url http://www.swagger.io/support
|
|
// @contact.email support@swagger.io
|
|
// @license.name Apache 2.0
|
|
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
|
|
// @SecurityDefinitions.apiKey Bearer
|
|
// @in header
|
|
// @name Authorization
|
|
// @BasePath /
|
|
func main() {
|
|
cfg, err := config.NewConfig()
|
|
if err != nil {
|
|
slog.Error(err.Error())
|
|
os.Exit(1)
|
|
}
|
|
|
|
db, _, err := repository.OpenDB(cfg.DbUrl)
|
|
if err != nil {
|
|
fmt.Print("db", err)
|
|
os.Exit(1)
|
|
}
|
|
logger := customlogger.NewLogger(cfg.Env, cfg.LogLevel)
|
|
store := repository.NewStore(db)
|
|
v := customvalidator.NewCustomValidator(validator.New())
|
|
|
|
authSvc := authentication.NewService(store, store, cfg.RefreshExpiry)
|
|
mockSms := mocksms.NewMockSMS()
|
|
mockemail := mockemail.NewMockEmail()
|
|
|
|
userSvc := user.NewService(store, store, mockSms, mockemail)
|
|
ticketSvc := ticket.NewService(store)
|
|
betSvc := bet.NewService(store)
|
|
walletSvc := wallet.NewService(store, store)
|
|
transactionSvc := transaction.NewService(store)
|
|
branchSvc := branch.NewService(store)
|
|
|
|
notificationRepo := repository.NewNotificationRepository(store)
|
|
notificationSvc := notificationservice.New(notificationRepo, logger, cfg)
|
|
|
|
app := httpserver.NewApp(cfg.Port, v, authSvc, logger, jwtutil.JwtConfig{
|
|
JwtAccessKey: cfg.JwtKey,
|
|
JwtAccessExpiry: cfg.AccessExpiry,
|
|
}, userSvc, ticketSvc, betSvc, walletSvc, transactionSvc, branchSvc, notificationSvc,
|
|
)
|
|
logger.Info("Starting server", "port", cfg.Port)
|
|
|
|
if err := app.Run(); err != nil {
|
|
logger.Error("Failed to start server", "error", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
}
|