'use server' import { auth } from '@/auth' import { titleSuggestionService } from '@/lib/ai/services/title-suggestion.service' import { prisma } from '@/lib/prisma' import { revalidatePath } from 'next/cache' export interface GenerateTitlesResponse { suggestions: Array<{ title: string confidence: number reasoning?: string }> noteId: string } /** * Generate title suggestions for a note * Triggered when note reaches 50+ words without a title */ export async function generateTitleSuggestions(noteId: string): Promise { const session = await auth() if (!session?.user?.id) { throw new Error('Unauthorized') } try { // Fetch note content const note = await prisma.note.findUnique({ where: { id: noteId }, select: { id: true, content: true, userId: true } }) if (!note) { throw new Error('Note not found') } if (note.userId !== session.user.id) { throw new Error('Forbidden') } if (!note.content || note.content.trim().length === 0) { throw new Error('Note content is empty') } // Generate suggestions const suggestions = await titleSuggestionService.generateSuggestions(note.content) return { suggestions, noteId } } catch (error) { console.error('Error generating title suggestions:', error) throw error } } /** * Apply selected title to note */ export async function applyTitleSuggestion( noteId: string, selectedTitle: string ): Promise { const session = await auth() if (!session?.user?.id) { throw new Error('Unauthorized') } try { // Update note with selected title await prisma.note.update({ where: { id: noteId, userId: session.user.id }, data: { title: selectedTitle, autoGenerated: true, lastAiAnalysis: new Date() } }) revalidatePath('/') revalidatePath(`/note/${noteId}`) } catch (error) { console.error('Error applying title suggestion:', error) throw error } } /** * Record user feedback on title suggestions * (Phase 3 - for improving future suggestions) */ export async function recordTitleFeedback( noteId: string, selectedTitle: string, allSuggestions: Array<{ title: string; confidence: number }> ): Promise { const session = await auth() if (!session?.user?.id) { throw new Error('Unauthorized') } try { // Save to AiFeedback table for learning await prisma.aiFeedback.create({ data: { noteId, userId: session.user.id, feedbackType: 'thumbs_up', // User chose one of our suggestions feature: 'title_suggestion', originalContent: JSON.stringify(allSuggestions), correctedContent: selectedTitle, metadata: JSON.stringify({ timestamp: new Date().toISOString(), provider: 'auto' // Will be dynamic based on user settings }) } }) } catch (error) { console.error('Error recording title feedback:', error) // Don't throw - feedback is optional } }