treasurer/internal/initialize/services.go
2025-06-12 12:43:29 +03:00

119 lines
3.2 KiB
Go

package initialize
import (
"gitea.pena/PenaSide/treasurer/internal/errors"
"gitea.pena/PenaSide/treasurer/internal/payment_provider"
"gitea.pena/PenaSide/treasurer/internal/payment_provider/yoomoney"
"gitea.pena/PenaSide/treasurer/internal/service/callback"
"gitea.pena/PenaSide/treasurer/internal/service/mock"
"gitea.pena/PenaSide/treasurer/internal/service/payment"
"gitea.pena/PenaSide/treasurer/internal/service/status"
"go.uber.org/zap"
)
type ServicesDeps struct {
Logger *zap.Logger
Repositories Repositories
Clients Clients
Config Config
}
type Services struct {
Callback *callback.Service
Payment *payment.Service
YandexPayment *payment.Yandex
Status *status.Service
//YandexWebhook *webhook.Yandex
Mock *mock.Service
PaymentProviders []payment_provider.PaymentProvider
}
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
}
// todo не используется
//yandexWebhookService, err := webhook.NewYandex(webhook.YandexDeps{
// Logger: deps.Logger,
// YandexWebhookClient: deps.Clients.Yandex,
// HttpDomain: deps.Config.HttpDomain,
//})
//if err != nil {
// return nil, err
//}
yoomoneyMockService, err := mock.NewYoomoneyMockService(mock.YoomoneyMockServiceDeps{
Logger: deps.Logger,
YooMoneyPaymentsURL: deps.Config.YooMoneyPaymentsURL,
})
if err != nil {
return nil, err
}
mockService, err := mock.New(mock.Deps{
Logger: deps.Logger,
Enabled: deps.Config.IsMock,
MockServiceHost: deps.Config.MockServiceHost,
YoomoneyMockService: yoomoneyMockService,
})
if err != nil {
return nil, err
}
yooMoneyProvider, err := yoomoney.New(yoomoney.Deps{
Logger: deps.Logger,
Config: &yoomoney.Config{
StoreID: deps.Config.YooMoneyStoreID,
SecretKey: deps.Config.YooMoneySecretKey,
WebhooksURL: deps.Config.YooMoneyWebhooksURL,
PaymentsURL: deps.Config.YooMoneyPaymentsURL,
},
Repository: deps.Repositories.Payment,
CallbackService: callbackService,
})
if err != nil {
return nil, err
}
return &Services{
Callback: callbackService,
Payment: paymentService,
YandexPayment: yandexPaymentService,
Status: statusService,
//YandexWebhook: yandexWebhookService,
Mock: mockService,
PaymentProviders: []payment_provider.PaymentProvider{yooMoneyProvider},
}, nil
}