feat: billing cancel

This commit is contained in:
2024-08-09 05:22:39 +03:00
parent 97f835ffde
commit 2c9ff3b373
5 changed files with 49 additions and 1 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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(

View File

@@ -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

View File

@@ -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))