diff --git a/app/cabinet/routes/balance.py b/app/cabinet/routes/balance.py index a8ed1db2..1223cde1 100644 --- a/app/cabinet/routes/balance.py +++ b/app/cabinet/routes/balance.py @@ -1059,6 +1059,7 @@ async def get_latest_payment_by_method( MulenPayPayment, Pal24Payment, PlategaPayment, + RioPayPayment, WataPayment, YooKassaPayment, ) @@ -1074,6 +1075,7 @@ async def get_latest_payment_by_method( PaymentMethod.CLOUDPAYMENTS: CloudPaymentsPayment, PaymentMethod.FREEKASSA: FreekassaPayment, PaymentMethod.KASSA_AI: KassaAiPayment, + PaymentMethod.RIOPAY: RioPayPayment, } model = model_map.get(payment_method) diff --git a/app/database/models.py b/app/database/models.py index dfd14e26..3f67828a 100644 --- a/app/database/models.py +++ b/app/database/models.py @@ -756,7 +756,7 @@ class RioPayPayment(Base): __tablename__ = 'riopay_payments' id = Column(Integer, primary_key=True, index=True) - user_id = Column(Integer, ForeignKey('users.id'), nullable=False, index=True) + user_id = Column(Integer, ForeignKey('users.id', ondelete='SET NULL'), nullable=True, index=True) # Идентификаторы order_id = Column(String(64), unique=True, nullable=False, index=True) # Наш internal ID diff --git a/app/services/payment/riopay.py b/app/services/payment/riopay.py index 344302ac..b63b68a3 100644 --- a/app/services/payment/riopay.py +++ b/app/services/payment/riopay.py @@ -78,8 +78,11 @@ class RioPayPaymentMixin: return None # Получаем telegram_id пользователя для order_id - user = await get_user_by_id(db, user_id) - tg_id = user.telegram_id if user else user_id + if user_id is not None: + user = await get_user_by_id(db, user_id) + tg_id = user.telegram_id if user else user_id + else: + tg_id = 'guest' # Генерируем уникальный order_id с telegram_id для удобного поиска order_id = f'rp{tg_id}_{uuid.uuid4().hex[:6]}' diff --git a/migrations/alembic/versions/0039_riopay_user_id_nullable.py b/migrations/alembic/versions/0039_riopay_user_id_nullable.py index edb9771f..2f4d30df 100644 --- a/migrations/alembic/versions/0039_riopay_user_id_nullable.py +++ b/migrations/alembic/versions/0039_riopay_user_id_nullable.py @@ -18,10 +18,12 @@ depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: - with op.batch_alter_table('riopay_payments') as batch_op: - batch_op.alter_column('user_id', existing_type=sa.Integer(), nullable=True) + op.alter_column('riopay_payments', 'user_id', existing_type=sa.Integer(), nullable=True) + op.drop_constraint('riopay_payments_user_id_fkey', 'riopay_payments', type_='foreignkey') + op.create_foreign_key(None, 'riopay_payments', 'users', ['user_id'], ['id'], ondelete='SET NULL') def downgrade() -> None: - with op.batch_alter_table('riopay_payments') as batch_op: - batch_op.alter_column('user_id', existing_type=sa.Integer(), nullable=False) + op.drop_constraint(None, 'riopay_payments', type_='foreignkey') + op.create_foreign_key('riopay_payments_user_id_fkey', 'riopay_payments', 'users', ['user_id'], ['id']) + op.alter_column('riopay_payments', 'user_id', existing_type=sa.Integer(), nullable=False)