from typing import List, Tuple from prisma.models import CompletedApp from codex.api_model import DeliverableResponse, DeliverablesListResponse, Pagination async def get_deliverable( user_id: str, app_id: str, spec_id: str, deliverable_id: str ) -> CompletedApp: completed_app = await CompletedApp.prisma().find_unique_or_raise( where={"id": deliverable_id}, include={"CompiledRoutes": True}, ) return completed_app async def delete_deliverable( user_id: str, app_id: str, spec_id: str, deliverable_id: str ) -> None: await CompletedApp.prisma().update( where={"id": deliverable_id}, data={"deleted": True}, ) async def list_deliverables( user_id: str, app_id: str, spec_id: str, page: int = 1, page_size: int = 10, ) -> Tuple[List[CompletedApp], Pagination]: skip = (page - 1) * page_size total_items = await CompletedApp.prisma().count(where={"specificationId": spec_id}) if total_items == 0: return [], Pagination(total_items=0, total_pages=0, current_page=0, page_size=0) total_pages = (total_items + page_size - 1) // page_size completed_apps_data = await CompletedApp.prisma().find_many( skip=skip, take=page_size, include={"CompiledRoutes": True}, ) pagination = Pagination( total_items=total_items, total_pages=total_pages, current_page=page, page_size=page_size, ) return completed_apps_data, pagination