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/mock" "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 Configuration *models.ServiceConfiguration } type Services struct { Callback *callback.Service Payment *payment.Service YandexPayment *payment.Yandex Status *status.Service YandexWebhook *webhook.Yandex Mock *mock.Service } 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 } yoomoneyMockService, err := mock.NewYoomoneyMockService(mock.YoomoneyMockServiceDeps{ Logger: deps.Logger, YoomoneyURL: &deps.Configuration.MockConfiguration.YoomomeyURL, }) if err != nil { return nil, err } mockService, err := mock.New(mock.Deps{ Logger: deps.Logger, Enabled: deps.Configuration.MockConfiguration.IsMock, MockServiceHost: deps.Configuration.MockConfiguration.Host, YoomoneyMockService: yoomoneyMockService, }) if err != nil { return nil, err } return &Services{ Callback: callbackService, Payment: paymentService, YandexPayment: yandexPaymentService, Status: statusService, YandexWebhook: yandexWebhookService, Mock: mockService, }, nil }