Agrega backend FastAPI al proyecto
This commit is contained in:
179
recolector_backend/app/schemas.py
Normal file
179
recolector_backend/app/schemas.py
Normal file
@@ -0,0 +1,179 @@
|
||||
from datetime import datetime
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class UserOut(BaseModel):
|
||||
id: int
|
||||
name: str
|
||||
email: str
|
||||
phone: str | None
|
||||
role: str
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class TokenOut(BaseModel):
|
||||
access_token: str
|
||||
token_type: str = "bearer"
|
||||
user: UserOut
|
||||
|
||||
|
||||
class LoginIn(BaseModel):
|
||||
email: str
|
||||
password: str
|
||||
|
||||
|
||||
class RegisterIn(BaseModel):
|
||||
name: str = Field(min_length=3, max_length=120)
|
||||
email: str
|
||||
phone: str | None = None
|
||||
password: str = Field(min_length=6, max_length=80)
|
||||
role: str = "ciudadano"
|
||||
|
||||
|
||||
class PositionOut(BaseModel):
|
||||
position_id: int
|
||||
lat: float
|
||||
lng: float
|
||||
speed: int
|
||||
timestamp: str
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class RouteOut(BaseModel):
|
||||
route_id: str
|
||||
name: str
|
||||
truck_id: int
|
||||
status: str
|
||||
current_position_id: int
|
||||
assigned_operator_id: int | None = None
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class RouteDetailOut(RouteOut):
|
||||
positions: list[PositionOut]
|
||||
|
||||
|
||||
class ColoniaOut(BaseModel):
|
||||
colonia: str
|
||||
route_id: str
|
||||
horario_estimado: str
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class DomicilioCreate(BaseModel):
|
||||
tipo: str = "Casa principal"
|
||||
direccion: str
|
||||
colonia: str
|
||||
lat: float | None = None
|
||||
lng: float | None = None
|
||||
|
||||
|
||||
class DomicilioOut(BaseModel):
|
||||
id: int
|
||||
tipo: str
|
||||
direccion: str
|
||||
colonia: str
|
||||
lat: float | None
|
||||
lng: float | None
|
||||
route_id: str
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class EtaOut(BaseModel):
|
||||
domicilio_id: int
|
||||
route_id: str
|
||||
route_name: str
|
||||
truck_id: int
|
||||
colonia: str
|
||||
horario_estimado: str
|
||||
eta_message: str
|
||||
current_position_id: int
|
||||
privacy_note: str
|
||||
|
||||
|
||||
class AlertCreate(BaseModel):
|
||||
type: str
|
||||
title: str
|
||||
message: str
|
||||
route_id: str
|
||||
priority: int = 1
|
||||
|
||||
|
||||
class AlertOut(BaseModel):
|
||||
id: int
|
||||
type: str
|
||||
title: str
|
||||
message: str
|
||||
route_id: str
|
||||
truck_id: int
|
||||
operator_id: int | None
|
||||
priority: int
|
||||
status: str
|
||||
created_at: datetime
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class ReportCreate(BaseModel):
|
||||
domicilio_id: int
|
||||
type: str
|
||||
comment: str = Field(min_length=5, max_length=800)
|
||||
|
||||
|
||||
class ReportOut(BaseModel):
|
||||
id: int
|
||||
user_id: int
|
||||
domicilio_id: int
|
||||
type: str
|
||||
comment: str
|
||||
status: str
|
||||
created_at: datetime
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class ReportStatusUpdate(BaseModel):
|
||||
status: str = Field(pattern="^(NUEVO|EN_REVISION|ATENDIDO|CERRADO)$")
|
||||
|
||||
|
||||
class RatingCreate(BaseModel):
|
||||
domicilio_id: int
|
||||
stars: int = Field(ge=1, le=5)
|
||||
comment: str | None = Field(default=None, max_length=400)
|
||||
|
||||
|
||||
class RatingOut(BaseModel):
|
||||
id: int
|
||||
user_id: int
|
||||
domicilio_id: int
|
||||
stars: int
|
||||
comment: str | None
|
||||
created_at: datetime
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
|
||||
class OperatorActionOut(BaseModel):
|
||||
ok: bool
|
||||
route: RouteOut
|
||||
alert: AlertOut | None = None
|
||||
message: str
|
||||
|
||||
|
||||
class AssignOperatorIn(BaseModel):
|
||||
operator_id: int
|
||||
|
||||
|
||||
class DashboardOut(BaseModel):
|
||||
routes_total: int
|
||||
active_routes: int
|
||||
trucks_total: int
|
||||
operators_total: int
|
||||
alerts_open: int
|
||||
reports_open: int
|
||||
average_rating: float
|
||||
Reference in New Issue
Block a user