After_Chido_Api/models/schemas.py

133 lines
3.2 KiB
Python

from pydantic import BaseModel, EmailStr
from datetime import datetime
from typing import List, Optional
class UserBase(BaseModel):
email: EmailStr
full_name: str
phone: str
date_of_birth: datetime
organization: Optional[str] = None
class UserCreate(UserBase):
password: str
role: str
class UserResponse(BaseModel):
email: EmailStr
full_name: str
phone: str
date_of_birth: str
organization: Optional[str] = None
role: str
is_active: bool
is_banned: bool
class UserUpdateRole(BaseModel):
email: EmailStr
new_role: str
class UserBlockBan(BaseModel):
email: EmailStr
class Role(BaseModel):
id: int
name: str
permissions: List[str]
# Demande de besoin (NeedRequest)
class NeedRequestBase(BaseModel):
category: str
description: str
adults: int
children: int
vulnerable: int
location: str
gps_coordinates: Optional[str] = None
class NeedRequestCreate(NeedRequestBase):
requester_email: EmailStr
class NeedRequestUpdate(BaseModel):
category: Optional[str] = None
description: Optional[str] = None
adults: Optional[int] = None
children: Optional[int] = None
vulnerable: Optional[int] = None
location: Optional[str] = None
gps_coordinates: Optional[str] = None
status: Optional[str] = None
class NeedRequestResponse(NeedRequestBase):
id: int
requester_email: EmailStr
status: str
deleted: Optional[datetime] = None
class UserReport(BaseModel):
reporter_id: int
reported_user_id: int
reason: str
status: Optional[str] = "pending"
class UserReportUpdate(BaseModel):
reason: Optional[str] = None
status: Optional[str] = None # Exemples : "pending", "resolved"
class TechnicalIssue(BaseModel):
user_id: int
description: str
status: str
class UpdateTechnicalIssue(BaseModel):
status: Optional[str] = None
description: Optional[str] = None
class PersonReportBase(BaseModel):
full_name: str
date_of_birth: datetime
status: str # "missing", "safe", "deceased"
location: Optional[str] = None
gps_coordinates: Optional[str] = None
photo_url: Optional[str] = None
reporter_email: str
class PersonReportCreate(PersonReportBase):
pass
class PersonReportUpdate(BaseModel):
status: Optional[str] = None
location: Optional[str] = None
gps_coordinates: Optional[str] = None
photo_url: Optional[str] = None
class Token(BaseModel):
access_token: str
token_type: str
class TokenData(BaseModel):
email: Optional[str] = None
class PointOfInterest(BaseModel):
label: str
description: Optional[str] = None
icon: Optional[str] = None # URL de l'icône
organization: Optional[str] = None
gps_coordinates: str
added_by: int # ID de l'utilisateur qui a ajouté ce point
class Shelter(BaseModel):
label: str
description: Optional[str] = None
status: str # "available", "full", "closed"
contact_person: Optional[str] = None
gps_coordinates: str
added_by: int # ID de l'utilisateur qui a ajouté cet abri
class PersonReportResponse(PersonReportBase):
id: int
created_at: datetime
updated_at: datetime