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