/
api.go
116 lines (113 loc) · 4.19 KB
/
api.go
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
package cdi
import (
"github.com/adinandradrs/cezbek-engine/internal/storage"
"github.com/adinandradrs/cezbek-engine/internal/usecase/client"
"github.com/adinandradrs/cezbek-engine/internal/usecase/h2h"
"github.com/adinandradrs/cezbek-engine/internal/usecase/management"
"github.com/adinandradrs/cezbek-engine/internal/usecase/partner"
"github.com/adinandradrs/cezbek-engine/internal/usecase/workflow"
)
type APIUsecase struct {
management.PartnerManager
management.ParamManager
management.H2HManager
management.WorkflowManager
workflow.CashbackProvider
PartnerOnboardProvider partner.OnboardProvider
PartnerTransactionProvider partner.TransactionProvider
ClientOnboardProvider client.OnboardProvider
ClientTransactionProvider client.TransactionProvider
H2HFactory h2h.Factory
}
func (c *Container) RegisterAPIUsecase(infra Infra, cacher storage.Cacher) APIUsecase {
dao := c.registerRepository()
cdn := c.Viper.GetString("aws.cdn_base")
path := c.Viper.GetString("aws.s3.path")
otpTtl := c.Viper.GetDuration("ttl.otp")
qNotificationEmailOtp := c.Viper.GetString("aws.sqs.topic.notification_email_otp")
qNotificationEmailInvoice := c.Viper.GetString("aws.sqs.topic.notification_email_invoice")
tierProvider := workflow.NewTier(workflow.Tier{
Dao: dao.TierPersister,
Logger: c.Logger,
Cacher: cacher,
ExpiryDuration: c.Viper.GetDuration("wfreward.expiry_duration"),
})
h2hFactory := h2h.NewFactory(h2h.Factory{
Cacher: cacher,
Gopaid: h2h.Gopaid{GopaidAdapter: infra.GopaidAdapter},
Josvo: h2h.Josvo{JosvoAdapter: infra.JosvoAdapter},
Linksaja: h2h.Linksaja{
TokenTTL: c.Viper.GetDuration("ttl.lsaja"),
Cacher: cacher,
LinksajaAdapter: infra.LinksajaAdapter,
},
Xenit: h2h.Xenit{XenitAdapter: infra.XenitAdapter},
Middletrans: h2h.Middletrans{MiddletransAdapter: infra.MiddletransAdapter},
})
cashbackProvider := workflow.NewCashback(workflow.Cashback{
Logger: c.Logger,
Dao: dao.WorkflowPersister,
})
return APIUsecase{
PartnerManager: management.NewPartner(management.Partner{
Dao: dao.PartnerPersister,
CiamWatcher: infra.CiamPartner,
S3Watcher: infra.S3Watcher,
PathS3: &path,
Logger: c.Logger,
}),
ParamManager: management.NewParameter(management.Parameter{
Dao: dao.ParamPersister,
Cacher: cacher,
Logger: c.Logger,
}),
PartnerOnboardProvider: partner.NewOnboard(partner.Onboard{
Dao: dao.PartnerPersister,
Cacher: cacher,
SqsAdapter: infra.SQSAdapter,
AuthTTL: c.Viper.GetDuration("ttl.client_auth"),
CDN: &cdn,
OtpTTL: otpTtl,
CiamWatcher: infra.CiamPartner,
QueueNotificationEmailOtp: &qNotificationEmailOtp,
Logger: c.Logger,
}),
ClientOnboardProvider: client.NewOnboard(client.Onboard{
Dao: dao.PartnerPersister,
Cacher: cacher,
AuthTTL: c.Viper.GetDuration("ttl.client_auth"),
CiamWatcher: infra.CiamPartner,
Logger: c.Logger,
}),
CashbackProvider: workflow.NewCashback(workflow.Cashback{
Logger: c.Logger,
Dao: dao.WorkflowPersister,
}),
H2HManager: management.NewH2H(management.H2H{
Logger: c.Logger,
Dao: dao.H2HPersister,
Cacher: cacher,
}),
WorkflowManager: management.NewWorkflow(management.Workflow{
Logger: c.Logger,
Dao: dao.WorkflowPersister,
Cacher: cacher,
}),
ClientTransactionProvider: client.NewTransaction(client.Transaction{
TransactionDao: dao.TransactionPersister,
CashbackDao: dao.CashbackPersister,
TierDao: dao.TierPersister,
CashbackProvider: cashbackProvider,
QueueNotificationEmailInvoice: &qNotificationEmailInvoice,
TierProvider: tierProvider,
SqsAdapter: infra.SQSAdapter,
Factory: h2hFactory,
Logger: c.Logger,
Cacher: cacher,
}),
PartnerTransactionProvider: partner.NewTransaction(partner.Transaction{
Dao: dao.TransactionPersister,
Logger: c.Logger,
}),
}
}