From 608df4238878f671827b95dc2f65ac774495c18a Mon Sep 17 00:00:00 2001 From: Jack Jackson Date: Wed, 31 Jan 2024 20:39:16 -0800 Subject: [PATCH] Factor out common prefixes --- app/routers/decks.py | 61 +++++++++---------- app/routers/players.py | 34 ++++++----- .../{deck_create.html => decks/create.html} | 0 .../{deck_detail.html => decks/detail.html} | 0 .../{deck_list.html => decks/list.html} | 0 .../create.html} | 0 .../detail.html} | 1 - 7 files changed, 49 insertions(+), 47 deletions(-) rename app/templates/{deck_create.html => decks/create.html} (100%) rename app/templates/{deck_detail.html => decks/detail.html} (100%) rename app/templates/{deck_list.html => decks/list.html} (100%) rename app/templates/{player_create.html => players/create.html} (100%) rename app/templates/{player_detail.html => players/detail.html} (89%) diff --git a/app/routers/decks.py b/app/routers/decks.py index 5420507..c446faf 100644 --- a/app/routers/decks.py +++ b/app/routers/decks.py @@ -8,10 +8,10 @@ from ..sql.database import get_db from .players import read_player, list_players -api_router = APIRouter(tags=["deck"]) -html_router = APIRouter(include_in_schema=False) +api_router = APIRouter(prefix="/deck", tags=["deck"]) +html_router = APIRouter(prefix="/deck", include_in_schema=False) -@api_router.post("/deck", response_model=schemas.Deck, status_code=201) +@api_router.post("/", response_model=schemas.Deck, status_code=201) def create_deck(deck: schemas.DeckCreate, db: Session = Depends(get_db)): db_player = crud.get_player_by_id(db, deck.owner_id) if db_player is None: @@ -20,60 +20,59 @@ def create_deck(deck: schemas.DeckCreate, db: Session = Depends(get_db)): return crud.create_deck(db=db, deck=deck) -@api_router.get("/deck/{deck_id}", response_model=schemas.Deck) -def read_deck(deck_id: str, db = Depends(get_db)): +@api_router.get("/list", response_model=list[schemas.Deck]) +def list_decks(skip: int = 0, limit: int = 100, db = Depends(get_db)): + return crud.get_decks(db, skip=skip, limit=limit) + + +@api_router.get("/{deck_id}", response_model=schemas.Deck) +def read_deck(deck_id: int, db = Depends(get_db)): + print(deck_id) db_deck = crud.get_deck_by_id(db, deck_id) if db_deck is None: raise HTTPException(status_code=404, detail="Deck not found") return db_deck -@api_router.get("/decks", response_model=list[schemas.Deck]) -def list_decks(skip: int = 0, limit: int = 100, db = Depends(get_db)): - return crud.get_decks(db, skip=skip, limit=limit) - - -@api_router.delete("/deck/{deck_id}", status_code=204) +@api_router.delete("/{deck_id}", status_code=204) def delete_deck(deck_id: str, db = Depends(get_db)): crud.delete_deck_by_id(db, int(deck_id)) -@html_router.get("/deck/create", response_class=HTMLResponse) +@html_router.get("/create", response_class=HTMLResponse) def deck_create_html(request: Request, db = Depends(get_db)): players = list_players(db=db) return jinja_templates.TemplateResponse( request, - "deck_create.html", + "decks/create.html", { "players": players } ) -@html_router.get("/deck/{deck_id}", response_class=HTMLResponse) +# TODO - pagination +@html_router.get("/list", response_class=HTMLResponse) +def decks_html(request: Request, db = Depends(get_db)): + decks = list_decks(db=db) + return jinja_templates.TemplateResponse( + request, + "decks/list.html", + { + "decks": decks + } + ) + + +# This must be after the static-path routes, lest it take priority over them +@html_router.get("/{deck_id}", response_class=HTMLResponse) def deck_html(request: Request, deck_id: str, db = Depends(get_db)): deck_info = read_deck(deck_id, db) return jinja_templates.TemplateResponse( request, - "deck_detail.html", + "decks/detail.html", { "deck": _jsonify(deck_info), "owner": _jsonify(deck_info.owner) } ) - - -# TODO - pagination -@html_router.get("/decks", response_class=HTMLResponse) -def decks_html(request: Request, db = Depends(get_db)): - decks = list_decks(db=db) - print(decks) - return jinja_templates.TemplateResponse( - request, - "deck_list.html", - { - # TODO - investigate if there are any issues to passing the "live" object into the - # template, as opposed to the `_jsonify`'d one. - "decks": decks - } - ) \ No newline at end of file diff --git a/app/routers/players.py b/app/routers/players.py index be632d2..94f9116 100644 --- a/app/routers/players.py +++ b/app/routers/players.py @@ -6,46 +6,50 @@ from ..templates import jinja_templates from ..sql import crud, schemas from ..sql.database import get_db -api_router = APIRouter(tags=["player"]) -html_router = APIRouter() +api_router = APIRouter(prefix="/player", tags=["player"]) +html_router = APIRouter(prefix="/player", include_in_schema=False) -@api_router.post("/player", response_model=schemas.Player, status_code=201) +@api_router.post("/", response_model=schemas.Player, status_code=201) def create_player(player: schemas.PlayerCreate, db: Session = Depends(get_db)): return crud.create_player(db=db, player=player) -@api_router.get("/player/{player_id}", response_model=schemas.Player) -def read_player(player_id: str, db = Depends(get_db)): +@api_router.get("/list", response_model=list[schemas.Player]) +def list_players(skip: int = 0, limit: int = 100, db = Depends(get_db)): + return crud.get_players(db, skip=skip, limit=limit) + + +# TODO - https://fastapi.tiangolo.com/tutorial/path-params/#order-matters +# suggests that putting this after `/list` should allow `/api/player/list` to properly +# trigger `list_players`, but it doesn't. +@api_router.get("/{player_id}", response_model=schemas.Player) +def read_player(player_id: int, db=Depends(get_db)): db_player = crud.get_player_by_id(db, player_id) if db_player is None: raise HTTPException(status_code=404, detail="Player not found") return db_player -@api_router.get("/players", response_model=list[schemas.Player]) -def list_players(skip: int = 0, limit: int = 100, db = Depends(get_db)): - return crud.get_players(db, skip=skip, limit=limit) - - -@api_router.delete("/player/{player_id}", status_code=204) +@api_router.delete("/{player_id}", status_code=204) def delete_player(player_id: str, db = Depends(get_db)): crud.delete_player_by_id(db, int(player_id)) -@html_router.get("/player/create", response_class=HTMLResponse) +@html_router.get("/create", response_class=HTMLResponse) def player_create_html(request: Request, db = Depends(get_db)): return jinja_templates.TemplateResponse( request, - "player_create.html" + "players/create.html" ) -@html_router.get("/player/{player_id}", response_class=HTMLResponse) +# This must be after the static-path routes, lest it take priority over them +@html_router.get("/{player_id}", response_class=HTMLResponse) def player_html(request: Request, player_id: str, db = Depends(get_db)): player_info = read_player(player_id, db) return jinja_templates.TemplateResponse( request, - "player_detail.html", + "players/detail.html", { "player": player_info } diff --git a/app/templates/deck_create.html b/app/templates/decks/create.html similarity index 100% rename from app/templates/deck_create.html rename to app/templates/decks/create.html diff --git a/app/templates/deck_detail.html b/app/templates/decks/detail.html similarity index 100% rename from app/templates/deck_detail.html rename to app/templates/decks/detail.html diff --git a/app/templates/deck_list.html b/app/templates/decks/list.html similarity index 100% rename from app/templates/deck_list.html rename to app/templates/decks/list.html diff --git a/app/templates/player_create.html b/app/templates/players/create.html similarity index 100% rename from app/templates/player_create.html rename to app/templates/players/create.html diff --git a/app/templates/player_detail.html b/app/templates/players/detail.html similarity index 89% rename from app/templates/player_detail.html rename to app/templates/players/detail.html index 7ff2b92..a9c7aaa 100644 --- a/app/templates/player_detail.html +++ b/app/templates/players/detail.html @@ -5,7 +5,6 @@ Player - {{ player.name }} -

Hello World!

This is the page for player {{ player.name }} who has id {{ player.id }}

\ No newline at end of file