diff --git a/frontends/nextjs/src/app/api/packages/data/[packageId]/handlers/delete-package-data.ts b/frontends/nextjs/src/app/api/packages/data/[packageId]/handlers/delete-package-data.ts new file mode 100644 index 000000000..8b2f9f3a3 --- /dev/null +++ b/frontends/nextjs/src/app/api/packages/data/[packageId]/handlers/delete-package-data.ts @@ -0,0 +1,25 @@ +import { NextResponse } from 'next/server' +import type { NextRequest } from 'next/server' +import { deletePackageData } from '@/lib/db/packages/delete-package-data' + +interface RouteParams { + params: { + packageId: string + } +} + +export async function DELETE(_request: NextRequest, { params }: RouteParams) { + try { + await deletePackageData(params.packageId) + return NextResponse.json({ deleted: true }) + } catch (error) { + console.error('Error deleting package data:', error) + return NextResponse.json( + { + error: 'Failed to delete package data', + details: error instanceof Error ? error.message : 'Unknown error', + }, + { status: 500 } + ) + } +} diff --git a/frontends/nextjs/src/lib/db/auth/authenticate-user.ts b/frontends/nextjs/src/lib/db/auth/authenticate-user.ts index 69097472b..da5c26fce 100644 --- a/frontends/nextjs/src/lib/db/auth/authenticate-user.ts +++ b/frontends/nextjs/src/lib/db/auth/authenticate-user.ts @@ -1,6 +1,8 @@ import { getAdapter } from '../dbal-client' import { verifyPassword } from '../verify-password' import type { User } from '../../types/level-types' +import { mapUserRecord } from '../users/map-user-record' +import { getUserFirstLoginFlag } from '../users/get-user-first-login-flag' export interface AuthenticateResult { success: boolean @@ -36,37 +38,18 @@ export const authenticateUser = async ( return { success: false, user: null, error: 'invalid_credentials' } } - // Fetch user data - const userResult = await adapter.list('User', { - filter: { username }, + const userRecord = await adapter.findFirst('User', { + where: { username }, }) - if (userResult.data.length === 0) { + if (!userRecord) { return { success: false, user: null, error: 'user_not_found' } } - const userData = userResult.data[0] as Record - - const user: User = { - id: String(userData.id), - username: String(userData.username), - email: String(userData.email), - role: userData.role as User['role'], - profilePicture: userData.profilePicture ? String(userData.profilePicture) : undefined, - bio: userData.bio ? String(userData.bio) : undefined, - createdAt: Number(userData.createdAt), - tenantId: userData.tenantId ? String(userData.tenantId) : undefined, - isInstanceOwner: Boolean(userData.isInstanceOwner), - } - - // Check first login flag - const firstLoginResult = await adapter.findFirst('GodCredentialExpiry', { - where: { settingKey: `first_login_${username}` }, - }) - - const requiresPasswordChange = firstLoginResult - ? (firstLoginResult as { value: string }).value === 'true' - : false + const user = mapUserRecord(userRecord as Record) + const requiresPasswordChange = getUserFirstLoginFlag( + userRecord as Record + ) return { success: true, user, requiresPasswordChange } } diff --git a/frontends/nextjs/src/lib/db/god-credentials/get-first-login-flags.ts b/frontends/nextjs/src/lib/db/god-credentials/get-first-login-flags.ts index 7dbd2e659..1d6b90ea3 100644 --- a/frontends/nextjs/src/lib/db/god-credentials/get-first-login-flags.ts +++ b/frontends/nextjs/src/lib/db/god-credentials/get-first-login-flags.ts @@ -1,4 +1,5 @@ import { getAdapter } from '../dbal-client' +import { getUserFirstLoginFlag } from '../users/get-user-first-login-flag' /** * Get first login flags for all users @@ -9,7 +10,7 @@ export async function getFirstLoginFlags(): Promise> { const users = result.data as any[] const flags: Record = {} for (const user of users) { - flags[user.username] = user.firstLogin ?? true + flags[user.username] = getUserFirstLoginFlag(user) } return flags }