added init payment method repository

This commit is contained in:
pasha1coil 2025-06-14 08:59:36 +03:00
parent e30209c739
commit a1f734a87d
7 changed files with 78 additions and 53 deletions

@ -72,8 +72,9 @@ func Run(ctx context.Context, config initialize.Config, logger *zap.Logger) (app
}
controllers, err := initialize.NewControllers(initialize.ControllersDeps{
Logger: logger,
Services: *services,
Logger: logger,
Services: *services,
Repositories: *repositories,
})
if err != nil {
return err

@ -5,7 +5,9 @@ import (
"fmt"
"gitea.pena/PenaSide/treasurer/internal/models/yandex"
"gitea.pena/PenaSide/treasurer/internal/payment_provider"
"gitea.pena/PenaSide/treasurer/internal/repository"
"gitea.pena/PenaSide/treasurer/internal/utils"
"google.golang.org/protobuf/types/known/emptypb"
"strconv"
"strings"
"sync"
@ -17,15 +19,18 @@ import (
)
type PaymentControllerDeps struct {
Logger *zap.Logger
PaymentProviders []payment_provider.PaymentProvider
Logger *zap.Logger
PaymentProviders []payment_provider.PaymentProvider
PaymentMethodRepository *repository.PaymentMethodRepository
}
type PaymentController struct {
logger *zap.Logger
paymentProviders []payment_provider.PaymentProvider
providerMap map[models.PaymentType][]payment_provider.PaymentProvider
mu sync.RWMutex
logger *zap.Logger
paymentProviders []payment_provider.PaymentProvider
paymentMethodRepository *repository.PaymentMethodRepository
providerMap map[models.PaymentType][]payment_provider.PaymentProvider
mu sync.RWMutex
treasurer.UnimplementedTreasurerServiceServer
}
func NewPaymentController(deps PaymentControllerDeps) (*PaymentController, errors.Error) {
@ -38,9 +43,10 @@ func NewPaymentController(deps PaymentControllerDeps) (*PaymentController, error
}
controller := &PaymentController{
logger: deps.Logger,
paymentProviders: deps.PaymentProviders,
providerMap: make(map[models.PaymentType][]payment_provider.PaymentProvider),
logger: deps.Logger,
paymentProviders: deps.PaymentProviders,
providerMap: make(map[models.PaymentType][]payment_provider.PaymentProvider),
paymentMethodRepository: deps.PaymentMethodRepository,
}
for _, provider := range deps.PaymentProviders {
@ -126,3 +132,17 @@ func (r *PaymentController) GetPaymentLinkSberPay(ctx context.Context, in *treas
func (r *PaymentController) GetPaymentLinkSberbankB2B(ctx context.Context, in *treasurer.GetPaymentLinkRequest) (*treasurer.GetPaymentLinkResponse, error) {
return r.createPayment(ctx, models.PaymentTypeSberB2B, in)
}
func (r *PaymentController) DeleteSavedPaymentMethods(ctx context.Context, in *treasurer.DeleteSavedPaymentMethodsRequest) (*emptypb.Empty, error) {
if in.UserID == "" {
r.logger.Error("empty user id provided")
return nil, errors.GRPC("user id is required", errors.NewWithMessage("user id is required", errors.ErrInvalidArgs))
}
err := r.paymentMethodRepository.DeleteByUserID(ctx, in.UserID)
if err != nil {
r.logger.Error("failed to delete payment methods", zap.Error(err), zap.String("userId", in.UserID))
return nil, errors.GRPC("failed to delete payment methods", errors.NewWithMessage("failed to delete payment methods", errors.ErrInternalError))
}
return &emptypb.Empty{}, nil
}

@ -9,8 +9,9 @@ import (
)
type ControllersDeps struct {
Logger *zap.Logger
Services Services
Logger *zap.Logger
Services Services
Repositories Repositories
}
type Controllers struct {
@ -30,8 +31,9 @@ func NewControllers(deps ControllersDeps) (*Controllers, errors.Error) {
}
paymentControllerGRPC, err := grpc.NewPaymentController(grpc.PaymentControllerDeps{
Logger: deps.Logger,
PaymentProviders: deps.Services.PaymentProviders,
Logger: deps.Logger,
PaymentProviders: deps.Services.PaymentProviders,
PaymentMethodRepository: deps.Repositories.PaymentMethod,
})
if err != nil {
return nil, err

@ -13,7 +13,8 @@ type RepositoriesDeps struct {
}
type Repositories struct {
Payment *repository.PaymentRepository
Payment *repository.PaymentRepository
PaymentMethod *repository.PaymentMethodRepository
}
func NewRepositories(deps RepositoriesDeps) (*Repositories, errors.Error) {
@ -25,5 +26,10 @@ func NewRepositories(deps RepositoriesDeps) (*Repositories, errors.Error) {
return nil, err
}
return &Repositories{Payment: paymentRepository}, nil
paymentMethod := repository.NewPaymentMethodRepository(repository.PaymentMethodRepositoryDeps{
Logger: deps.Logger,
Collection: deps.Database.Collection("payment_methods"),
})
return &Repositories{Payment: paymentRepository, PaymentMethod: paymentMethod}, nil
}

@ -99,8 +99,9 @@ func NewServices(deps ServicesDeps) (*Services, errors.Error) {
WebhooksURL: deps.Config.YooMoneyWebhooksURL,
PaymentsURL: deps.Config.YooMoneyPaymentsURL,
},
Repository: deps.Repositories.Payment,
CallbackService: callbackService,
Repository: deps.Repositories.Payment,
CallbackService: callbackService,
PaymentMethodRepository: deps.Repositories.PaymentMethod,
})
if err != nil {
return nil, err

@ -1,33 +0,0 @@
syntax = "proto3";
package treasurer;
option go_package = "./treasurer";
message MainPaymentSettings {
string Currency = 1;
int64 Amount = 2;
repeated string CallbackHostGRPC = 3;
string ReturnURL = 4;
string UserID = 5;
string ClientIP = 6;
Customer Customer = 7;
repeated Item Items = 8;
bool Auto = 9;
bool Recurrent = 10;
}
message Customer {
string FullName = 1;
string INN = 2;
string Email = 3;
string Phone = 4;
}
message Item {
string Description = 1;
string Measure = 2;
string Quantity = 3;
string Money = 4;
string Currency = 5;
}

@ -2,7 +2,6 @@ syntax = "proto3";
package treasurer;
import "google/protobuf/empty.proto";
import "google/protobuf/empty.proto";
option go_package = "./treasurer";
@ -38,3 +37,32 @@ message GetPaymentLinkResponse {
message DeleteSavedPaymentMethodsRequest {
string UserID = 1;
}
message MainPaymentSettings {
string Currency = 1;
int64 Amount = 2;
repeated string CallbackHostGRPC = 3;
string ReturnURL = 4;
string UserID = 5;
string ClientIP = 6;
Customer Customer = 7;
repeated Item Items = 8;
bool Auto = 9;
bool Recurrent = 10;
}
message Customer {
string FullName = 1;
string INN = 2;
string Email = 3;
string Phone = 4;
}
message Item {
string Description = 1;
string Measure = 2;
string Quantity = 3;
string Money = 4;
string Currency = 5;
}