Init All Docs

This commit is contained in:
Aditya Siregar
2025-09-08 12:24:37 +07:00
parent aa662a321f
commit 2319019eb2
68 changed files with 5417 additions and 437 deletions
+96 -24
View File
@@ -11,6 +11,7 @@ import (
"eslogad-be/config"
"eslogad-be/internal/client"
internalConfig "eslogad-be/internal/config"
"eslogad-be/internal/handler"
"eslogad-be/internal/middleware"
"eslogad-be/internal/processor"
@@ -51,6 +52,7 @@ func (a *App) Initialize(cfg *config.Config) error {
dispositionRouteHandler := handler.NewDispositionRouteHandler(services.dispositionRouteService)
onlyOfficeHandler := handler.NewOnlyOfficeHandler(services.onlyOfficeService)
analyticsHandler := handler.NewAnalyticsHandler(services.analyticsService)
notificationHandler := handler.NewNotificationHandler(services.notificationService)
a.router = router.NewRouter(
cfg,
@@ -67,6 +69,7 @@ func (a *App) Initialize(cfg *config.Config) error {
dispositionRouteHandler,
onlyOfficeHandler,
analyticsHandler,
notificationHandler,
)
return nil
@@ -182,32 +185,39 @@ func (a *App) initRepositories() *repositories {
}
type processors struct {
userProcessor *processor.UserProcessorImpl
letterProcessor *processor.LetterProcessorImpl
letterOutgoingProcessor *processor.LetterOutgoingProcessorImpl
activityLogger *processor.ActivityLogProcessorImpl
letterNumberGenerator *processor.LetterNumberGeneratorImpl
onlyOfficeProcessor *processor.OnlyOfficeProcessorImpl
userProcessor *processor.UserProcessorImpl
cachedUserProcessor *processor.CachedUserProcessor
letterProcessor *processor.LetterProcessorImpl
letterOutgoingProcessor *processor.LetterOutgoingProcessorImpl
activityLogger *processor.ActivityLogProcessorImpl
letterNumberGenerator *processor.LetterNumberGeneratorImpl
onlyOfficeProcessor *processor.OnlyOfficeProcessorImpl
novuProcessor processor.NovuProcessor
notificationProcessor processor.NotificationProcessor
recipientProcessor *processor.RecipientProcessorImpl
letterDispositionProcessor *processor.LetterDispositionProcessorImpl
letterDispositionDeptProcessor *processor.LetterDispositionDepartmentProcessorImpl
}
func (a *App) initProcessors(cfg *config.Config, repos *repositories) *processors {
txMgr := repository.NewTxManager(a.db)
activity := processor.NewActivityLogProcessor(repos.activityLogRepo)
// Create the letter number generator
letterNumberGen := processor.NewLetterNumberGenerator(repos.settingRepo)
// Create letter processors with the number generator
letterProc := processor.NewLetterProcessor(
repos.letterRepo, repos.letterAttachRepo, txMgr, activity,
repos.letterDispositionRepo, repos.letterDispositionDeptRepo,
repos.letterDispActionSelRepo, repos.dispositionNoteRepo,
repos.letterDiscussionRepo, repos.settingRepo,
repos.recipientRepo, repos.departmentRepo, repos.userDeptRepo,
repos.recipientRepo, repos.letterOutgoingRecipientRepo,
repos.departmentRepo, repos.userDeptRepo,
repos.priorityRepo, repos.institutionRepo, repos.dispRepo,
letterNumberGen,
letterNumberGen, repos.dispositionRouteRepo,
)
letterOutgoingProc := processor.NewLetterOutgoingProcessor(
a.db,
repos.letterOutgoingRepo,
@@ -220,14 +230,16 @@ func (a *App) initProcessors(cfg *config.Config, repos *repositories) *processor
repos.letterOutgoingApprovalRepo,
letterNumberGen,
txMgr,
repos.priorityRepo,
repos.institutionRepo,
)
// Create document repositories
docSessionRepo := repository.NewDocumentSessionRepository(a.db)
docVersionRepo := repository.NewDocumentVersionRepository(a.db)
docMetadataRepo := repository.NewDocumentMetadataRepository(a.db)
docErrorRepo := repository.NewDocumentErrorRepository(a.db)
// Create OnlyOffice processor
onlyOfficeProc := processor.NewOnlyOfficeProcessor(
a.db,
@@ -237,14 +249,61 @@ func (a *App) initProcessors(cfg *config.Config, repos *repositories) *processor
docErrorRepo,
txMgr,
)
// Create Novu processor for backward compatibility
novuConfig := internalConfig.LoadNovuConfig(cfg)
novuProc := processor.NewNovuProcessor(novuConfig)
// Create notification processor with Novu provider
novuProvider := processor.NewNovuProvider(novuConfig)
notificationProc := processor.NewNotificationProcessor(novuProvider, novuConfig.IncomingLetterWorkflowID)
// Create user processor with Novu integration
userProc := processor.NewUserProcessor(repos.userRepo, repos.userProfileRepo)
userProc.SetNovuProcessor(novuProc)
// Create cached user processor for auth middleware
cachedUserProc := processor.NewCachedUserProcessor(repos.userRepo, repos.userProfileRepo)
// Create recipient processor
recipientProc := processor.NewRecipientProcessor(
repos.recipientRepo,
repos.settingRepo,
repos.departmentRepo,
repos.userDeptRepo,
)
// Create letter disposition processor
letterDispositionProc := processor.NewLetterDispositionProcessor(
repos.letterDispositionRepo,
repos.letterDispositionDeptRepo,
repos.letterDispActionSelRepo,
repos.dispositionNoteRepo,
repos.letterDiscussionRepo,
repos.dispRepo,
activity,
)
// Create letter disposition department processor
letterDispositionDeptProc := processor.NewLetterDispositionDepartmentProcessor(
repos.letterDispositionDeptRepo,
repos.dispositionNoteRepo,
repos.letterRepo,
)
return &processors{
userProcessor: processor.NewUserProcessor(repos.userRepo, repos.userProfileRepo),
letterProcessor: letterProc,
letterOutgoingProcessor: letterOutgoingProc,
activityLogger: activity,
letterNumberGenerator: letterNumberGen,
onlyOfficeProcessor: onlyOfficeProc,
userProcessor: userProc,
cachedUserProcessor: cachedUserProc,
letterProcessor: letterProc,
letterOutgoingProcessor: letterOutgoingProc,
activityLogger: activity,
letterNumberGenerator: letterNumberGen,
onlyOfficeProcessor: onlyOfficeProc,
novuProcessor: novuProc,
notificationProcessor: notificationProc,
recipientProcessor: recipientProc,
letterDispositionProcessor: letterDispositionProc,
letterDispositionDeptProcessor: letterDispositionDeptProc,
}
}
@@ -260,6 +319,7 @@ type services struct {
dispositionRouteService *service.DispositionRouteServiceImpl
onlyOfficeService *service.OnlyOfficeServiceImpl
analyticsService *service.AnalyticsServiceImpl
notificationService *service.NotificationServiceImpl
}
func (a *App) initServices(processors *processors, repos *repositories, cfg *config.Config) *services {
@@ -277,10 +337,17 @@ func (a *App) initServices(processors *processors, repos *repositories, cfg *con
masterSvc := service.NewMasterService(repos.labelRepo, repos.priorityRepo, repos.institutionRepo, repos.dispRepo, repos.departmentRepo)
letterSvc := service.NewLetterService(processors.letterProcessor)
dispRouteSvc := service.NewDispositionRouteService(repos.dispositionRouteRepo)
txManager := repository.NewTxManager(a.db)
letterSvc := service.NewLetterService(
processors.letterProcessor,
txManager,
processors.letterNumberGenerator,
processors.recipientProcessor,
processors.activityLogger,
processors.letterDispositionProcessor,
processors.notificationProcessor,
)
dispRouteSvc := service.NewDispositionRouteService(repos.dispositionRouteRepo)
letterOutgoingSvc := service.NewLetterOutgoingService(processors.letterOutgoingProcessor)
approvalFlowStepRepo := repository.NewApprovalFlowStepRepository(a.db)
@@ -293,10 +360,14 @@ func (a *App) initServices(processors *processors, repos *repositories, cfg *con
// Create OnlyOffice service with file storage
onlyOfficeSvc := service.NewOnlyOfficeService(processors.onlyOfficeProcessor, &cfg.OnlyOffice, a.db, s3Client)
// Create Analytics service
analyticsSvc := service.NewAnalyticsService(repos.analyticsRepo)
// Create Notification service
novuConfig := internalConfig.LoadNovuConfig(cfg)
notificationSvc := service.NewNotificationService(novuConfig, processors.userProcessor)
return &services{
userService: userSvc,
authService: authService,
@@ -309,6 +380,7 @@ func (a *App) initServices(processors *processors, repos *repositories, cfg *con
dispositionRouteService: dispRouteSvc,
onlyOfficeService: onlyOfficeSvc,
analyticsService: analyticsSvc,
notificationService: notificationSvc,
}
}