code: nextjs,frontends,user (3 files)

This commit is contained in:
2025-12-26 00:22:48 +00:00
parent 76e7176ab9
commit 6bdcbcf034
3 changed files with 36 additions and 27 deletions

View File

@@ -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 }
)
}
}

View File

@@ -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<string, unknown>
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<string, unknown>)
const requiresPasswordChange = getUserFirstLoginFlag(
userRecord as Record<string, unknown>
)
return { success: true, user, requiresPasswordChange }
}

View File

@@ -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<Record<string, boolean>> {
const users = result.data as any[]
const flags: Record<string, boolean> = {}
for (const user of users) {
flags[user.username] = user.firstLogin ?? true
flags[user.username] = getUserFirstLoginFlag(user)
}
return flags
}