Skip to content

Commit

Permalink
feat : add captain endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
BLEMENT33 committed May 23, 2024
1 parent eac45ca commit 5e36580
Show file tree
Hide file tree
Showing 3 changed files with 125 additions and 3 deletions.
27 changes: 27 additions & 0 deletions app/modules/sports_results/cruds_sport_results.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,18 @@ async def is_user_a_captain(
return result.unique().scalars().first() is not None


async def get_captain_by_id(
captain_id,
db: AsyncSession,
) -> models_sport_results.Captain:
captain = await db.execute(
select(models_sport_results.Captain).where(
models_sport_results.Captain.id == captain_id,
),
)
return captain.scalars().all()


async def get_result_by_id(
result_id,
db: AsyncSession,
Expand Down Expand Up @@ -153,6 +165,21 @@ async def add_captain(
raise ValueError(error)


async def update_captain(
captain_id: str,
captain_update: models_sport_results.CaptainUpdate,
db: AsyncSession,
):
await db.execute(
update(models_sport_results.Captain)
.where(
models_sport_results.Captain.id == captain_id,
)
.values(**captain_update.model_dump(exclude_none=True)),
)
await db.commit()


async def delete_captain(
user_id: str,
db: AsyncSession,
Expand Down
86 changes: 86 additions & 0 deletions app/modules/sports_results/endpoints_sport_results.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,92 @@ async def is_user_a_captain_of_a_sport(
)


@module.router.get(
"/sport-results/captain/sport/{sport_id}",
response_model=list[schemas_sport_results.Captain],
status_code=200,
)
async def get_captains_by_sport_id(
sport_id: str,
db: AsyncSession = Depends(get_db),
):
return await cruds_sport_results.get_captains_by_sport_id(
sport_id,
db=db,
)


@module.router.post(
"/sport-results/captain",
response_model=schemas_sport_results.Captain,
status_code=201,
)
async def add_captain(
captain: schemas_sport_results.CaptainBase,
db: AsyncSession = Depends(get_db),
user: models_core.CoreUser = Depends(is_user_a_member),
):
captain_complete = schemas_sport_results.CaptainComplete(
id=str(uuid.uuid4()),
**captain.model_dump(),
)
try:
captain_db = models_sport_results.Captain(
id=captain_complete.id,
user_id=captain_complete.user_id,
sport=captain_complete.sport,
)
return await cruds_sport_results.create_captain(captain=captain_db, db=db)
except ValueError as error:
raise HTTPException(status_code=400, detail=str(error))


@module.router.patch(
"/sport-results/captain/{captain_id}",
status_code=204,
)
async def update_captain(
captain_id: str,
captain_update: schemas_sport_results.CaptainUpdate,
db: AsyncSession = Depends(get_db),
user: models_core.CoreUser = Depends(is_user_a_member_of(GroupType.BDS)),
):
captain = await cruds_sport_results.get_captain_by_id(captain_id=captain_id, db=db)
if not captain:
raise HTTPException(
status_code=404,
detail="Invalid id",
)

await cruds_sport_results.update_captain(
captain_id=captain_id,
captain_update=captain_update,
db=db,
)


@module.router.delete(
"/sport-results/{captain_id}",
status_code=204,
)
async def delete_captain(
captain_id: str,
db: AsyncSession = Depends(get_db),
user: models_core.CoreUser = Depends(is_user_a_member_of(GroupType.BDS)),
):
captain = await cruds_sport_results.get_captain_by_id(captain_id=captain_id, db=db)
if not captain:
raise HTTPException(
status_code=404,
detail="Invalid id",
)

await cruds_sport_results.delete_captain(
captain_id=captain_id,
db=db,
)


@module.router.post(
"/sport-results/result",
response_model=schemas_sport_results.ResultComplete,
Expand Down
15 changes: 12 additions & 3 deletions app/modules/sports_results/schemas_sport_results.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,28 @@
from pydantic import BaseModel


class Captain(BaseModel):
class CaptainBase(BaseModel):
user_id: str
sport: "SportComplete"


class CaptainUpdate(BaseModel):
user_id: str | None = None
sport: "SportComplete | None" = None


class CaptainComplete(CaptainBase):
id: str


class SportBase(BaseModel):
name: str
captains: list[Captain]
captains: list[CaptainComplete]


class SportUpdate(BaseModel):
name: str | None = None
captains: list[Captain] | None = None
captains: list[CaptainComplete] | None = None


class SportComplete(SportBase):
Expand Down

0 comments on commit 5e36580

Please sign in to comment.