feat: implement Sonner notifications, add Setting model, and reorganize user management into settings navigation.

This commit is contained in:
Firman Ramdhani
2026-09-11 11:39:43 +07:00
parent f4358eb00b
commit d1ed8f803b
15 changed files with 460 additions and 64 deletions
+61
View File
@@ -723,3 +723,64 @@ export async function deleteSubmission(submission_id: string, user_id: string) {
return { success: false, error: 'Gagal membatalkan pesanan' };
}
}
// --- SETTINGS ACTIONS ---
export async function getSettings() {
const settings = await prisma.setting.findMany()
const obj: Record<string, string> = {}
settings.forEach(s => {
obj[s.key] = s.value
})
return obj
}
export async function updateSettings(settings: Record<string, string>) {
try {
for (const key of Object.keys(settings)) {
await prisma.setting.upsert({
where: { key },
update: { value: settings[key] },
create: { key, value: settings[key] }
})
}
return { success: true }
} catch (error) {
console.error(error)
return { success: false, error: 'Gagal update settings' }
}
}
// --- BROADCAST ACTIONS ---
export async function broadcastToMattermost(orderId: string, orderUrl: string) {
try {
const order = await prisma.order.findUnique({
where: { id: orderId }
})
if (!order) return { success: false, error: 'Order not found' }
const settings = await getSettings()
const webhookUrl = settings.MATTERMOST_WEBHOOK_URL
let template = settings.MATTERMOST_TEMPLATE || 'Halo tim! Lagi ada orderan open nih untuk {title}. Mumpung belum di-checkout, yang mau ikutan nitip bisa langsung cek ke sini ya: {url}'
if (!webhookUrl) return { success: false, error: 'Webhook URL belum di-setting' }
const message = template.replace('{title}', order.title).replace('{url}', orderUrl)
const res = await fetch(webhookUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text: message })
})
if (!res.ok) {
throw new Error(`Mattermost API Error: ${res.statusText}`)
}
return { success: true }
} catch (error) {
console.error(error)
return { success: false, error: 'Gagal mengirim ke Mattermost' }
}
}