Files
2024-04-04 17:38:06 +02:00

95 lines
2.5 KiB
Python

import math
from prisma import Prisma
from pydantic import BaseModel
import codex.api_model
import codex.common.model
async def fetch_application_details(
page=1, page_size=20
) -> codex.common.model.ResumePointsList:
client = Prisma()
await client.connect()
# Pagination parameters
offset = (page - 1) * page_size
# Pagination parameters
offset = (page - 1) * page_size
# Raw SQL query
raw_sql = """
SELECT
CAST(ROW_NUMBER() OVER (ORDER BY a."updatedAt" DESC) AS VARCHAR) AS id,
a.name AS name,
a."updatedAt" AS "updatedAt",
a."userId" AS "userId",
a.id AS "applicationId",
i.id AS "interviewId",
s.id AS "specificationId",
ca.id AS "completedAppId",
d.id AS "deploymentId"
FROM
"Application" a
LEFT JOIN
"Interview" i ON a.id = i."applicationId" AND i.deleted = false
LEFT JOIN
"Specification" s ON i.id = s."interviewId" AND s.deleted = false
LEFT JOIN
"CompletedApp" ca ON s.id = ca."specificationId" AND ca.deleted = false
LEFT JOIN
"Deployment" d ON ca.id = d."completedAppId" AND d.deleted = false
WHERE
a.deleted = false
ORDER BY
a."updatedAt" DESC
LIMIT $1 OFFSET $2
"""
count_raw_sql = """
SELECT
COUNT(*)
FROM
"Application" a
LEFT JOIN
"Interview" i ON a.id = i."applicationId" AND i.deleted = false
LEFT JOIN
"Specification" s ON a.id = s."applicationId" AND s.deleted = false
LEFT JOIN
"CompletedApp" ca ON s.id = ca."specificationId" AND ca.deleted = false
LEFT JOIN
"Deployment" d ON ca.id = d."completedAppId" AND d.deleted = false
WHERE
a.deleted = false
"""
# Execute the query
results = await client.query_raw(
raw_sql,
page_size,
offset,
model=codex.common.model.ResumePoint,
)
class CountResponse(BaseModel):
count: int
count_resp = await client.query_first(count_raw_sql, model=CountResponse)
count = 0
if count_resp:
count = count_resp.count
pages = codex.api_model.Pagination(
total_items=count,
total_pages=math.ceil(count / page_size),
current_page=page,
page_size=page_size,
)
await client.disconnect()
return codex.common.model.ResumePointsList(resume_points=results, pagination=pages)