From c7f973981a298f8bd234ee20306cf9df2278ce3b Mon Sep 17 00:00:00 2001 From: Gerard Clos Date: Thu, 2 Oct 2025 11:12:09 +0200 Subject: [PATCH] fix: commit repository method wrong types --- apps/gateway/src/common/documents/getData.ts | 4 +--- .../api/v3/projects/versions/get/getCommit.handler.ts | 2 +- .../src/routes/webhook/integration/webhook.handler.ts | 3 +-- apps/web/src/actions/sdk/runDocumentAction.ts | 4 +--- apps/web/src/app/(private)/_data-access/index.ts | 3 +-- .../web/src/app/api/documents/[documentUuid]/run/route.ts | 4 +--- packages/core/src/repositories/commitsRepository/index.ts | 7 ++----- .../repositories/commitsRepository/utils/getHeadCommit.ts | 4 ++-- packages/core/src/services/actions/cloneAgent.ts | 6 +----- packages/core/src/services/copilot/get.ts | 4 +--- packages/core/src/services/copilot/latte/helpers.ts | 5 +---- .../copilot/latte/tools/triggers/validateTriggerSchema.ts | 8 ++------ packages/core/src/services/documentTriggers/delete.ts | 7 ++----- packages/core/src/services/documentTriggers/enable.ts | 5 +---- .../core/src/services/documentTriggers/handleMerge.ts | 6 +----- .../documentTriggers/handlers/email/registerEvent.ts | 4 +--- .../documentTriggers/handlers/scheduled/registerEvents.ts | 4 +--- .../documentTriggers/helpers/getCommitFromTrigger.ts | 5 +---- .../recomputeChanges/getHeadDocumentsAndDraftDocuments.ts | 2 +- packages/core/src/services/documents/update.test.ts | 6 +++--- .../core/src/services/history/resetDocumentToVersion.ts | 7 ++++--- .../core/src/services/history/resetProjectToCommit.ts | 7 ++++--- packages/core/src/services/history/revertCommit.ts | 7 ++++--- .../core/src/services/history/revertDocumentVersion.ts | 7 ++++--- packages/core/src/services/publishedDocuments/create.ts | 5 +---- .../src/services/publishedDocuments/findSharedDocument.ts | 5 +---- 26 files changed, 44 insertions(+), 87 deletions(-) diff --git a/apps/gateway/src/common/documents/getData.ts b/apps/gateway/src/common/documents/getData.ts index 5bd0e40a3b..b9c73ea7f4 100644 --- a/apps/gateway/src/common/documents/getData.ts +++ b/apps/gateway/src/common/documents/getData.ts @@ -234,9 +234,7 @@ export async function publishDocumentRunRequestedEvent({ const user = await findFirstUserInWorkspace(workspace) const commitsScope = new CommitsRepository(workspace.id) - const headCommit = await commitsScope - .getHeadCommit(project.id) - .then((r) => r.unwrap()) + const headCommit = await commitsScope.getHeadCommit(project.id) if (user) { publisher.publishLater({ diff --git a/apps/gateway/src/routes/api/v3/projects/versions/get/getCommit.handler.ts b/apps/gateway/src/routes/api/v3/projects/versions/get/getCommit.handler.ts index 3065bc2a97..604250b0bf 100644 --- a/apps/gateway/src/routes/api/v3/projects/versions/get/getCommit.handler.ts +++ b/apps/gateway/src/routes/api/v3/projects/versions/get/getCommit.handler.ts @@ -4,7 +4,7 @@ import { BadRequestError } from '@latitude-data/constants/errors' import { AppRouteHandler } from '$/openApi/types' import { getVersionRoute } from './getCommit.route' -// @ts-expect-error: broken types +// @ts-expect-error: Types are not working as expected export const getVersionHandler: AppRouteHandler< typeof getVersionRoute > = async (c: Context) => { diff --git a/apps/gateway/src/routes/webhook/integration/webhook.handler.ts b/apps/gateway/src/routes/webhook/integration/webhook.handler.ts index 56c3c4d5cf..d5a284d982 100644 --- a/apps/gateway/src/routes/webhook/integration/webhook.handler.ts +++ b/apps/gateway/src/routes/webhook/integration/webhook.handler.ts @@ -43,8 +43,7 @@ async function resolveWorkspaceAndCommit( return Result.ok({ workspace, commit }) } - const headCommitResult = await commitsRepo.getHeadCommit(rawTrigger.projectId) - const commit = headCommitResult.unwrap() + const commit = await commitsRepo.getHeadCommit(rawTrigger.projectId) if (!commit) { return Result.error( new NotFoundError( diff --git a/apps/web/src/actions/sdk/runDocumentAction.ts b/apps/web/src/actions/sdk/runDocumentAction.ts index db2dd1797a..341d41f437 100644 --- a/apps/web/src/actions/sdk/runDocumentAction.ts +++ b/apps/web/src/actions/sdk/runDocumentAction.ts @@ -33,9 +33,7 @@ export async function runDocumentAction({ const { workspace, user } = await getCurrentUserOrRedirect() const commitsScope = new CommitsRepository(workspace.id) - const headCommit = await commitsScope - .getHeadCommit(projectId) - .then((r) => r.unwrap()) + const headCommit = await commitsScope.getHeadCommit(projectId) publisher.publishLater({ type: 'documentRunRequested', diff --git a/apps/web/src/app/(private)/_data-access/index.ts b/apps/web/src/app/(private)/_data-access/index.ts index 4eea9cc8ba..425e7a8e74 100644 --- a/apps/web/src/app/(private)/_data-access/index.ts +++ b/apps/web/src/app/(private)/_data-access/index.ts @@ -181,8 +181,7 @@ export const getHeadCommitCached = cache( projectId: number }) => { const commitsScope = new CommitsRepository(workspace.id) - const headCommitResult = await commitsScope.getHeadCommit(projectId) - return headCommitResult.value + return await commitsScope.getHeadCommit(projectId) }, ) diff --git a/apps/web/src/app/api/documents/[documentUuid]/run/route.ts b/apps/web/src/app/api/documents/[documentUuid]/run/route.ts index e0e70fbde8..9c9a03f987 100644 --- a/apps/web/src/app/api/documents/[documentUuid]/run/route.ts +++ b/apps/web/src/app/api/documents/[documentUuid]/run/route.ts @@ -60,9 +60,7 @@ export const POST = errorHandler( ).then((r) => r.unwrap()) const commitsScope = new CommitsRepository(workspace.id) - const headCommit = await commitsScope - .getHeadCommit(projectId) - .then((r) => r.unwrap()) + const headCommit = await commitsScope.getHeadCommit(projectId) // Publish document run event publisher.publishLater({ diff --git a/packages/core/src/repositories/commitsRepository/index.ts b/packages/core/src/repositories/commitsRepository/index.ts index 7b5531bb51..d286826b08 100644 --- a/packages/core/src/repositories/commitsRepository/index.ts +++ b/packages/core/src/repositories/commitsRepository/index.ts @@ -71,12 +71,9 @@ export class CommitsRepository extends RepositoryLegacy< return Result.error(new NotFoundError('Project ID is required')) } - const headCommit = await this.getHeadCommit(projectId).then((r) => - r.unwrap(), - ) - if (!headCommit) { + const headCommit = await this.getHeadCommit(projectId) + if (!headCommit) return Result.error(new NotFoundError('Head commit not found')) - } return Result.ok(headCommit) } diff --git a/packages/core/src/repositories/commitsRepository/utils/getHeadCommit.ts b/packages/core/src/repositories/commitsRepository/utils/getHeadCommit.ts index 99feb8849b..d4499e4d96 100644 --- a/packages/core/src/repositories/commitsRepository/utils/getHeadCommit.ts +++ b/packages/core/src/repositories/commitsRepository/utils/getHeadCommit.ts @@ -2,8 +2,8 @@ import { and, desc, eq, isNotNull } from 'drizzle-orm' import { database } from '../../../client' import { InferedReturnType } from '../../../lib/commonTypes' -import { Result } from '../../../lib/Result' import { buildCommitsScope } from './buildCommitsScope' +import { Commit } from '../../../schema/types' export async function getHeadCommitForProject( { @@ -27,5 +27,5 @@ export async function getHeadCommitForProject( .orderBy(desc(commitsScope.mergedAt)) .limit(1) - return Result.ok(result[0]) + return result[0] as Commit | undefined } diff --git a/packages/core/src/services/actions/cloneAgent.ts b/packages/core/src/services/actions/cloneAgent.ts index b3cb8e3ce2..8b35644a1b 100644 --- a/packages/core/src/services/actions/cloneAgent.ts +++ b/packages/core/src/services/actions/cloneAgent.ts @@ -114,11 +114,7 @@ async function getSampleAgent( } const commitsRepository = new CommitsRepository(workspace.id, db) - const gettingco = await commitsRepository.getHeadCommit(project.id) - if (gettingco.error) { - return Result.error(gettingco.error) - } - const commit = gettingco.unwrap() + const commit = await commitsRepository.getHeadCommit(project.id) if (!commit) { return Result.error( new UnprocessableEntityError('Sample Agents commit not found'), diff --git a/packages/core/src/services/copilot/get.ts b/packages/core/src/services/copilot/get.ts index 78e1012f1f..65b352b725 100644 --- a/packages/core/src/services/copilot/get.ts +++ b/packages/core/src/services/copilot/get.ts @@ -34,9 +34,7 @@ export async function getCopilot({ path }: { path: string }, db = database) { } const commitsRepository = new CommitsRepository(workspace.id, db) - const commit = await commitsRepository - .getHeadCommit(env.COPILOT_PROJECT_ID) - .then((r) => r.unwrap()) + const commit = await commitsRepository.getHeadCommit(env.COPILOT_PROJECT_ID) if (!commit) { return Result.error(new Error('Copilot commit not found')) } diff --git a/packages/core/src/services/copilot/latte/helpers.ts b/packages/core/src/services/copilot/latte/helpers.ts index 85d31709cd..332fe80bd6 100644 --- a/packages/core/src/services/copilot/latte/helpers.ts +++ b/packages/core/src/services/copilot/latte/helpers.ts @@ -77,10 +77,7 @@ async function getCommitResult({ }) } - const headCommitResult = await commitScope.getHeadCommit(projectId) - if (!Result.isOk(headCommitResult)) return headCommitResult - const headCommit = headCommitResult.unwrap() - + const headCommit = await commitScope.getHeadCommit(projectId) if (!headCommit) { return Result.error( new NotFoundError('Live commit not found in Latte project'), diff --git a/packages/core/src/services/copilot/latte/tools/triggers/validateTriggerSchema.ts b/packages/core/src/services/copilot/latte/tools/triggers/validateTriggerSchema.ts index 0ff62d52e9..43c0bf0f7f 100644 --- a/packages/core/src/services/copilot/latte/tools/triggers/validateTriggerSchema.ts +++ b/packages/core/src/services/copilot/latte/tools/triggers/validateTriggerSchema.ts @@ -86,10 +86,7 @@ const validateDocumentReadyForCreatingTrigger = async ({ promptUuid: string }): PromisedResult => { const commitsScope = new CommitsRepository(workspaceId) - const headCommit = await commitsScope - .getHeadCommit(projectId) - .then((r) => r.unwrap()) - + const headCommit = await commitsScope.getHeadCommit(projectId) if ( headCommit !== undefined && (versionUuid === headCommit.uuid || versionUuid === HEAD_COMMIT) @@ -111,11 +108,10 @@ const validateDocumentReadyForCreatingTrigger = async ({ .then((r) => r.unwrap()) const document = documents.find((doc) => doc.documentUuid === promptUuid) - if (!document) { return Result.error( new NotFoundError( - `Document with UUID ${promptUuid} not found in commit ${headCommit.uuid}.`, + `Document with UUID ${promptUuid} not found in commit ${commit?.uuid ?? headCommit?.uuid}.`, ), ) } diff --git a/packages/core/src/services/documentTriggers/delete.ts b/packages/core/src/services/documentTriggers/delete.ts index bf7f497e26..2b436ba92e 100644 --- a/packages/core/src/services/documentTriggers/delete.ts +++ b/packages/core/src/services/documentTriggers/delete.ts @@ -33,11 +33,8 @@ async function getLiveDocumentTrigger( ): PromisedResult | undefined> { return transaction.call(async (tx) => { const commitsScope = new CommitsRepository(workspace.id, tx) - const liveCommitResult = await commitsScope.getHeadCommit(projectId) - if (!Result.isOk(liveCommitResult) || !liveCommitResult.value) { - return Result.ok(undefined) - } - const liveCommit = liveCommitResult.unwrap() + const liveCommit = await commitsScope.getHeadCommit(projectId) + if (!liveCommit) return Result.ok(undefined) const triggersScope = new DocumentTriggersRepository(workspace.id, tx) const liveTriggerResult = await triggersScope.getTriggerByUuid({ diff --git a/packages/core/src/services/documentTriggers/enable.ts b/packages/core/src/services/documentTriggers/enable.ts index e0c3cace7a..40399689bb 100644 --- a/packages/core/src/services/documentTriggers/enable.ts +++ b/packages/core/src/services/documentTriggers/enable.ts @@ -29,10 +29,7 @@ export async function setDocumentTriggerEnabled( ): PromisedResult> { return await transaction.call(async (tx) => { const commitsScope = new CommitsRepository(workspace.id, tx) - const liveCommitResult = await commitsScope.getHeadCommit(commit.projectId) - if (!Result.isOk(liveCommitResult)) return liveCommitResult - const liveCommit = liveCommitResult.unwrap() - + const liveCommit = await commitsScope.getHeadCommit(commit.projectId) if (commit.uuid !== liveCommit?.uuid) { return Result.error( new BadRequestError( diff --git a/packages/core/src/services/documentTriggers/handleMerge.ts b/packages/core/src/services/documentTriggers/handleMerge.ts index d5fadcd118..a79b3c8727 100644 --- a/packages/core/src/services/documentTriggers/handleMerge.ts +++ b/packages/core/src/services/documentTriggers/handleMerge.ts @@ -32,11 +32,7 @@ export async function handleTriggerMerge( const triggersScope = new DocumentTriggersRepository(workspace.id, tx) const commitsScope = new CommitsRepository(workspace.id, tx) - const liveCommitResult = await commitsScope.getHeadCommit(draft.projectId) - if (!Result.isOk(liveCommitResult)) return liveCommitResult - - const liveCommit = liveCommitResult.unwrap() - + const liveCommit = await commitsScope.getHeadCommit(draft.projectId) const triggerUpdatesResult = await triggersScope.getTriggerUpdatesInDraft(draft) if (!Result.isOk(triggerUpdatesResult)) return triggerUpdatesResult diff --git a/packages/core/src/services/documentTriggers/handlers/email/registerEvent.ts b/packages/core/src/services/documentTriggers/handlers/email/registerEvent.ts index 31edd842e0..a039883f97 100644 --- a/packages/core/src/services/documentTriggers/handlers/email/registerEvent.ts +++ b/packages/core/src/services/documentTriggers/handlers/email/registerEvent.ts @@ -133,9 +133,7 @@ export async function registerEmailTriggerEvent( const uploadedFiles = uploadResult.unwrap() const commitsScope = new CommitsRepository(workspace.id, db) - const headCommitResult = await commitsScope.getHeadCommit(project.id) - if (headCommitResult.error) return Result.nil() - const headCommit = headCommitResult.unwrap() + const headCommit = await commitsScope.getHeadCommit(project.id) // TODO: Search the Live and all draft versions for each trigger, not just the Live one if (!headCommit) return Result.nil() diff --git a/packages/core/src/services/documentTriggers/handlers/scheduled/registerEvents.ts b/packages/core/src/services/documentTriggers/handlers/scheduled/registerEvents.ts index 11cc92d0dc..815172dd6c 100644 --- a/packages/core/src/services/documentTriggers/handlers/scheduled/registerEvents.ts +++ b/packages/core/src/services/documentTriggers/handlers/scheduled/registerEvents.ts @@ -98,11 +98,9 @@ async function registerSingleScheduledTriggerEvent( // However, the trigger's associated commit may not be the Live commit, // but rather just the last merged commit where it has been updated. // Thus, we need to find the Live commit - const liveCommitResult = await commitsScope.getHeadCommit( + const liveCommit = await commitsScope.getHeadCommit( documentTrigger.projectId, ) - if (!Result.isOk(liveCommitResult)) return liveCommitResult - const liveCommit = liveCommitResult.unwrap() eventCommit = liveCommit! } diff --git a/packages/core/src/services/documentTriggers/helpers/getCommitFromTrigger.ts b/packages/core/src/services/documentTriggers/helpers/getCommitFromTrigger.ts index e0ba503d5f..9d20385507 100644 --- a/packages/core/src/services/documentTriggers/helpers/getCommitFromTrigger.ts +++ b/packages/core/src/services/documentTriggers/helpers/getCommitFromTrigger.ts @@ -23,12 +23,9 @@ export async function getCommitFromTrigger( } // Commit is merged. This means that the latest commit active for this trigger is Live - const liveCommitResult = await commitsScope.getHeadCommit( + const liveCommit = await commitsScope.getHeadCommit( documentTrigger.projectId, ) - if (!Result.isOk(liveCommitResult)) return liveCommitResult - const liveCommit = liveCommitResult.unwrap() - if (!liveCommit) { return Result.error( new NotFoundError( diff --git a/packages/core/src/services/documents/recomputeChanges/getHeadDocumentsAndDraftDocuments.ts b/packages/core/src/services/documents/recomputeChanges/getHeadDocumentsAndDraftDocuments.ts index f495026704..b83df4bfa2 100644 --- a/packages/core/src/services/documents/recomputeChanges/getHeadDocumentsAndDraftDocuments.ts +++ b/packages/core/src/services/documents/recomputeChanges/getHeadDocumentsAndDraftDocuments.ts @@ -38,7 +38,7 @@ async function getDocumentsAtCommit( const headCommit = await getHeadCommitForProject( { projectId: projectResult.value.id, commitsScope }, tx, - ).then((r) => r.unwrap()) + ) const docsScope = new DocumentVersionsRepository(workspaceId, tx) const headDocumentsResult = await docsScope.getDocumentsAtCommit(headCommit) diff --git a/packages/core/src/services/documents/update.test.ts b/packages/core/src/services/documents/update.test.ts index 2843771442..12b4cfd916 100644 --- a/packages/core/src/services/documents/update.test.ts +++ b/packages/core/src/services/documents/update.test.ts @@ -7,6 +7,7 @@ import { } from '../../repositories' import { recomputeChanges } from './recomputeChanges' import { updateDocument } from './update' +import { NotFoundError } from '@latitude-data/constants/errors' describe('updateDocument', () => { it('modifies a document that was created in a previous commit', async (ctx) => { @@ -295,9 +296,8 @@ describe('updateDocument', () => { }) const commitsScope = new CommitsRepository(project.workspaceId) - const commit = await commitsScope - .getHeadCommit(project.id) - .then((r) => r.unwrap()) + const commit = await commitsScope.getHeadCommit(project.id) + if (!commit) throw new NotFoundError('Head commit not found') const fooDoc = documents.find((d) => d.path === 'foo')! const result = await updateDocument({ diff --git a/packages/core/src/services/history/resetDocumentToVersion.ts b/packages/core/src/services/history/resetDocumentToVersion.ts index 9131be7d85..95e8d46dc9 100644 --- a/packages/core/src/services/history/resetDocumentToVersion.ts +++ b/packages/core/src/services/history/resetDocumentToVersion.ts @@ -1,5 +1,6 @@ import { Commit, Project, User, Workspace } from '../../schema/types' import { DraftChange } from '../../constants' +import { NotFoundError } from '@latitude-data/constants/errors' import { Result } from '../../lib/Result' import { PromisedResult } from '../../lib/Transaction' import { @@ -34,9 +35,9 @@ async function fetchDocumentVersionDetails({ .then((r) => r.value) const commitScope = new CommitsRepository(workspace.id) - const headCommit = await commitScope - .getHeadCommit(project.id) - .then((r) => r.unwrap()!) + const headCommit = await commitScope.getHeadCommit(project.id) + if (!headCommit) + return Result.error(new NotFoundError('Head commit not found')) const targetCommit = targetDraftUuid ? await commitScope diff --git a/packages/core/src/services/history/resetProjectToCommit.ts b/packages/core/src/services/history/resetProjectToCommit.ts index c848e92ea4..49bafc022c 100644 --- a/packages/core/src/services/history/resetProjectToCommit.ts +++ b/packages/core/src/services/history/resetProjectToCommit.ts @@ -1,5 +1,6 @@ import { Commit, Project, User, Workspace } from '../../schema/types' import { DraftChange } from '../../constants' +import { NotFoundError } from '@latitude-data/constants/errors' import { database } from '../../client' import { Result } from '../../lib/Result' import { PromisedResult } from '../../lib/Transaction' @@ -25,9 +26,9 @@ async function fetchCommitDetails({ try { const commitScope = new CommitsRepository(workspace.id) - const headCommit = await commitScope - .getHeadCommit(project.id) - .then((r) => r.unwrap()!) + const headCommit = await commitScope.getHeadCommit(project.id) + if (!headCommit) + return Result.error(new NotFoundError('Head commit not found')) const targetCommit = targetDraftUuid ? await commitScope diff --git a/packages/core/src/services/history/revertCommit.ts b/packages/core/src/services/history/revertCommit.ts index c2d44624af..4f1b4c7674 100644 --- a/packages/core/src/services/history/revertCommit.ts +++ b/packages/core/src/services/history/revertCommit.ts @@ -1,5 +1,6 @@ import { Commit, Project, User, Workspace } from '../../schema/types' import { DraftChange } from '../../constants' +import { NotFoundError } from '@latitude-data/constants/errors' import { Result } from '../../lib/Result' import Transaction, { PromisedResult } from '../../lib/Transaction' import { @@ -23,9 +24,9 @@ async function fetchCommitReversionDetails({ }) { try { const commitScope = new CommitsRepository(workspace.id) - const headCommit = await commitScope - .getHeadCommit(project.id) - .then((r) => r.unwrap()!) + const headCommit = await commitScope.getHeadCommit(project.id) + if (!headCommit) + return Result.error(new NotFoundError('Head commit not found')) const targetDraft = targetDraftUuid ? await commitScope diff --git a/packages/core/src/services/history/revertDocumentVersion.ts b/packages/core/src/services/history/revertDocumentVersion.ts index ea9667674f..7e9c5530c7 100644 --- a/packages/core/src/services/history/revertDocumentVersion.ts +++ b/packages/core/src/services/history/revertDocumentVersion.ts @@ -1,5 +1,6 @@ import { Commit, Project, User, Workspace } from '../../schema/types' import { DraftChange } from '../../constants' +import { NotFoundError } from '@latitude-data/constants/errors' import { Result } from '../../lib/Result' import { PromisedResult } from '../../lib/Transaction' import { @@ -24,9 +25,9 @@ async function fetchDocumentReversionDetails({ }) { try { const commitScope = new CommitsRepository(workspace.id) - const headCommit = await commitScope - .getHeadCommit(project.id) - .then((r) => r.unwrap()!) + const headCommit = await commitScope.getHeadCommit(project.id) + if (!headCommit) + return Result.error(new NotFoundError('Head commit not found')) const targetDraft = targetDraftUuid ? await commitScope diff --git a/packages/core/src/services/publishedDocuments/create.ts b/packages/core/src/services/publishedDocuments/create.ts index 113cd6b4b9..23ab108e0d 100644 --- a/packages/core/src/services/publishedDocuments/create.ts +++ b/packages/core/src/services/publishedDocuments/create.ts @@ -29,10 +29,7 @@ export async function createPublishedDocument( transaction = new Transaction(), ) { const commitRepo = new CommitsRepository(workspace.id) - const liveCommit = await commitRepo - .getHeadCommit(project.id) - .then((r) => r.unwrap()) - + const liveCommit = await commitRepo.getHeadCommit(project.id) if (!liveCommit) { return Result.error( new UnprocessableEntityError('Project has no commits.', { diff --git a/packages/core/src/services/publishedDocuments/findSharedDocument.ts b/packages/core/src/services/publishedDocuments/findSharedDocument.ts index 23dfa261f8..33fbca4ab5 100644 --- a/packages/core/src/services/publishedDocuments/findSharedDocument.ts +++ b/packages/core/src/services/publishedDocuments/findSharedDocument.ts @@ -56,10 +56,7 @@ export async function findSharedDocument( if (!workspace) return NotFound const commitsRepo = new CommitsRepository(shared.workspaceId, db) - const commitResult = await commitsRepo.getHeadCommit(shared.projectId) - - if (commitResult.error) return NotFound - const commit = commitResult.value + const commit = await commitsRepo.getHeadCommit(shared.projectId) if (!commit) return NotFound const repo = new DocumentVersionsRepository(shared.workspaceId, db)