feat: billing guest access
This commit is contained in:
		
							
								
								
									
										81
									
								
								external/billing/schemas.py
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								external/billing/schemas.py
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
			
		||||
import re
 | 
			
		||||
from typing import List
 | 
			
		||||
 | 
			
		||||
from pydantic import field_validator
 | 
			
		||||
 | 
			
		||||
from schemas.base import BaseSchema
 | 
			
		||||
from .enums import NotificationChannel
 | 
			
		||||
from datetime import datetime as dt
 | 
			
		||||
from datetime import date
 | 
			
		||||
 | 
			
		||||
phone_regexp = re.compile(r'^((\+7)([0-9]){10})$')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CreateBillingRequestValue(BaseSchema):
 | 
			
		||||
    name: str = ""
 | 
			
		||||
    unit: str = "Руб"
 | 
			
		||||
    vat: str = "None"
 | 
			
		||||
 | 
			
		||||
    price: int
 | 
			
		||||
    amount: int = 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CreateBillRequestItems(BaseSchema):
 | 
			
		||||
    values: List[CreateBillingRequestValue]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CreateBillRequestSchema(BaseSchema):
 | 
			
		||||
    listener_transaction_id: int
 | 
			
		||||
    payer_name: str
 | 
			
		||||
    payer_inn: int
 | 
			
		||||
    payer_phone: str | None
 | 
			
		||||
    items: CreateBillRequestItems
 | 
			
		||||
 | 
			
		||||
    @field_validator("payer_phone", mode="before")
 | 
			
		||||
    def payer_phone_validator(cls, phone: str) -> str:
 | 
			
		||||
        if phone is None:
 | 
			
		||||
            return None
 | 
			
		||||
 | 
			
		||||
        if not phone.startswith("+"):
 | 
			
		||||
            phone = f"+{phone}"
 | 
			
		||||
 | 
			
		||||
        if phone_regexp.match(phone):
 | 
			
		||||
            return phone
 | 
			
		||||
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class NotifyReceivedBillRequestSchema(BaseSchema):
 | 
			
		||||
    listener_transaction_id: int
 | 
			
		||||
    channel: NotificationChannel
 | 
			
		||||
    received: bool
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CreateBillingResponseSchema(BaseSchema):
 | 
			
		||||
    ok: bool
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class NotifyReceivedBillResponseSchema(BaseSchema):
 | 
			
		||||
    ok: bool
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class BillPaymentInfo(BaseSchema):
 | 
			
		||||
    pdf_url: str
 | 
			
		||||
    due_date: date
 | 
			
		||||
    payment_amount: int
 | 
			
		||||
    invoice_number: str
 | 
			
		||||
 | 
			
		||||
    @field_validator('due_date', mode='plain')
 | 
			
		||||
    def serialize_due_date(value: str) -> date:
 | 
			
		||||
        date = dt.strptime(value, '%Y-%m-%d').date()
 | 
			
		||||
        return date
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class BillPaymentStatus(BaseSchema):
 | 
			
		||||
    payed: bool
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class BillStatusUpdateRequest(BaseSchema):
 | 
			
		||||
    listener_transaction_id: int
 | 
			
		||||
    channel: NotificationChannel
 | 
			
		||||
    info: BillPaymentInfo | BillPaymentStatus
 | 
			
		||||
		Reference in New Issue
	
	Block a user