Files
Momento/memento-note/app/actions/notifications.ts
Sepehr Ramezani dbd49d6fcb
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 1m25s
feat: 8 AI providers, rich text editor, agent notifications, UI contrast & font settings
- Add DeepSeek, OpenRouter, Mistral, Z.AI, LM Studio as AI providers
  with editable model names via Combobox in admin settings
- Fix OpenRouter broken by normalizeProvider bug in config.ts
- Convert agent-created notes from Markdown to HTML (TipTap rich text)
- Add Notification model + in-app notifications for agent results
- Agent notification click opens the created note directly
- Add note count display on notebook and inbox headers
- Fix checklist toggle in card view (persist state via localCheckItems)
- Add checklist creation option in tabs/list view (dropdown on + button)
- Fix image description ENOENT error with HTTP fallback
- Improve UI contrast across all themes (input, border, checkbox visibility)
- Add font family setting (Inter vs System Default) in Appearance settings
- Fix CSS font-sans variable conflict (removed dead Geist references)
- Update README with new features and 8 providers

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 16:14:07 +02:00

77 lines
1.8 KiB
TypeScript

'use server'
import { prisma } from '@/lib/prisma'
import { auth } from '@/auth'
export interface AppNotification {
id: string
type: string
title: string
message: string | null
read: boolean
actionUrl: string | null
relatedId: string | null
createdAt: Date
}
export async function getUnreadNotifications(): Promise<AppNotification[]> {
const session = await auth()
if (!session?.user?.id) return []
try {
const notifications = await prisma.notification.findMany({
where: { userId: session.user.id, read: false },
orderBy: { createdAt: 'desc' },
take: 20,
})
return notifications
} catch {
return []
}
}
export async function markNotificationRead(id: string): Promise<void> {
const session = await auth()
if (!session?.user?.id) return
await prisma.notification.updateMany({
where: { id, userId: session.user.id },
data: { read: true },
})
}
export async function markAllNotificationsRead(): Promise<void> {
const session = await auth()
if (!session?.user?.id) return
await prisma.notification.updateMany({
where: { userId: session.user.id, read: false },
data: { read: true },
})
}
/** Create a notification (called from server-side code, not exposed to client) */
export async function createNotification(data: {
userId: string
type: string
title: string
message?: string
actionUrl?: string
relatedId?: string
}): Promise<void> {
try {
await prisma.notification.create({
data: {
userId: data.userId,
type: data.type,
title: data.title,
message: data.message || null,
actionUrl: data.actionUrl || null,
relatedId: data.relatedId || null,
},
})
} catch (e) {
console.error('[Notification] Failed to create:', e)
}
}