@@ -271,3 +271,66 @@ export async function userReplyToTicket(ticketId: string, text: string) {
271271 return { success : false , error : 'Failed to send follow-up' } ;
272272 }
273273}
274+
275+ export async function updateTicketReadStatus ( ticketId : string , messageId : string ) {
276+ try {
277+ const clerkUser = await currentUser ( ) ;
278+ const userEmail = clerkUser ?. emailAddresses [ 0 ] ?. emailAddress ;
279+
280+ if ( ! userEmail ) {
281+ return { success : false , error : 'Unauthorized' } ;
282+ }
283+
284+ // Verify ownership
285+ const ticket = await prisma . ticket . findUnique ( {
286+ where : { id : ticketId } ,
287+ include : { user : true }
288+ } ) ;
289+
290+ if ( ! ticket || ticket . user . email !== userEmail ) {
291+ return { success : false , error : 'Unauthorized' } ;
292+ }
293+
294+ await prisma . ticket . update ( {
295+ where : { id : ticketId } ,
296+ data : { lastReadMessageId : messageId }
297+ } ) ;
298+
299+ return { success : true } ;
300+ } catch ( error ) {
301+ console . error ( 'Error updating read status:' , error ) ;
302+ return { success : false , error : 'Failed to update' } ;
303+ }
304+ }
305+
306+ export async function archiveTicket ( ticketId : string ) {
307+ try {
308+ const clerkUser = await currentUser ( ) ;
309+ const userEmail = clerkUser ?. emailAddresses [ 0 ] ?. emailAddress ;
310+
311+ if ( ! userEmail ) {
312+ return { success : false , error : 'Unauthorized' } ;
313+ }
314+
315+ // Verify ownership
316+ const ticket = await prisma . ticket . findUnique ( {
317+ where : { id : ticketId } ,
318+ include : { user : true }
319+ } ) ;
320+
321+ if ( ! ticket || ticket . user . email !== userEmail ) {
322+ return { success : false , error : 'Unauthorized' } ;
323+ }
324+
325+ await prisma . ticket . update ( {
326+ where : { id : ticketId } ,
327+ data : { isArchived : true }
328+ } ) ;
329+
330+ revalidatePath ( '/ask' ) ;
331+ return { success : true } ;
332+ } catch ( error ) {
333+ console . error ( 'Error archiving ticket:' , error ) ;
334+ return { success : false , error : 'Failed to archive' } ;
335+ }
336+ }
0 commit comments