(api) use most recently generated image for cover photo

This commit is contained in:
maryhipp 2023-06-15 08:31:14 -07:00 committed by psychedelicious
parent 2e41af2109
commit ca8f1a7828
2 changed files with 34 additions and 5 deletions

View File

@ -136,11 +136,12 @@ class BoardService(BoardServiceABC):
board_records = self._services.board_records.get_many(offset, limit)
board_dtos = []
for r in board_records.items:
cover_image_url = (
self._services.urls.get_image_url(r.cover_image_name, True)
if r.cover_image_name
else None
)
cover_image = self._services.image_records.get_most_recent_image_for_board(r.board_id)
if (cover_image):
cover_image_url = self._services.urls.get_image_url(cover_image.image_name, True)
else:
cover_image_url = None
image_count = self._services.board_image_records.get_image_count_for_board(
r.board_id
)

View File

@ -109,6 +109,11 @@ class ImageRecordStorageBase(ABC):
"""Saves an image record."""
pass
@abstractmethod
def get_most_recent_image_for_board(self, board_id: str) -> ImageRecord | None:
"""Gets the most recent image for a board."""
pass
class SqliteImageRecordStorage(ImageRecordStorageBase):
_filename: str
@ -414,3 +419,26 @@ class SqliteImageRecordStorage(ImageRecordStorageBase):
raise ImageRecordSaveException from e
finally:
self._lock.release()
def get_most_recent_image_for_board(self, board_id: str) -> Union[ImageRecord, None]:
try:
self._lock.acquire()
self._cursor.execute(
"""--sql
SELECT images.*
FROM images
JOIN board_images ON images.image_name = board_images.image_name
WHERE board_images.board_id = ?
ORDER BY images.created_at DESC
LIMIT 1;
""",
(board_id,),
)
result = cast(Union[sqlite3.Row, None], self._cursor.fetchone())
finally:
self._lock.release()
if result is None:
return None
return deserialize_image_record(dict(result))