sync: migrate secure-online-shop to Gitea (2026-08-10)

This commit is contained in:
konturai-ops
2026-08-10 15:26:59 +00:00
commit 2022c8890d
44 changed files with 3196 additions and 0 deletions
+51
View File
@@ -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]