treasurer/internal/initialize/services.go
2023-06-13 13:22:51 +00:00

80 lines
2.1 KiB
Go

package initialize
import (
"go.uber.org/zap"
"penahub.gitlab.yandexcloud.net/external/treasurer/internal/errors"
"penahub.gitlab.yandexcloud.net/external/treasurer/internal/models"
"penahub.gitlab.yandexcloud.net/external/treasurer/internal/service/callback"
"penahub.gitlab.yandexcloud.net/external/treasurer/internal/service/payment"
"penahub.gitlab.yandexcloud.net/external/treasurer/internal/service/status"
"penahub.gitlab.yandexcloud.net/external/treasurer/internal/service/webhook"
)
type ServicesDeps struct {
Logger *zap.Logger
Repositories Repositories
Clients Clients
ConfigurationHTTP *models.ConfigurationHTTP
}
type Services struct {
Callback *callback.Service
Payment *payment.Service
YandexPayment *payment.Yandex
Status *status.Service
YandexWebhook *webhook.Yandex
}
func NewServices(deps ServicesDeps) (*Services, errors.Error) {
callbackService, err := callback.New(callback.Deps{
Logger: deps.Logger,
CallbackClient: deps.Clients.Callback,
PaymentRepository: deps.Repositories.Payment,
})
if err != nil {
return nil, err
}
yandexPaymentService, err := payment.NewYandex(payment.YandexPaymentServiceDeps{
Logger: deps.Logger,
YandexPaymentClient: deps.Clients.Yandex,
})
if err != nil {
return nil, err
}
paymentService, err := payment.New(payment.Deps{
Logger: deps.Logger,
PaymentRepository: deps.Repositories.Payment,
PaymentStrategyService: yandexPaymentService,
})
if err != nil {
return nil, err
}
statusService, err := status.New(status.Deps{
Logger: deps.Logger,
PaymentRepository: deps.Repositories.Payment,
})
if err != nil {
return nil, err
}
yandexWebhookService, err := webhook.NewYandex(webhook.YandexDeps{
Logger: deps.Logger,
YandexWebhookClient: deps.Clients.Yandex,
Configuration: deps.ConfigurationHTTP,
})
if err != nil {
return nil, err
}
return &Services{
Callback: callbackService,
Payment: paymentService,
YandexPayment: yandexPaymentService,
Status: statusService,
YandexWebhook: yandexWebhookService,
}, nil
}