Factor out common prefixes

This commit is contained in:
Jack Jackson 2024-01-31 20:39:16 -08:00
parent fbbaadd098
commit 608df42388
7 changed files with 49 additions and 47 deletions

View File

@ -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
}
)

View File

@ -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
}

View File

@ -5,7 +5,6 @@
<title>Player - {{ player.name }}</title>
</head>
<body>
<h1>Hello World!</h1>
<h2>This is the page for player {{ player.name }} who has id {{ player.id }}</h2>
</body>
</html>