diff --git a/app/routers_v2/players.py b/app/routers_v2/players.py index dc3b07b..dbb2ea4 100644 --- a/app/routers_v2/players.py +++ b/app/routers_v2/players.py @@ -2,7 +2,15 @@ import datetime import os.path import pandas as pd -from fastapi import APIRouter, Depends, HTTPException, Request, Response, Query +from fastapi import ( + APIRouter, + BackgroundTasks, + Depends, + HTTPException, + Request, + Response, + Query, +) from fastapi.responses import FileResponse from fastapi.templating import Jinja2Templates from typing import Optional, List, Literal @@ -732,6 +740,7 @@ async def get_one_player(player_id: int, csv: Optional[bool] = False): @router.get("/{player_id}/{card_type}card/{d}/{variant}") async def get_batter_card( request: Request, + background_tasks: BackgroundTasks, player_id: int, card_type: Literal["batting", "pitching"], variant: int = 0, @@ -906,6 +915,27 @@ async def get_batter_card( # save_as=f'{player_id}-{d}-v{variant}.png' # ) + # Schedule S3 upload for variant cards that don't have an image_url yet + if variant > 0 and tier is None: + CardModel = BattingCard if card_type == "batting" else PitchingCard + try: + card_row = CardModel.get( + (CardModel.player_id == player_id) & (CardModel.variant == variant) + ) + if card_row.image_url is None: + from app.services.card_storage import backfill_variant_image_url + + background_tasks.add_task( + backfill_variant_image_url, + player_id=player_id, + variant=variant, + card_type=card_type, + cardset_id=this_player.cardset.id, + png_path=file_path, + ) + except CardModel.DoesNotExist: + pass + return FileResponse(path=file_path, media_type="image/png", headers=headers)