Skip to content

Commit

Permalink
Add comments
Browse files Browse the repository at this point in the history
  • Loading branch information
armanddidierjean committed Nov 6, 2023
1 parent 422b060 commit 756a7d9
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 29 deletions.
34 changes: 7 additions & 27 deletions app/cruds/cruds_todos.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,8 @@ async def get_items_by_user_id(
db: AsyncSession,
user_id: str,
) -> Sequence[models_todos.TodosItem]:
"""
Return all items from a given user
"""

# On récupère tous les éléments TodosItem
# dont le user_id correspond à celui que l'on recherche
result = await db.execute(
select(models_todos.TodosItem).where(
models_todos.TodosItem.user_id == user_id,
Expand All @@ -23,35 +21,19 @@ async def get_items_by_user_id(
return result.scalars().all()


async def get_item_by_id(
db: AsyncSession,
id: str,
) -> models_todos.TodosItem | None:
"""
Return an item by its id
"""

result = await db.execute(
select(models_todos.TodosItem).where(
models_todos.TodosItem.id == id,
)
)
return result.scalars().first()


async def create_item(
db: AsyncSession,
item: models_todos.TodosItem,
) -> models_todos.TodosItem:
"""
Create a new item
"""

# Avec `db.add(item)` l'élément est placé tout seul dans la bonne table de la bdd.
# todo_item est en effet une instance du model : models_todos.TodosItem
db.add(item)
try:
await db.commit()
return item
except IntegrityError as error:
# En cas d'erreur d'ajout de l'objet, on revient en arrière (rollback de la db)
# pour annuler les modifications de la db et on lève une erreur.
await db.rollback()
raise ValueError(error)

Expand All @@ -61,9 +43,7 @@ async def edit_done_status(
id: str,
done: bool,
) -> None:
"""
Mark an item as done or not done
"""
# On met à jour le champ `done` de l'élément TodosItem

await db.execute(
update(models_todos.TodosItem)
Expand Down
7 changes: 5 additions & 2 deletions app/endpoints/todos.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from app.schemas import schemas_todos
from app.utils.types.tags import Tags

# We create a router, an object used by FastAPI to route requests to the right endpoints
router = APIRouter()


Expand Down Expand Up @@ -54,7 +55,8 @@ async def create_todo(
id=todo_id,
creation=creation_time,
user_id=user.id,
**item.dict(), # We add all informations contained in the schema, the operation is called unpacking
**item.dict(), # We add all informations contained in the schema,
# the operation is called unpacking
)
try:
res = await cruds_todos.create_item(
Expand All @@ -63,7 +65,8 @@ async def create_todo(
)
return res
except ValueError as error:
# If we failed to create the object in the database, we send back a 400 error code with the detail of the error
# If we failed to create the object in the database,
# we send back a 400 error code with the detail of the error
raise HTTPException(status_code=400, detail=str(error))


Expand Down
8 changes: 8 additions & 0 deletions app/models/models_todos.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,21 @@


class TodosItem(Base):
# Le nom de la table dans la base de données est `todos_item`
__tablename__ = "todos_item"

# `index=true` permet de retrouver plus rapidement
# les éléments par leur `id` ou `user_id` dans la base de données
id: Mapped[str] = mapped_column(String, primary_key=True, index=True)
# user_id est une relationship de type ForeignKey,
# c'est à dire un champ qui fait référence au champ d'un autre model.
# Ici on fait référence au champ `id` du modèle `core_user` (défini dans le ficher models_core).
user_id: Mapped[str] = mapped_column(
ForeignKey("core_user.id"), nullable=False, index=True
)
# Le nom de l'élément ne peut pas être None avec `nullable=false`
name: Mapped[str] = mapped_column(String, nullable=False)
creation: Mapped[date] = mapped_column(Date, nullable=False)
# Au contraire, la deadline est optionnelle, elle peut donc contenir soit une `date` soit un objet `None`
deadline: Mapped[date | None] = mapped_column(Date, nullable=True)
done: Mapped[bool] = mapped_column(Boolean, nullable=False)
3 changes: 3 additions & 0 deletions app/schemas/schemas_todos.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,18 @@
from pydantic import BaseModel


# Schema de base. Contiens toutes les données communes à tous les schemas
class TodosItemBase(BaseModel):
name: str
deadline: date | None = None
done: bool = False

# Required later to initiate schema using models
class Config:
orm_mode = True


# Format des données présente dans la base de donnée
class TodosItemComplete(TodosItemBase):
id: str
user_id: str
Expand Down

0 comments on commit 756a7d9

Please sign in to comment.