feat: implement Sonner notifications, add Setting model, and reorganize user management into settings navigation.
This commit is contained in:
@@ -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' }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user