diff --git a/services/libs/data-access-layer/src/evaluated-projects/evaluatedProjects.ts b/services/libs/data-access-layer/src/evaluated-projects/evaluatedProjects.ts deleted file mode 100644 index 2e078beb0d..0000000000 --- a/services/libs/data-access-layer/src/evaluated-projects/evaluatedProjects.ts +++ /dev/null @@ -1,397 +0,0 @@ -import { QueryExecutor } from '../queryExecutor' -import { prepareSelectColumns } from '../utils' - -import { - EvaluationStatus, - IDbEvaluatedProject, - IDbEvaluatedProjectCreate, - IDbEvaluatedProjectUpdate, -} from './types' - -const EVALUATED_PROJECT_COLUMNS = [ - 'id', - 'projectCatalogId', - 'evaluationStatus', - 'evaluationScore', - 'evaluation', - 'evaluationReason', - 'evaluatedAt', - 'starsCount', - 'forksCount', - 'commitsCount', - 'pullRequestsCount', - 'issuesCount', - 'onboarded', - 'onboardedAt', - 'createdAt', - 'updatedAt', -] - -export async function findEvaluatedProjectById( - qx: QueryExecutor, - id: string, -): Promise { - return qx.selectOneOrNone( - ` - SELECT ${prepareSelectColumns(EVALUATED_PROJECT_COLUMNS)} - FROM "evaluatedProjects" - WHERE id = $(id) - `, - { id }, - ) -} - -export async function findEvaluatedProjectByProjectCatalogId( - qx: QueryExecutor, - projectCatalogId: string, -): Promise { - return qx.selectOneOrNone( - ` - SELECT ${prepareSelectColumns(EVALUATED_PROJECT_COLUMNS)} - FROM "evaluatedProjects" - WHERE "projectCatalogId" = $(projectCatalogId) - `, - { projectCatalogId }, - ) -} - -export async function findEvaluatedProjectsByStatus( - qx: QueryExecutor, - evaluationStatus: EvaluationStatus, - options: { limit?: number; offset?: number } = {}, -): Promise { - const { limit, offset } = options - - return qx.select( - ` - SELECT ${prepareSelectColumns(EVALUATED_PROJECT_COLUMNS)} - FROM "evaluatedProjects" - WHERE "evaluationStatus" = $(evaluationStatus) - ORDER BY "createdAt" ASC - ${limit !== undefined ? 'LIMIT $(limit)' : ''} - ${offset !== undefined ? 'OFFSET $(offset)' : ''} - `, - { evaluationStatus, limit, offset }, - ) -} - -export async function findAllEvaluatedProjects( - qx: QueryExecutor, - options: { limit?: number; offset?: number } = {}, -): Promise { - const { limit, offset } = options - - return qx.select( - ` - SELECT ${prepareSelectColumns(EVALUATED_PROJECT_COLUMNS)} - FROM "evaluatedProjects" - ORDER BY "createdAt" DESC - ${limit !== undefined ? 'LIMIT $(limit)' : ''} - ${offset !== undefined ? 'OFFSET $(offset)' : ''} - `, - { limit, offset }, - ) -} - -export async function countEvaluatedProjects( - qx: QueryExecutor, - evaluationStatus?: EvaluationStatus, -): Promise { - const statusFilter = evaluationStatus ? 'WHERE "evaluationStatus" = $(evaluationStatus)' : '' - - const result = await qx.selectOne( - ` - SELECT COUNT(*) AS count - FROM "evaluatedProjects" - ${statusFilter} - `, - { evaluationStatus }, - ) - return parseInt(result.count, 10) -} - -export async function insertEvaluatedProject( - qx: QueryExecutor, - data: IDbEvaluatedProjectCreate, -): Promise { - return qx.selectOne( - ` - INSERT INTO "evaluatedProjects" ( - "projectCatalogId", - "evaluationStatus", - "evaluationScore", - evaluation, - "evaluationReason", - "starsCount", - "forksCount", - "commitsCount", - "pullRequestsCount", - "issuesCount", - "createdAt", - "updatedAt" - ) - VALUES ( - $(projectCatalogId), - $(evaluationStatus), - $(evaluationScore), - $(evaluation), - $(evaluationReason), - $(starsCount), - $(forksCount), - $(commitsCount), - $(pullRequestsCount), - $(issuesCount), - NOW(), - NOW() - ) - RETURNING ${prepareSelectColumns(EVALUATED_PROJECT_COLUMNS)} - `, - { - projectCatalogId: data.projectCatalogId, - evaluationStatus: data.evaluationStatus ?? 'pending', - evaluationScore: data.evaluationScore ?? null, - evaluation: data.evaluation ? JSON.stringify(data.evaluation) : null, - evaluationReason: data.evaluationReason ?? null, - starsCount: data.starsCount ?? null, - forksCount: data.forksCount ?? null, - commitsCount: data.commitsCount ?? null, - pullRequestsCount: data.pullRequestsCount ?? null, - issuesCount: data.issuesCount ?? null, - }, - ) -} - -export async function bulkInsertEvaluatedProjects( - qx: QueryExecutor, - items: IDbEvaluatedProjectCreate[], -): Promise { - if (items.length === 0) { - return - } - - const values = items.map((item) => ({ - projectCatalogId: item.projectCatalogId, - evaluationStatus: item.evaluationStatus ?? 'pending', - evaluationScore: item.evaluationScore ?? null, - evaluation: item.evaluation ?? null, - evaluationReason: item.evaluationReason ?? null, - starsCount: item.starsCount ?? null, - forksCount: item.forksCount ?? null, - commitsCount: item.commitsCount ?? null, - pullRequestsCount: item.pullRequestsCount ?? null, - issuesCount: item.issuesCount ?? null, - })) - - await qx.result( - ` - INSERT INTO "evaluatedProjects" ( - "projectCatalogId", - "evaluationStatus", - "evaluationScore", - evaluation, - "evaluationReason", - "starsCount", - "forksCount", - "commitsCount", - "pullRequestsCount", - "issuesCount", - "createdAt", - "updatedAt" - ) - SELECT - v."projectCatalogId"::uuid, - v."evaluationStatus", - v."evaluationScore"::double precision, - v.evaluation::jsonb, - v."evaluationReason", - v."starsCount"::integer, - v."forksCount"::integer, - v."commitsCount"::integer, - v."pullRequestsCount"::integer, - v."issuesCount"::integer, - NOW(), - NOW() - FROM jsonb_to_recordset($(values)::jsonb) AS v( - "projectCatalogId" text, - "evaluationStatus" text, - "evaluationScore" double precision, - evaluation jsonb, - "evaluationReason" text, - "starsCount" integer, - "forksCount" integer, - "commitsCount" integer, - "pullRequestsCount" integer, - "issuesCount" integer - ) - `, - { values: JSON.stringify(values) }, - ) -} - -export async function updateEvaluatedProject( - qx: QueryExecutor, - id: string, - data: IDbEvaluatedProjectUpdate, -): Promise { - const setClauses: string[] = [] - const params: Record = { id } - - if (data.evaluationStatus !== undefined) { - setClauses.push('"evaluationStatus" = $(evaluationStatus)') - params.evaluationStatus = data.evaluationStatus - } - if (data.evaluationScore !== undefined) { - setClauses.push('"evaluationScore" = $(evaluationScore)') - params.evaluationScore = data.evaluationScore - } - if (data.evaluation !== undefined) { - setClauses.push('evaluation = $(evaluation)') - params.evaluation = data.evaluation ? JSON.stringify(data.evaluation) : null - } - if (data.evaluationReason !== undefined) { - setClauses.push('"evaluationReason" = $(evaluationReason)') - params.evaluationReason = data.evaluationReason - } - if (data.evaluatedAt !== undefined) { - setClauses.push('"evaluatedAt" = $(evaluatedAt)') - params.evaluatedAt = data.evaluatedAt - } - if (data.starsCount !== undefined) { - setClauses.push('"starsCount" = $(starsCount)') - params.starsCount = data.starsCount - } - if (data.forksCount !== undefined) { - setClauses.push('"forksCount" = $(forksCount)') - params.forksCount = data.forksCount - } - if (data.commitsCount !== undefined) { - setClauses.push('"commitsCount" = $(commitsCount)') - params.commitsCount = data.commitsCount - } - if (data.pullRequestsCount !== undefined) { - setClauses.push('"pullRequestsCount" = $(pullRequestsCount)') - params.pullRequestsCount = data.pullRequestsCount - } - if (data.issuesCount !== undefined) { - setClauses.push('"issuesCount" = $(issuesCount)') - params.issuesCount = data.issuesCount - } - if (data.onboarded !== undefined) { - setClauses.push('onboarded = $(onboarded)') - params.onboarded = data.onboarded - } - if (data.onboardedAt !== undefined) { - setClauses.push('"onboardedAt" = $(onboardedAt)') - params.onboardedAt = data.onboardedAt - } - - if (setClauses.length === 0) { - return findEvaluatedProjectById(qx, id) - } - - return qx.selectOneOrNone( - ` - UPDATE "evaluatedProjects" - SET - ${setClauses.join(',\n ')}, - "updatedAt" = NOW() - WHERE id = $(id) - RETURNING ${prepareSelectColumns(EVALUATED_PROJECT_COLUMNS)} - `, - params, - ) -} - -export async function markEvaluatedProjectAsEvaluated( - qx: QueryExecutor, - id: string, - data: { - evaluationScore: number - evaluation: Record - evaluationReason?: string - }, -): Promise { - return qx.selectOneOrNone( - ` - UPDATE "evaluatedProjects" - SET - "evaluationStatus" = 'evaluated', - "evaluationScore" = $(evaluationScore), - evaluation = $(evaluation), - "evaluationReason" = $(evaluationReason), - "evaluatedAt" = NOW(), - "updatedAt" = NOW() - WHERE id = $(id) - RETURNING ${prepareSelectColumns(EVALUATED_PROJECT_COLUMNS)} - `, - { - id, - evaluationScore: data.evaluationScore, - evaluation: JSON.stringify(data.evaluation), - evaluationReason: data.evaluationReason ?? null, - }, - ) -} - -export async function markEvaluatedProjectAsOnboarded( - qx: QueryExecutor, - id: string, -): Promise { - await qx.selectNone( - ` - UPDATE "evaluatedProjects" - SET - onboarded = true, - "onboardedAt" = NOW(), - "updatedAt" = NOW() - WHERE id = $(id) - `, - { id }, - ) -} - -export async function deleteEvaluatedProject(qx: QueryExecutor, id: string): Promise { - return qx.result( - ` - DELETE FROM "evaluatedProjects" - WHERE id = $(id) - `, - { id }, - ) -} - -export async function deleteEvaluatedProjectByProjectCatalogId( - qx: QueryExecutor, - projectCatalogId: string, -): Promise { - return qx.result( - ` - DELETE FROM "evaluatedProjects" - WHERE "projectCatalogId" = $(projectCatalogId) - `, - { projectCatalogId }, - ) -} - -export async function findPendingEvaluatedProjectsWithCatalog( - qx: QueryExecutor, - options: { limit?: number } = {}, -): Promise<(IDbEvaluatedProject & { projectSlug: string; repoName: string; repoUrl: string })[]> { - const { limit } = options - - return qx.select( - ` - SELECT - ${prepareSelectColumns(EVALUATED_PROJECT_COLUMNS, 'ep')}, - pc."projectSlug", - pc."repoName", - pc."repoUrl" - FROM "evaluatedProjects" ep - JOIN "projectCatalog" pc ON pc.id = ep."projectCatalogId" - WHERE ep."evaluationStatus" = 'pending' - ORDER BY ep."createdAt" ASC - ${limit !== undefined ? 'LIMIT $(limit)' : ''} - `, - { limit }, - ) -} diff --git a/services/libs/data-access-layer/src/evaluated-projects/index.ts b/services/libs/data-access-layer/src/evaluated-projects/index.ts deleted file mode 100644 index 7a4064eec2..0000000000 --- a/services/libs/data-access-layer/src/evaluated-projects/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './types' -export * from './evaluatedProjects' diff --git a/services/libs/data-access-layer/src/evaluated-projects/types.ts b/services/libs/data-access-layer/src/evaluated-projects/types.ts deleted file mode 100644 index bb11eb5d65..0000000000 --- a/services/libs/data-access-layer/src/evaluated-projects/types.ts +++ /dev/null @@ -1,50 +0,0 @@ -export type EvaluationStatus = 'pending' | 'evaluating' | 'evaluated' | 'failed' - -export interface IDbEvaluatedProject { - id: string - projectCatalogId: string - evaluationStatus: EvaluationStatus - evaluationScore: number | null - evaluation: Record | null - evaluationReason: string | null - evaluatedAt: string | null - starsCount: number | null - forksCount: number | null - commitsCount: number | null - pullRequestsCount: number | null - issuesCount: number | null - onboarded: boolean - onboardedAt: string | null - createdAt: string | null - updatedAt: string | null -} - -// onboarded/onboardedAt/evaluatedAt are excluded: they are managed by dedicated helpers -// (markEvaluatedProjectAsEvaluated, markEvaluatedProjectAsOnboarded) and never written on insert. -export type IDbEvaluatedProjectCreate = { - projectCatalogId: string - evaluationStatus?: EvaluationStatus - evaluationScore?: number - evaluation?: Record - evaluationReason?: string - starsCount?: number - forksCount?: number - commitsCount?: number - pullRequestsCount?: number - issuesCount?: number -} - -export type IDbEvaluatedProjectUpdate = Partial<{ - evaluationStatus: EvaluationStatus - evaluationScore: number | null - evaluation: Record | null - evaluationReason: string | null - evaluatedAt: string | null - starsCount: number | null - forksCount: number | null - commitsCount: number | null - pullRequestsCount: number | null - issuesCount: number | null - onboarded: boolean - onboardedAt: string | null -}> diff --git a/services/libs/data-access-layer/src/index.ts b/services/libs/data-access-layer/src/index.ts index 805f6b46c9..2eec73d0dc 100644 --- a/services/libs/data-access-layer/src/index.ts +++ b/services/libs/data-access-layer/src/index.ts @@ -15,4 +15,3 @@ export * from './integrations' export * from './auditLogs' export * from './maintainers' export * from './project-catalog' -export * from './evaluated-projects'