treasurer/internal/repository/payment_method.go

62 lines
1.7 KiB
Go

package repository
import (
"context"
"gitea.pena/PenaSide/treasurer/internal/models/yandex"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.uber.org/zap"
)
type PaymentMethodRepositoryDeps struct {
Logger *zap.Logger
Collection *mongo.Collection
}
type PaymentMethodRepository struct {
logger *zap.Logger
collection *mongo.Collection
}
func NewPaymentMethodRepository(deps PaymentMethodRepositoryDeps) *PaymentMethodRepository {
return &PaymentMethodRepository{
logger: deps.Logger,
collection: deps.Collection,
}
}
func (r *PaymentMethodRepository) Save(ctx context.Context, method *yandex.PaymentMethod) error {
_, err := r.collection.InsertOne(ctx, method)
if err != nil {
r.logger.Error("failed to save payment method", zap.Error(err), zap.String("userId", method.UserID))
return err
}
return nil
}
func (r *PaymentMethodRepository) GetByUserID(ctx context.Context, userID string) ([]*yandex.PaymentMethod, error) {
cursor, err := r.collection.Find(ctx, bson.M{"userId": userID})
if err != nil {
r.logger.Error("failed to find payment methods", zap.Error(err), zap.String("userId", userID))
return nil, err
}
defer cursor.Close(ctx)
var methods []*yandex.PaymentMethod
if err := cursor.All(ctx, &methods); err != nil {
r.logger.Error("failed to decode payment methods", zap.Error(err), zap.String("userId", userID))
return nil, err
}
return methods, nil
}
func (r *PaymentMethodRepository) DeleteByUserID(ctx context.Context, userID string) error {
_, err := r.collection.DeleteMany(ctx, bson.M{"userId": userID})
if err != nil {
r.logger.Error("failed to delete payment methods", zap.Error(err), zap.String("userId", userID))
return err
}
return nil
}