Spaces:
Configuration error
Configuration error
File size: 4,714 Bytes
98c95a0 1301478 98c95a0 1f7dd45 1301478 cabfcc4 1301478 a020582 54de00c 57e875f a020582 3ccc959 7beb700 48471f7 98c95a0 a3e77a9 98c95a0 5a84566 158bb31 5a84566 98c95a0 5a84566 98c95a0 5a84566 98c95a0 5a84566 98c95a0 48471f7 a020582 cabfcc4 1f7dd45 5a84566 57e875f 9adc91d 1cea019 9adc91d 1301478 1cea019 1301478 54de00c 1cea019 54de00c 48471f7 98c95a0 48471f7 9adc91d a020582 cabfcc4 1f7dd45 57e875f 9adc91d 1301478 54de00c 9adc91d 48471f7 5a84566 48471f7 98c95a0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | package main
import (
"log/slog"
"net"
"strconv"
"api.qobiltu.id/config"
academy_controller "api.qobiltu.id/controller/academy"
cv_controller "api.qobiltu.id/controller/cv"
email_controller "api.qobiltu.id/controller/email"
marriage_readiness_profile_controller "api.qobiltu.id/controller/marriage_readiness_profile"
options_controller "api.qobiltu.id/controller/options"
partner_criteria_controller "api.qobiltu.id/controller/partner_criteria"
quiz_controller "api.qobiltu.id/controller/quiz"
region_controller "api.qobiltu.id/controller/region"
"api.qobiltu.id/pkg/mail"
"api.qobiltu.id/pkg/storage"
"api.qobiltu.id/pkg/validation"
"api.qobiltu.id/pkg/worker"
"api.qobiltu.id/repositories"
"api.qobiltu.id/router"
"api.qobiltu.id/services"
"api.qobiltu.id/utils"
"github.com/hibiken/asynq"
)
func main() {
// load config
err := config.LoadConfig()
utils.FatalIfErr("failed to load config", err)
// setup validator for validation request
validator, err := validation.New(config.DB)
utils.FatalIfErr("failed to setup validator", err)
// setup storage for saving files
localStorage := storage.NewLocalStorage("uploads", config.GlobalConfig.App.AppURL+"/storage/")
// setup smtp for sending email
emailSender, err := mail.New(&mail.Config{
Host: config.GlobalConfig.SMTP.Host,
Port: config.GlobalConfig.SMTP.Port,
From: config.GlobalConfig.SMTP.SenderEmail,
Username: config.GlobalConfig.SMTP.SenderEmail,
Password: config.GlobalConfig.SMTP.Password,
})
utils.FatalIfErr("failed to setup email sender", err)
mail.EmailSender = emailSender
// setup task distributor and processor for async task
asynqRedisOpt := asynq.RedisClientOpt{
Addr: net.JoinHostPort(config.GlobalConfig.Redis.Host, strconv.Itoa(config.GlobalConfig.Redis.Port)),
Password: config.GlobalConfig.Redis.Password,
DB: config.GlobalConfig.Redis.DB,
}
taskDistributor := worker.NewRedisTaskDistributor(asynqRedisOpt)
taskProcessor := worker.NewRedisTaskProcessor(asynqRedisOpt, emailSender)
worker.AsyncTaskDistributor = taskDistributor
// setup repo, service, and controller
regionRepository := repositories.NewRegionRepository(config.DB)
regionService := services.NewRegionService(regionRepository)
regionController := region_controller.NewRegionController(regionService)
optionRepository := repositories.NewOptionRepository(config.DB)
optionService := services.NewOptionsService(optionRepository)
optionController := options_controller.NewOptionsController(optionService)
emailRepository := repositories.NewEmailRepository(config.DB)
emailService := services.NewEmailService(emailRepository, taskDistributor)
emailController := email_controller.NewEmailController(emailService)
academyRepository := repositories.NewAcademyRepository(config.DB)
academyService := services.NewAcademyService(academyRepository, validator)
academyController := academy_controller.NewAcademyController(academyService)
quizRepository := repositories.NewQuizRepository()
quizService := services.NewQuizService(config.DB, quizRepository, academyRepository, validator)
quizController := quiz_controller.NewQuizController(quizService)
cvRepository := repositories.NewCVRepository(config.DB)
cvService := services.NewCVService(cvRepository, localStorage, validator)
cvController := cv_controller.NewCVController(cvService)
marriageReadinessProfileRepository := repositories.NewMarriageReadinessProfileRepository(config.DB)
marriageReadinessProfileService := services.NewMarriageReadinessProfileService(marriageReadinessProfileRepository, validator)
marriageReadinessProfileController := marriage_readiness_profile_controller.NewMarriageReadinessProfileController(marriageReadinessProfileService)
partnerCriteriaRepository := repositories.NewPartnerCriteriaRepository(config.DB)
partnerCriteriaService := services.NewPartnerCriteriaService(partnerCriteriaRepository, validator)
partnerCriteriaController := partner_criteria_controller.NewPartnerCriteriaController(partnerCriteriaService)
// start task processor
err = taskProcessor.Start()
utils.FatalIfErr("failed to start task processor", err)
slog.Info("Task processor started")
// create server
s, err := router.NewServer(
regionController,
optionController,
emailController,
academyController,
quizController,
cvController,
marriageReadinessProfileController,
partnerCriteriaController,
)
utils.FatalIfErr("failed to create server", err)
// run server
slog.Info("Starting server", "address", config.GlobalConfig.App.HostAddress, "port", config.GlobalConfig.App.HostPort)
err = s.Start(config.GlobalConfig.App.TCPAddress)
utils.FatalIfErr("failed to start server", err)
}
|