[WIP] board list endpoint w cover photos

This commit is contained in:
maryhipp
2023-06-13 14:08:04 -07:00
committed by psychedelicious
parent 4bfaae6617
commit 3833304f57
3 changed files with 156 additions and 0 deletions

View File

@ -1,5 +1,7 @@
from fastapi import Body, HTTPException, Path, Query
from fastapi.routing import APIRouter
from invokeai.app.services.boards import BoardRecord, BoardRecordChanges
from invokeai.app.services.image_record_storage import OffsetPaginatedResults
from ..dependencies import ApiDependencies
@ -38,3 +40,52 @@ async def delete_board(
pass
@boards_router.get(
"/",
operation_id="list_boards",
response_model=OffsetPaginatedResults[BoardRecord],
)
async def list_boards(
offset: int = Query(default=0, description="The page offset"),
limit: int = Query(default=10, description="The number of boards per page"),
) -> OffsetPaginatedResults[BoardRecord]:
"""Gets a list of boards"""
results = ApiDependencies.invoker.services.boards.get_many(
offset,
limit,
)
boards = list(
map(
lambda r: board_record_to_dto(
r,
generate_cover_photo_url(r.id)
),
results.boards,
)
)
return boards
class BoardDTO(BaseModel):
"""A DTO for an image"""
id: str
name: str
cover_image_url: str
def board_record_to_dto(
board_record: BoardRecord, cover_image_url: str
) -> BoardDTO:
"""Converts an image record to an image DTO."""
return BoardDTO(
**board_record.dict(),
cover_image_url=cover_image_url,
)
def generate_cover_photo_url(board_id: str) -> str | None:
cover_photo = ApiDependencies.invoker.services.images._services.records.get_board_cover_photo(board_id)
if cover_photo is not None:
url = ApiDependencies.invoker.services.images._services.urls.get_image_url(cover_photo.image_origin, cover_photo.image_name)
return url