feat: billing cancel
This commit is contained in:
5
external/billing/billing_client.py
vendored
5
external/billing/billing_client.py
vendored
@@ -21,6 +21,11 @@ class BillingClient:
|
||||
response = await self._method('POST', '/create', json=json_data)
|
||||
return CreateBillingResponseSchema.model_validate(response)
|
||||
|
||||
async def delete(self, request: DeleteBillRequestSchema) -> DeleteBillResponseSchema:
|
||||
method = f'/delete/{request.listener_transaction_id}'
|
||||
response = await self._method('POST', method)
|
||||
return DeleteBillResponseSchema.model_validate(response)
|
||||
|
||||
async def notify_received(self, request: NotifyReceivedBillRequestSchema) -> NotifyReceivedBillResponseSchema:
|
||||
json_data = request.model_dump()
|
||||
response = await self._method('POST', '/notify-received', json=json_data)
|
||||
|
||||
8
external/billing/schemas.py
vendored
8
external/billing/schemas.py
vendored
@@ -45,6 +45,14 @@ class CreateBillRequestSchema(BaseSchema):
|
||||
return None
|
||||
|
||||
|
||||
class DeleteBillRequestSchema(BaseSchema):
|
||||
listener_transaction_id: int
|
||||
|
||||
|
||||
class DeleteBillResponseSchema(BaseSchema):
|
||||
ok: bool
|
||||
|
||||
|
||||
class NotifyReceivedBillRequestSchema(BaseSchema):
|
||||
listener_transaction_id: int
|
||||
channel: NotificationChannel
|
||||
|
||||
@@ -37,6 +37,17 @@ async def create_deal_bill(
|
||||
user: CurrentUserDependency
|
||||
):
|
||||
return await BillingService(session).create_deal_billing(user, request)
|
||||
@billing_router.post(
|
||||
'/cancel-deal-bill',
|
||||
operation_id='cancel_deal_bill',
|
||||
response_model=CancelDealBillResponse
|
||||
)
|
||||
async def create_deal_bill(
|
||||
session: SessionDependency,
|
||||
request: CancelDealBillRequest,
|
||||
user: CurrentUserDependency
|
||||
):
|
||||
return await BillingService(session).cancel_deal_billing(user, request)
|
||||
|
||||
|
||||
@billing_router.get(
|
||||
|
||||
@@ -16,9 +16,17 @@ class CreateDealBillRequest(BaseSchema):
|
||||
deal_id: int
|
||||
|
||||
|
||||
class CancelDealBillRequest(BaseSchema):
|
||||
deal_id: int
|
||||
|
||||
|
||||
class CreateDealBillResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class CancelDealBillResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class GetDealBillById(BaseSchema):
|
||||
deal_bill: DealBillRequestSchema
|
||||
|
||||
@@ -7,7 +7,8 @@ from starlette import status
|
||||
|
||||
import backend.config
|
||||
from external.billing import BillingClient, CreateBillingRequestValue, CreateBillRequestSchema, CreateBillRequestItems, \
|
||||
BillStatusUpdateRequest, NotificationChannel, NotifyReceivedBillRequestSchema, BillPaymentInfo
|
||||
BillStatusUpdateRequest, NotificationChannel, NotifyReceivedBillRequestSchema, BillPaymentInfo, \
|
||||
DeleteBillRequestSchema
|
||||
from models import DealBillRequest, Deal
|
||||
from schemas.billing import *
|
||||
from services.base import BaseService
|
||||
@@ -116,3 +117,18 @@ class BillingService(BaseService):
|
||||
if not deal_bill:
|
||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail='Deal bill was not found')
|
||||
return GetDealBillById(deal_bill=DealBillRequestSchema.model_validate(deal_bill))
|
||||
|
||||
async def cancel_deal_billing(self, user, request: CancelDealBillRequest) -> CancelDealBillResponse:
|
||||
try:
|
||||
deal_bill = await self._get_deal_bill_by_id(request.deal_id)
|
||||
if not deal_bill:
|
||||
return CancelDealBillResponse(ok=False, message='Заявка не найдена')
|
||||
billing_client = BillingClient(backend.config.BILLING_API_KEY)
|
||||
response = await billing_client.delete(DeleteBillRequestSchema(listener_transaction_id=request.deal_id))
|
||||
if not response.ok:
|
||||
return CancelDealBillResponse(ok=False, message='Ошибка')
|
||||
await self.session.delete(deal_bill)
|
||||
await self.session.commit()
|
||||
return CancelDealBillResponse(ok=True, message='Заявка успешно отозвана')
|
||||
except Exception as e:
|
||||
return CancelDealBillResponse(ok=False, message=str(e))
|
||||
|
||||
Reference in New Issue
Block a user