diff --git a/app/api/admin/restore-credentials/route.ts b/app/api/admin/restore-credentials/route.ts index 08e581d1..5d7fc886 100644 --- a/app/api/admin/restore-credentials/route.ts +++ b/app/api/admin/restore-credentials/route.ts @@ -78,37 +78,50 @@ export async function GET(request: Request) { console.log(`Created placeholder user ${userId}`); } - // Upsert credentials in database - await prisma.mailCredentials.upsert({ - where: { userId }, - update: { - email: creds.email, - password: creds.encryptedPassword || 'encrypted_placeholder', - host: creds.host, - port: creds.port, - // Optional fields - ...(creds.secure !== undefined && { secure: creds.secure }), - ...(creds.smtp_host && { smtp_host: creds.smtp_host }), - ...(creds.smtp_port && { smtp_port: creds.smtp_port }), - ...(creds.smtp_secure !== undefined && { smtp_secure: creds.smtp_secure }), - ...(creds.display_name && { display_name: creds.display_name }), - ...(creds.color && { color: creds.color }) - }, - create: { + // Find existing credentials first + const existingCredentials = await prisma.mailCredentials.findFirst({ + where: { userId, - email: creds.email, - password: creds.encryptedPassword || 'encrypted_placeholder', - host: creds.host, - port: creds.port, - // Optional fields - ...(creds.secure !== undefined && { secure: creds.secure }), - ...(creds.smtp_host && { smtp_host: creds.smtp_host }), - ...(creds.smtp_port && { smtp_port: creds.smtp_port }), - ...(creds.smtp_secure !== undefined && { smtp_secure: creds.smtp_secure }), - ...(creds.display_name && { display_name: creds.display_name }), - ...(creds.color && { color: creds.color }) + email: creds.email } }); + + if (existingCredentials) { + // Update existing credentials + await prisma.mailCredentials.update({ + where: { id: existingCredentials.id }, + data: { + password: creds.encryptedPassword || 'encrypted_placeholder', + host: creds.host, + port: creds.port, + // Optional fields + ...(creds.secure !== undefined && { secure: creds.secure }), + ...(creds.smtp_host && { smtp_host: creds.smtp_host }), + ...(creds.smtp_port && { smtp_port: creds.smtp_port }), + ...(creds.smtp_secure !== undefined && { smtp_secure: creds.smtp_secure }), + ...(creds.display_name && { display_name: creds.display_name }), + ...(creds.color && { color: creds.color }) + } + }); + } else { + // Create new credentials + await prisma.mailCredentials.create({ + data: { + userId, + email: creds.email, + password: creds.encryptedPassword || 'encrypted_placeholder', + host: creds.host, + port: creds.port, + // Optional fields + ...(creds.secure !== undefined && { secure: creds.secure }), + ...(creds.smtp_host && { smtp_host: creds.smtp_host }), + ...(creds.smtp_port && { smtp_port: creds.smtp_port }), + ...(creds.smtp_secure !== undefined && { smtp_secure: creds.smtp_secure }), + ...(creds.display_name && { display_name: creds.display_name }), + ...(creds.color && { color: creds.color }) + } + }); + } results.success++; console.log(`Successfully restored credentials for user ${userId}`);