revalidatePath was causing the server component to re-render and potentially remount the client component, resetting all useState values. Since the client component already updates its local state optimistically after save, revalidatePath is unnecessary here. Also uninstalls agentation. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
65 lines
1.6 KiB
TypeScript
65 lines
1.6 KiB
TypeScript
'use server'
|
|
|
|
import prisma from '@/lib/prisma'
|
|
import { auth } from '@/auth'
|
|
import { sendEmail } from '@/lib/mail'
|
|
|
|
async function checkAdmin() {
|
|
const session = await auth()
|
|
if (!session?.user?.id || (session.user as any).role !== 'ADMIN') {
|
|
throw new Error('Unauthorized: Admin access required')
|
|
}
|
|
return session
|
|
}
|
|
|
|
export async function testSMTP() {
|
|
const session = await checkAdmin()
|
|
const email = session.user?.email
|
|
|
|
if (!email) throw new Error("No admin email found")
|
|
|
|
const result = await sendEmail({
|
|
to: email,
|
|
subject: "Memento SMTP Test",
|
|
html: "<p>This is a test email from your Memento instance. <strong>SMTP is working!</strong></p>"
|
|
})
|
|
|
|
return result
|
|
}
|
|
|
|
export async function getSystemConfig() {
|
|
await checkAdmin()
|
|
const configs = await prisma.systemConfig.findMany()
|
|
return configs.reduce((acc, conf) => {
|
|
acc[conf.key] = conf.value
|
|
return acc
|
|
}, {} as Record<string, string>)
|
|
}
|
|
|
|
export async function updateSystemConfig(data: Record<string, string>) {
|
|
await checkAdmin()
|
|
|
|
try {
|
|
// Filter out empty values but keep 'false' as valid
|
|
const filteredData = Object.fromEntries(
|
|
Object.entries(data).filter(([key, value]) => value !== '' && value !== null && value !== undefined)
|
|
)
|
|
|
|
|
|
|
|
const operations = Object.entries(filteredData).map(([key, value]) =>
|
|
prisma.systemConfig.upsert({
|
|
where: { key },
|
|
update: { value },
|
|
create: { key, value }
|
|
})
|
|
)
|
|
|
|
await prisma.$transaction(operations)
|
|
return { success: true }
|
|
} catch (error) {
|
|
console.error('Failed to update settings:', error)
|
|
return { error: 'Failed to update settings' }
|
|
}
|
|
}
|