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)
|
response = await self._method('POST', '/create', json=json_data)
|
||||||
return CreateBillingResponseSchema.model_validate(response)
|
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:
|
async def notify_received(self, request: NotifyReceivedBillRequestSchema) -> NotifyReceivedBillResponseSchema:
|
||||||
json_data = request.model_dump()
|
json_data = request.model_dump()
|
||||||
response = await self._method('POST', '/notify-received', json=json_data)
|
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
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
class DeleteBillRequestSchema(BaseSchema):
|
||||||
|
listener_transaction_id: int
|
||||||
|
|
||||||
|
|
||||||
|
class DeleteBillResponseSchema(BaseSchema):
|
||||||
|
ok: bool
|
||||||
|
|
||||||
|
|
||||||
class NotifyReceivedBillRequestSchema(BaseSchema):
|
class NotifyReceivedBillRequestSchema(BaseSchema):
|
||||||
listener_transaction_id: int
|
listener_transaction_id: int
|
||||||
channel: NotificationChannel
|
channel: NotificationChannel
|
||||||
|
|||||||
@@ -37,6 +37,17 @@ async def create_deal_bill(
|
|||||||
user: CurrentUserDependency
|
user: CurrentUserDependency
|
||||||
):
|
):
|
||||||
return await BillingService(session).create_deal_billing(user, request)
|
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(
|
@billing_router.get(
|
||||||
|
|||||||
@@ -16,9 +16,17 @@ class CreateDealBillRequest(BaseSchema):
|
|||||||
deal_id: int
|
deal_id: int
|
||||||
|
|
||||||
|
|
||||||
|
class CancelDealBillRequest(BaseSchema):
|
||||||
|
deal_id: int
|
||||||
|
|
||||||
|
|
||||||
class CreateDealBillResponse(OkMessageSchema):
|
class CreateDealBillResponse(OkMessageSchema):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class CancelDealBillResponse(OkMessageSchema):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class GetDealBillById(BaseSchema):
|
class GetDealBillById(BaseSchema):
|
||||||
deal_bill: DealBillRequestSchema
|
deal_bill: DealBillRequestSchema
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ from starlette import status
|
|||||||
|
|
||||||
import backend.config
|
import backend.config
|
||||||
from external.billing import BillingClient, CreateBillingRequestValue, CreateBillRequestSchema, CreateBillRequestItems, \
|
from external.billing import BillingClient, CreateBillingRequestValue, CreateBillRequestSchema, CreateBillRequestItems, \
|
||||||
BillStatusUpdateRequest, NotificationChannel, NotifyReceivedBillRequestSchema, BillPaymentInfo
|
BillStatusUpdateRequest, NotificationChannel, NotifyReceivedBillRequestSchema, BillPaymentInfo, \
|
||||||
|
DeleteBillRequestSchema
|
||||||
from models import DealBillRequest, Deal
|
from models import DealBillRequest, Deal
|
||||||
from schemas.billing import *
|
from schemas.billing import *
|
||||||
from services.base import BaseService
|
from services.base import BaseService
|
||||||
@@ -116,3 +117,18 @@ class BillingService(BaseService):
|
|||||||
if not deal_bill:
|
if not deal_bill:
|
||||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail='Deal bill was not found')
|
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail='Deal bill was not found')
|
||||||
return GetDealBillById(deal_bill=DealBillRequestSchema.model_validate(deal_bill))
|
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