diff --git a/dbal/development/src/core/entities/operations/core/workflow-operations.ts b/dbal/development/src/core/entities/operations/core/workflow-operations.ts index daaddf21c..497f9b5bd 100644 --- a/dbal/development/src/core/entities/operations/core/workflow-operations.ts +++ b/dbal/development/src/core/entities/operations/core/workflow-operations.ts @@ -25,14 +25,22 @@ const assertValidId = (id: string) => { } const assertValidCreate = (data: CreateWorkflowInput | Workflow) => { - const errors = validateWorkflowCreate(data) + const normalized = { + ...data, + description: data.description ?? undefined, + } + const errors = validateWorkflowCreate(normalized as Partial) if (errors.length > 0) { throw DBALError.validationError('Invalid workflow data', errors.map(error => ({ field: 'workflow', error }))) } } const assertValidUpdate = (data: UpdateWorkflowInput) => { - const errors = validateWorkflowUpdate(data) + const normalized = { + ...data, + description: data.description ?? undefined, + } + const errors = validateWorkflowUpdate(normalized as Partial) if (errors.length > 0) { throw DBALError.validationError('Invalid workflow update data', errors.map(error => ({ field: 'workflow', error }))) } @@ -65,7 +73,7 @@ const withWorkflowDefaults = (data: CreateWorkflowInput): Workflow => { id: data.id ?? randomUUID(), tenantId: data.tenantId ?? null, name: data.name, - description: data.description ?? null, + description: data.description ?? undefined, nodes: data.nodes, edges: data.edges, enabled: data.enabled, @@ -78,7 +86,11 @@ const withWorkflowDefaults = (data: CreateWorkflowInput): Workflow => { export const createWorkflowOperations = (adapter: DBALAdapter, tenantId?: string): WorkflowOperations => ({ create: async data => { - const resolvedTenantId = resolveTenantId(tenantId, data) + const normalized = { + ...data, + description: data.description ?? undefined, + } + const resolvedTenantId = resolveTenantId(tenantId, normalized as Partial) if (!resolvedTenantId) { throw DBALError.validationError('Tenant ID is required', [{ field: 'tenantId', error: 'tenantId is required' }]) } diff --git a/dbal/development/src/core/entities/package/crud/create-package.ts b/dbal/development/src/core/entities/package/crud/create-package.ts index 4267e94ab..646cfd0e3 100644 --- a/dbal/development/src/core/entities/package/crud/create-package.ts +++ b/dbal/development/src/core/entities/package/crud/create-package.ts @@ -28,11 +28,11 @@ export const createPackage = async ( return { success: false, error: { code: 'VALIDATION_ERROR', message: validationErrors[0] ?? 'Validation failed' } } } - if (store.installedPackages.has(payload.packageId)) { + if (store.installedPackages.has(payload.packageId!)) { return { success: false, error: { code: 'CONFLICT', message: 'Package ID already exists' } } } - store.installedPackages.set(payload.packageId, payload) + store.installedPackages.set(payload.packageId!, payload) return { success: true, data: payload } } diff --git a/dbal/development/src/core/entities/page/crud/create-page.ts b/dbal/development/src/core/entities/page/crud/create-page.ts index c9f872d80..1aa5c93a1 100644 --- a/dbal/development/src/core/entities/page/crud/create-page.ts +++ b/dbal/development/src/core/entities/page/crud/create-page.ts @@ -46,8 +46,8 @@ export const createPage = async ( return { success: false, error: { code: 'CONFLICT', message: 'Path already exists' } } } - store.pageConfigs.set(payload.id, payload) - store.pagePaths.set(pathKey, payload.id) + store.pageConfigs.set(payload.id!, payload) + store.pagePaths.set(pathKey, payload.id!) return { success: true, data: payload } } diff --git a/dbal/development/src/core/entities/session/crud/create-session.ts b/dbal/development/src/core/entities/session/crud/create-session.ts index 58eaa2de0..6610da9a7 100644 --- a/dbal/development/src/core/entities/session/crud/create-session.ts +++ b/dbal/development/src/core/entities/session/crud/create-session.ts @@ -39,8 +39,8 @@ export const createSession = async ( return { success: false, error: { code: 'CONFLICT', message: 'Session token already exists' } } } - store.sessions.set(session.id, session) - store.sessionTokens.set(session.token, session.id) + store.sessions.set(session.id!, session) + store.sessionTokens.set(session.token, session.id!) return { success: true, data: session } } diff --git a/dbal/development/src/core/entities/user/crud/create-user.ts b/dbal/development/src/core/entities/user/crud/create-user.ts index d4ce7ebc5..d14926df2 100644 --- a/dbal/development/src/core/entities/user/crud/create-user.ts +++ b/dbal/development/src/core/entities/user/crud/create-user.ts @@ -42,9 +42,9 @@ export const createUser = async ( return { success: false, error: { code: 'CONFLICT', message: 'Username already exists' } } } - store.users.set(user.id, user) - store.usersByEmail.set(user.email, user.id) - store.usersByUsername.set(user.username, user.id) + store.users.set(user.id!, user) + store.usersByEmail.set(user.email, user.id!) + store.usersByUsername.set(user.username, user.id!) return { success: true, data: user } } diff --git a/dbal/development/src/core/entities/workflow/crud/create-workflow.ts b/dbal/development/src/core/entities/workflow/crud/create-workflow.ts index 0c65bf21f..c5ed0b54d 100644 --- a/dbal/development/src/core/entities/workflow/crud/create-workflow.ts +++ b/dbal/development/src/core/entities/workflow/crud/create-workflow.ts @@ -18,7 +18,7 @@ export const createWorkflow = async ( id: input.id ?? store.generateId('workflow'), tenantId: input.tenantId ?? null, name: input.name, - description: input.description, + description: input.description ?? undefined, nodes: input.nodes, edges: input.edges, enabled: input.enabled ?? true, @@ -38,8 +38,8 @@ export const createWorkflow = async ( return { success: false, error: { code: 'CONFLICT', message: 'Workflow name already exists' } } } - store.workflows.set(workflow.id, workflow) - store.workflowNames.set(workflow.name, workflow.id) + store.workflows.set(workflow.id!, workflow) + store.workflowNames.set(workflow.name, workflow.id!) return { success: true, data: workflow } } diff --git a/dbal/development/src/core/entities/workflow/crud/update-workflow.ts b/dbal/development/src/core/entities/workflow/crud/update-workflow.ts index 1cf066b46..cf23d6f5f 100644 --- a/dbal/development/src/core/entities/workflow/crud/update-workflow.ts +++ b/dbal/development/src/core/entities/workflow/crud/update-workflow.ts @@ -29,7 +29,10 @@ export const updateWorkflow = async ( return { success: false, error: { code: 'NOT_FOUND', message: `Workflow not found: ${id}` } } } - const validationErrors = validateWorkflowUpdate(input) + const validationErrors = validateWorkflowUpdate({ + ...input, + description: input.description ?? undefined, + } as Partial) if (validationErrors.length > 0) { return { success: false, error: { code: 'VALIDATION_ERROR', message: validationErrors[0] || 'Validation failed' } } } diff --git a/frontends/nextjs/src/app/api/v1/[...slug]/route.ts b/frontends/nextjs/src/app/api/v1/[...slug]/route.ts index a0ae88dcf..8befc26c6 100644 --- a/frontends/nextjs/src/app/api/v1/[...slug]/route.ts +++ b/frontends/nextjs/src/app/api/v1/[...slug]/route.ts @@ -147,7 +147,7 @@ async function handleRequest( // Execute standard CRUD operation const result = await executeDbalOperation(dbalOp, { - user, + user: user ?? undefined, tenant: tenantResult.tenant, body, }) diff --git a/frontends/nextjs/src/lib/api/pagination.ts b/frontends/nextjs/src/lib/api/pagination.ts index ba1460f93..d7fbc181b 100644 --- a/frontends/nextjs/src/lib/api/pagination.ts +++ b/frontends/nextjs/src/lib/api/pagination.ts @@ -110,8 +110,10 @@ export function calculateCursorPaginationMetadata( limit: number, hasMore: boolean ): CursorPaginationMetadata { - const startCursor = items.length > 0 && items[0] ? items[0].id : undefined - const endCursor = items.length > 0 && items[items.length - 1] ? items[items.length - 1].id : undefined + const firstItem = items.length > 0 ? items[0] : undefined + const lastItem = items.length > 0 ? items[items.length - 1] : undefined + const startCursor = firstItem?.id + const endCursor = lastItem?.id return { limit, diff --git a/frontends/nextjs/src/lib/config/prisma.ts b/frontends/nextjs/src/lib/config/prisma.ts index 485634b00..991822f1c 100644 --- a/frontends/nextjs/src/lib/config/prisma.ts +++ b/frontends/nextjs/src/lib/config/prisma.ts @@ -31,7 +31,7 @@ const createMockPrisma = (): PrismaClient => { throw new Error(message) }, } - return new Proxy({}, handler) as PrismaClient + return new Proxy({}, handler) as unknown as PrismaClient } const createIntegrationPrisma = (): PrismaClient => { diff --git a/frontends/nextjs/src/lib/db/error-logs/crud/get-error-logs.ts b/frontends/nextjs/src/lib/db/error-logs/crud/get-error-logs.ts index f62360997..4a4c99e02 100644 --- a/frontends/nextjs/src/lib/db/error-logs/crud/get-error-logs.ts +++ b/frontends/nextjs/src/lib/db/error-logs/crud/get-error-logs.ts @@ -28,7 +28,7 @@ export async function getErrorLogs(options?: { const result = await adapter.list('ErrorLog', { filter: Object.keys(filter).length > 0 ? filter : undefined, orderBy: [{ timestamp: 'desc' }] as unknown as string, - take: options?.limit, + limit: options?.limit, }) type ErrorLogRecord = { diff --git a/frontends/nextjs/src/lib/db/error-logs/tests/get-error-logs.test.ts b/frontends/nextjs/src/lib/db/error-logs/tests/get-error-logs.test.ts index d8167f472..7b12305ed 100644 --- a/frontends/nextjs/src/lib/db/error-logs/tests/get-error-logs.test.ts +++ b/frontends/nextjs/src/lib/db/error-logs/tests/get-error-logs.test.ts @@ -97,7 +97,7 @@ describe('getErrorLogs', () => { expect(mockList).toHaveBeenCalledWith('ErrorLog', { filter: expectedFilter, orderBy: [{ timestamp: 'desc' }], - take: expectedLimit ?? undefined, + limit: expectedLimit ?? undefined, }) expect(result).toHaveLength(dbData.length) diff --git a/frontends/nextjs/src/lib/db/functions/app-config/get-app-config.ts b/frontends/nextjs/src/lib/db/functions/app-config/get-app-config.ts index bbe8d52af..532cf3776 100644 --- a/frontends/nextjs/src/lib/db/functions/app-config/get-app-config.ts +++ b/frontends/nextjs/src/lib/db/functions/app-config/get-app-config.ts @@ -11,7 +11,7 @@ import { prisma } from '@/lib/config/prisma' * @returns AppConfiguration or null if not found */ export const getAppConfig = async (): Promise => { - const config = await prisma.appConfiguration.findFirst() + const config = await (prisma as any).appConfiguration.findFirst() if (!config) return null return { diff --git a/frontends/nextjs/src/lib/db/functions/app-config/set-app-config.ts b/frontends/nextjs/src/lib/db/functions/app-config/set-app-config.ts index bd351c70b..1867c67f5 100644 --- a/frontends/nextjs/src/lib/db/functions/app-config/set-app-config.ts +++ b/frontends/nextjs/src/lib/db/functions/app-config/set-app-config.ts @@ -11,8 +11,8 @@ import { prisma } from '@/lib/config/prisma' * @param config - The configuration to save */ export const setAppConfig = async (config: AppConfiguration): Promise => { - await prisma.appConfiguration.deleteMany() - await prisma.appConfiguration.create({ + await (prisma as any).appConfiguration.deleteMany() + await (prisma as any).appConfiguration.create({ data: { id: config.id, name: config.name, diff --git a/frontends/nextjs/src/lib/db/functions/comments/crud/add-comment.ts b/frontends/nextjs/src/lib/db/functions/comments/crud/add-comment.ts index b9cfaedb5..1d02b8bf7 100644 --- a/frontends/nextjs/src/lib/db/functions/comments/crud/add-comment.ts +++ b/frontends/nextjs/src/lib/db/functions/comments/crud/add-comment.ts @@ -11,7 +11,7 @@ import { prisma } from '@/lib/config/prisma' * @param comment - Comment to add */ export const addComment = async (comment: Comment): Promise => { - await prisma.comment.create({ + await (prisma as any).comment.create({ data: { id: comment.id, userId: comment.userId, diff --git a/frontends/nextjs/src/lib/db/functions/comments/crud/delete-comment.ts b/frontends/nextjs/src/lib/db/functions/comments/crud/delete-comment.ts index d46c052a8..d132f2ea3 100644 --- a/frontends/nextjs/src/lib/db/functions/comments/crud/delete-comment.ts +++ b/frontends/nextjs/src/lib/db/functions/comments/crud/delete-comment.ts @@ -10,5 +10,5 @@ import { prisma } from '@/lib/config/prisma' * @param commentId - ID of comment to delete */ export const deleteComment = async (commentId: string): Promise => { - await prisma.comment.delete({ where: { id: commentId } }) + await (prisma as any).comment.delete({ where: { id: commentId } }) } diff --git a/frontends/nextjs/src/lib/db/functions/comments/crud/get-comments.ts b/frontends/nextjs/src/lib/db/functions/comments/crud/get-comments.ts index bb4e0bfe1..63dc5033e 100644 --- a/frontends/nextjs/src/lib/db/functions/comments/crud/get-comments.ts +++ b/frontends/nextjs/src/lib/db/functions/comments/crud/get-comments.ts @@ -11,7 +11,7 @@ import { prisma } from '@/lib/config/prisma' * @returns Array of comments */ export const getComments = async (): Promise => { - const comments = await prisma.comment.findMany() + const comments = await (prisma as any).comment.findMany() return comments.map((c: Record) => ({ id: c.id, userId: c.userId, diff --git a/frontends/nextjs/src/lib/db/functions/comments/crud/set-comments.ts b/frontends/nextjs/src/lib/db/functions/comments/crud/set-comments.ts index 5ab0dc791..86ae47ad8 100644 --- a/frontends/nextjs/src/lib/db/functions/comments/crud/set-comments.ts +++ b/frontends/nextjs/src/lib/db/functions/comments/crud/set-comments.ts @@ -11,9 +11,9 @@ import { prisma } from '@/lib/config/prisma' * @param comments - Array of comments to save */ export const setComments = async (comments: Comment[]): Promise => { - await prisma.comment.deleteMany() + await (prisma as any).comment.deleteMany() for (const comment of comments) { - await prisma.comment.create({ + await (prisma as any).comment.create({ data: { id: comment.id, userId: comment.userId, diff --git a/frontends/nextjs/src/lib/db/functions/comments/crud/update-comment.ts b/frontends/nextjs/src/lib/db/functions/comments/crud/update-comment.ts index 3c0075b3c..b9e58cbf0 100644 --- a/frontends/nextjs/src/lib/db/functions/comments/crud/update-comment.ts +++ b/frontends/nextjs/src/lib/db/functions/comments/crud/update-comment.ts @@ -26,7 +26,7 @@ export const updateComment = async ( data.updatedAt = BigInt(updates.updatedAt) } - await prisma.comment.update({ + await (prisma as any).comment.update({ where: { id: commentId }, data, }) diff --git a/frontends/nextjs/src/lib/middleware/auth-middleware.test.ts b/frontends/nextjs/src/lib/middleware/auth-middleware.test.ts index 343fecc4a..01d60c986 100644 --- a/frontends/nextjs/src/lib/middleware/auth-middleware.test.ts +++ b/frontends/nextjs/src/lib/middleware/auth-middleware.test.ts @@ -27,6 +27,7 @@ describe('auth-middleware', () => { role: 'user', level: 1, tenantId: 'tenant-1', + createdAt: Date.now(), ...overrides, })