sync: migrate secure-online-shop to Gitea (2026-08-10)
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from decimal import Decimal
|
||||
from typing import Annotated
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field, StrictInt, model_validator
|
||||
|
||||
from app.models.order import OrderStatusEnum
|
||||
|
||||
|
||||
class OrderCreateItem(BaseModel):
|
||||
model_config = ConfigDict(extra="forbid")
|
||||
|
||||
product_id: Annotated[StrictInt, Field(gt=0)]
|
||||
quantity: Annotated[StrictInt, Field(gt=0, le=1000)]
|
||||
|
||||
|
||||
class OrderCreate(BaseModel):
|
||||
model_config = ConfigDict(extra="forbid")
|
||||
|
||||
items: Annotated[list[OrderCreateItem], Field(min_length=1, max_length=100)]
|
||||
|
||||
@model_validator(mode="after")
|
||||
def validate_unique_products(self) -> "OrderCreate":
|
||||
product_ids = [item.product_id for item in self.items]
|
||||
if len(product_ids) != len(set(product_ids)):
|
||||
raise ValueError("Each product may only appear once per order")
|
||||
return self
|
||||
|
||||
|
||||
class OrderItemResponse(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True, extra="forbid")
|
||||
|
||||
id: int
|
||||
product_id: int
|
||||
product_name: str
|
||||
quantity: int
|
||||
unit_price: Decimal
|
||||
subtotal: Decimal
|
||||
|
||||
|
||||
class OrderResponse(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True, extra="forbid")
|
||||
|
||||
id: int
|
||||
status: OrderStatusEnum
|
||||
total_amount: Decimal
|
||||
created_at: datetime
|
||||
paid_at: datetime | None
|
||||
items: list[OrderItemResponse]
|
||||
Reference in New Issue
Block a user