133 lines
3.2 KiB
Python
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 |