fix redirect to checkout when the org has not a subscription
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
import re
|
||||
from decimal import Decimal
|
||||
from http import HTTPStatus
|
||||
from typing import Annotated, Literal
|
||||
from typing import Any, Literal
|
||||
from uuid import uuid4
|
||||
|
||||
from aws_lambda_powertools.event_handler.api_gateway import Router
|
||||
from aws_lambda_powertools.event_handler.openapi.params import Body
|
||||
from layercake.dateutils import now
|
||||
from layercake.dynamodb import DynamoDBPersistenceLayer
|
||||
from layercake.extra_types import CnpjStr, CpfStr, NameStr
|
||||
from pydantic import (
|
||||
@@ -12,6 +13,7 @@ from pydantic import (
|
||||
BaseModel,
|
||||
ConfigDict,
|
||||
EmailStr,
|
||||
Field,
|
||||
field_validator,
|
||||
model_validator,
|
||||
)
|
||||
@@ -20,6 +22,7 @@ from api_gateway import JSONResponse
|
||||
from boto3clients import dynamodb_client
|
||||
from config import ORDER_TABLE
|
||||
from routes.enrollments.enroll import Enrollment
|
||||
from routes.orgs.address import address
|
||||
|
||||
router = Router()
|
||||
dyn = DynamoDBPersistenceLayer(ORDER_TABLE, dynamodb_client)
|
||||
@@ -62,6 +65,7 @@ class Coupon(BaseModel):
|
||||
class Checkout(BaseModel):
|
||||
model_config = ConfigDict(str_strip_whitespace=True)
|
||||
|
||||
id: UUID4 = Field(default_factory=uuid4)
|
||||
name: str
|
||||
email: EmailStr
|
||||
address: Address
|
||||
@@ -69,11 +73,11 @@ class Checkout(BaseModel):
|
||||
items: tuple[Item, ...]
|
||||
enrollments: tuple[Enrollment, ...] | None = None
|
||||
coupon: Coupon | None = None
|
||||
user: User | None = None
|
||||
org_id: UUID4 | str | None = None
|
||||
user_id: UUID4 | str | None = None
|
||||
cnpj: CnpjStr | None = None
|
||||
cpf: CpfStr | None = None
|
||||
created_by: User | None = None
|
||||
|
||||
@model_validator(mode='after')
|
||||
def verify_fields(self):
|
||||
@@ -84,15 +88,67 @@ class Checkout(BaseModel):
|
||||
if self.org_id is None:
|
||||
raise ValueError('org_id is missing')
|
||||
|
||||
if self.user is None:
|
||||
raise ValueError('user is missing')
|
||||
if self.created_by is None:
|
||||
raise ValueError('created_by is missing')
|
||||
|
||||
if self.cpf is not None and self.user_id is None:
|
||||
raise ValueError('user_id is missing')
|
||||
|
||||
return self
|
||||
|
||||
def model_dump(self, **kwargs) -> dict[str, Any]:
|
||||
return super().model_dump(
|
||||
exclude_none=True,
|
||||
exclude={'items', 'address', 'created_by'},
|
||||
**kwargs,
|
||||
)
|
||||
|
||||
|
||||
@router.post('/')
|
||||
def checkout(body: Annotated[Checkout, Body()]):
|
||||
return JSONResponse(status_code=HTTPStatus.CREATED)
|
||||
def checkout(payload: Checkout):
|
||||
now_ = now()
|
||||
order_id = str(payload.id)
|
||||
address = payload.address
|
||||
coupon = payload.coupon
|
||||
|
||||
with dyn.transact_writer() as transact:
|
||||
transact.put(
|
||||
item={
|
||||
'id': order_id,
|
||||
'sk': '0',
|
||||
'total': '',
|
||||
'discount': '',
|
||||
'due_date': '',
|
||||
'created_at': now_,
|
||||
}
|
||||
| ({'coupon': coupon.code} if coupon else {})
|
||||
| payload.model_dump()
|
||||
)
|
||||
transact.put(
|
||||
item={
|
||||
'id': order_id,
|
||||
'sk': 'ITEMS',
|
||||
'items': [],
|
||||
'created_at': now_,
|
||||
}
|
||||
)
|
||||
transact.put(
|
||||
item={
|
||||
'id': order_id,
|
||||
'sk': 'ADDRESS',
|
||||
'created_at': now_,
|
||||
}
|
||||
| address.model_dump()
|
||||
)
|
||||
|
||||
if coupon:
|
||||
transact.put(
|
||||
item={
|
||||
'id': order_id,
|
||||
'sk': 'COUPON',
|
||||
'created_at': now_,
|
||||
}
|
||||
| coupon.model_dump()
|
||||
)
|
||||
|
||||
return JSONResponse(body={'id': order_id}, status_code=HTTPStatus.CREATED)
|
||||
|
||||
Reference in New Issue
Block a user