159 lines
2.8 KiB
Python
159 lines
2.8 KiB
Python
# backend/schemas.py
|
|
|
|
from pydantic import BaseModel
|
|
from typing import Optional, List, Literal
|
|
from datetime import datetime
|
|
|
|
|
|
# === Equipment Type ===
|
|
class EquipmentTypeBase(BaseModel):
|
|
name: str
|
|
|
|
class EquipmentTypeCreate(EquipmentTypeBase):
|
|
pass
|
|
|
|
class EquipmentTypeRead(EquipmentTypeBase):
|
|
id: int
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
# === Component ===
|
|
class ComponentBase(BaseModel):
|
|
name: str
|
|
description: Optional[str] = None
|
|
|
|
class ComponentCreate(ComponentBase):
|
|
oborud_id: int
|
|
|
|
class ComponentRead(ComponentBase):
|
|
id: int
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
# === Consumable ===
|
|
class ConsumableBase(BaseModel):
|
|
name: str
|
|
description: Optional[str] = None
|
|
|
|
class ConsumableCreate(ConsumableBase):
|
|
oborud_id: int
|
|
|
|
class ConsumableRead(ConsumableBase):
|
|
id: int
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
# === Owner ===
|
|
class OwnerBase(BaseModel):
|
|
name: str
|
|
|
|
class OwnerCreate(OwnerBase):
|
|
pass
|
|
|
|
class OwnerRead(OwnerBase):
|
|
id: int
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
# === Oborud ===
|
|
class OborudBase(BaseModel):
|
|
invNumber: Optional[int]
|
|
nazvanie: str
|
|
raspologenie: Optional[str] = None
|
|
numberppasu: Optional[str] = None
|
|
kolichestvo: Optional[int] = None
|
|
aud_id: int
|
|
type_id: int
|
|
owner_id: Optional[int] = None
|
|
|
|
class OborudCreate(OborudBase):
|
|
pass
|
|
|
|
class OborudUpdate(BaseModel):
|
|
invNumber: Optional[int] = None
|
|
nazvanie: Optional[str] = None
|
|
raspologenie: Optional[str] = None
|
|
numberppasu: Optional[str] = None
|
|
kolichestvo: Optional[int] = None
|
|
aud_id: Optional[int] = None
|
|
type_id: Optional[int] = None
|
|
owner_id: Optional[int] = None
|
|
|
|
class OborudRead(OborudBase):
|
|
id: int
|
|
type: EquipmentTypeRead
|
|
owner: Optional[OwnerRead] = None
|
|
components: List[ComponentRead] = []
|
|
consumables: List[ConsumableRead] = []
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
# === Auditory ===
|
|
class AuditoryBase(BaseModel):
|
|
audnazvanie: str
|
|
|
|
class AuditoryCreate(AuditoryBase):
|
|
pass
|
|
|
|
class AuditoryRead(AuditoryBase):
|
|
id: int
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
# === Zametka ===
|
|
class ZametkaBase(BaseModel):
|
|
txtzam: str
|
|
rmdt: Optional[datetime] = None
|
|
|
|
class ZametkaCreate(ZametkaBase):
|
|
pass
|
|
|
|
class ZametkaRead(ZametkaBase):
|
|
id: int
|
|
created_date: datetime
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
# === Auth/User ===
|
|
class Token(BaseModel):
|
|
access_token: str
|
|
token_type: str = "bearer"
|
|
|
|
class TokenData(BaseModel):
|
|
username: Optional[str] = None
|
|
role: Optional[str] = None
|
|
|
|
Role = Literal["admin", "editor", "viewer"]
|
|
|
|
|
|
class UserBase(BaseModel):
|
|
username: str
|
|
role: Role = "viewer"
|
|
|
|
class UserCreate(UserBase):
|
|
password: str
|
|
|
|
class UserRead(UserBase):
|
|
id: int
|
|
|
|
class Config:
|
|
orm_mode = True
|
|
|
|
|
|
class UserRoleUpdate(BaseModel):
|
|
role: Role
|