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 }