add crud for forms, templates, shipment, users and auth with keycloak

This commit is contained in:
2026-02-09 23:38:22 +01:00
parent 145f3f632e
commit be7ca58513
45 changed files with 949 additions and 226 deletions

View File

@@ -3,85 +3,6 @@ from enum import Enum
from typing import Optional
import datetime
class Unit(Enum):
GRAMS = 1
KILO = 2
class ProductBase(SQLModel):
name: str
unit: Unit
price: float
price_kg: float | None
weight: float
productor_id: int | None = Field(default=None, foreign_key="productor.id")
class ProductPublic(ProductBase):
id: int
class Product(ProductBase, table=True):
id: int | None = Field(default=None, primary_key=True)
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 = Field(default=None, foreign_key="productor.id")
class ProductCreate(ProductBase):
pass
class ProductorBase(SQLModel):
name: str
address: str
payment: 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
class ProductorCreate(ProductorBase):
pass
class FormBase(SQLModel):
productor_id: int | None = Field(default=None, foreign_key="productor.id")
referer_id: int | None = Field(default=None, foreign_key="referer.id")
season: str
shipments: int
start: datetime.date
end: datetime.date
class FormPublic(FormBase):
id: int
class Form(FormBase, table=True):
id: int | None = Field(default=None, primary_key=True)
class FormUpdate(SQLModel):
productor_id: int | None = Field(default=None, foreign_key="productor.id")
referer_id: int | None = Field(default=None, foreign_key="user.id")
season: str | None
shipments: int | None
start: datetime.date | None
end: datetime.date | None
class FormCreate(FormBase):
pass
class UserBase(SQLModel):
name: str
email: str
@@ -97,4 +18,150 @@ class UserUpdate(SQLModel):
email: str | None
class UserCreate(UserBase):
pass
pass
class ProductorBase(SQLModel):
name: str
address: str
payment: 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
class ProductorCreate(ProductorBase):
pass
class Unit(Enum):
GRAMS = 1
KILO = 2
class ProductType(Enum):
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
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
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()
class FormUpdate(SQLModel):
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")
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]