This commit is contained in:
Johan
2025-12-16 16:54:12 +01:00
commit 26016e93ba
59 changed files with 3632 additions and 0 deletions

View File

13
src/app/schemas/genre.py Normal file
View File

@@ -0,0 +1,13 @@
from pydantic import BaseModel, ConfigDict
class GenreBase(BaseModel):
label: str
class GenreCreate(GenreBase):
pass
class GenreRead(GenreBase):
id: int
model_config = ConfigDict(from_attributes=True)

View File

@@ -0,0 +1,9 @@
from pydantic import BaseModel, ConfigDict
class MemberBase(BaseModel):
login: str
class MemberRead(MemberBase):
id: int
model_config = ConfigDict(from_attributes=True)

29
src/app/schemas/movie.py Normal file
View File

@@ -0,0 +1,29 @@
from pydantic import BaseModel, ConfigDict
from typing import List, Optional
from .person import PersonRead
from .genre import GenreRead
from .opinion import OpinionRead
class MovieBase(BaseModel):
title: str
year: int
duration: Optional[int] = None
synopsis: Optional[str] = None
# Schéma pour la création : on utilise les IDs pour les relations
class MovieCreate(MovieBase):
genre_id: int
director_id: int
actors_ids: List[int] = []
# Schéma complet pour la lecture : on imbrique les objets complets
class MovieRead(MovieBase):
id: int
genre: GenreRead
director: PersonRead
actors: List[PersonRead] = []
opinions: List[OpinionRead] = []
model_config = ConfigDict(from_attributes=True)

View File

@@ -0,0 +1,22 @@
from pydantic import BaseModel, ConfigDict
from app.schemas.member import MemberRead
class OpinionBase(BaseModel):
note: int
comment: str
class OpinionCreate(OpinionBase):
member_id: int
# movie_id n'est pas nécessaire ici car il vient déjà de l'URL
pass
class OpinionRead(OpinionBase):
id: int
movie_id: int
member: MemberRead
model_config = ConfigDict(from_attributes=True)

View File

@@ -0,0 +1,23 @@
from pydantic import BaseModel, ConfigDict
from typing import Optional
from .person import PersonBase
# Schéma pour la création d'un Participant
class ParticipantCreate(PersonBase):
pass
# Schéma pour la mise à jour d'un Participant
class ParticipantUpdate(BaseModel):
# Les champs sont optionnels pour permettre des mises à jour partielles (PATCH)
last_name: Optional[str] = None
first_name: Optional[str] = None
model_config = ConfigDict(extra="forbid") # Empêche l'ajout de champs non définis
# Schéma complet pour la lecture d'un Participant
class ParticipantRead(PersonBase):
id: int
model_config = ConfigDict(from_attributes=True)

15
src/app/schemas/person.py Normal file
View File

@@ -0,0 +1,15 @@
from pydantic import BaseModel, ConfigDict
from typing import Optional
class PersonBase(BaseModel):
last_name: str
first_name: Optional[str] = None
class PersonCreate(PersonBase):
pass
class PersonRead(PersonBase):
id: int
model_config = ConfigDict(from_attributes=True)