Files
amap/backend/src/models.py
Julien Aldon 1a98957466 add products
2026-02-12 17:39:53 +01:00

171 lines
4.2 KiB
Python

from sqlmodel import Field, SQLModel, Relationship
from enum import StrEnum
from typing import Optional
import datetime
class UserBase(SQLModel):
name: str
email: str
class UserPublic(UserBase):
id: int
class User(UserBase, table=True):
id: int | None = Field(default=None, primary_key=True)
class UserUpdate(SQLModel):
name: str | None
email: str | None
class UserCreate(UserBase):
pass
class ProductorBase(SQLModel):
name: str
address: str
payment: str
type: str
class ProductorPublic(ProductorBase):
id: int
products: list["Product"] = []
class Productor(ProductorBase, table=True):
id: int | None = Field(default=None, primary_key=True)
products: list["Product"] = Relationship(back_populates='productor')
class ProductorUpdate(SQLModel):
name: str | None
address: str | None
payment: str | None
type: str | None
class ProductorCreate(ProductorBase):
pass
class Unit(StrEnum):
GRAMS = "1"
KILO = "2"
PIECE = "3"
class ProductType(StrEnum):
PLANNED = "1"
RECCURENT = "2"
class ShipmentProductLink(SQLModel, table=True):
shipment_id: Optional[int] = Field(default=None, foreign_key="shipment.id", primary_key=True)
product_id: Optional[int] = Field(default=None, foreign_key="product.id", primary_key=True)
class ProductBase(SQLModel):
name: str
unit: Unit
price: float
price_kg: float | None
weight: float | None
type: ProductType
productor_id: int | None = Field(default=None, foreign_key="productor.id")
class ProductPublic(ProductBase):
id: int
productor: Productor | None
shipments: list["Shipment"] | None
class Product(ProductBase, table=True):
id: int | None = Field(default=None, primary_key=True)
shipments: list["Shipment"] = Relationship(back_populates="products", link_model=ShipmentProductLink)
productor: Optional[Productor] = Relationship(back_populates="products")
class ProductUpdate(SQLModel):
name: str | None
unit: Unit | None
price: float | None
price_kg: float | None
weight: float | None
productor_id: int | None
shipment_ids: list[int] | None = []
class ProductCreate(ProductBase):
shipment_ids: list[int] | None = []
class FormBase(SQLModel):
name: str
productor_id: int | None = Field(default=None, foreign_key="productor.id")
referer_id: int | None = Field(default=None, foreign_key="user.id")
season: str
start: datetime.date
end: datetime.date
class FormPublic(FormBase):
id: int
productor: ProductorPublic | None
referer: User | None
shipments: list["Shipment"] = []
class Form(FormBase, table=True):
id: int | None = Field(default=None, primary_key=True)
productor: Optional['Productor'] = Relationship()
referer: Optional['User'] = Relationship()
shipments: list["Shipment"] = Relationship(cascade_delete=True)
class FormUpdate(SQLModel):
name: str | None
productor_id: int | None
referer_id: int | None
season: str | None
start: datetime.date | None
end: datetime.date | None
class FormCreate(FormBase):
pass
class TemplateBase(SQLModel):
pass
class TemplatePublic(TemplateBase):
id: int
class Template(TemplateBase, table=True):
id: int | None = Field(default=None, primary_key=True)
class TemplateUpdate(SQLModel):
pass
class TemplateCreate(TemplateBase):
pass
class ContractBase(SQLModel):
pass
class ContractPublic(ContractBase):
id: int
class Contract(ContractBase, table=True):
id: int | None = Field(default=None, primary_key=True)
class ContractUpdate(SQLModel):
pass
class ContractCreate(ContractBase):
pass
class ShipmentBase(SQLModel):
name: str
date: datetime.date
form_id: int | None = Field(default=None, foreign_key="form.id", ondelete="CASCADE")
class ShipmentPublic(ShipmentBase):
id: int
products: list[Product] = []
class Shipment(ShipmentBase, table=True):
id: int | None = Field(default=None, primary_key=True)
products: list[Product] = Relationship(back_populates="shipments", link_model=ShipmentProductLink)
class ShipmentUpdate(SQLModel):
name: str | None
date: str | None
product_ids: list[int] = []
class ShipmentCreate(ShipmentBase):
product_ids: list[int] | None