Guest User

My code

a guest
Nov 10th, 2024
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
TypeScript 2.21 KB | Source Code | 0 0
  1. import { neon } from '@neondatabase/serverless';
  2. import { NextRequest, NextResponse } from 'next/server';
  3.  
  4. const sql = neon(process.env.POSTGRES_URL!);
  5.  
  6. interface TicketResponse {
  7.   id: number;
  8.   ticket_id: number;
  9.   response_text: string;
  10.   admin_id: string;
  11.   created_at: string;
  12. }
  13.  
  14. type ApiResponse<T> = NextResponse<T | { error: string }>;
  15.  
  16. export async function GET(
  17.   request: NextRequest,
  18.   context: { params: { id: string } }
  19. ): Promise<ApiResponse<TicketResponse[]>> {
  20.   try {
  21.     const { id } = context.params;
  22.     if (!id) {
  23.       return NextResponse.json(
  24.         { error: 'Missing ticket ID' },
  25.         { status: 400 }
  26.       );
  27.     }
  28.  
  29.     const rows = await sql`
  30.       SELECT id, ticket_id, response_text, admin_id, created_at
  31.       FROM ticket_responses
  32.       WHERE ticket_id = ${id}
  33.       ORDER BY created_at DESC
  34.     ` as TicketResponse[];
  35.    
  36.     return NextResponse.json(rows);
  37.   } catch (error) {
  38.     console.error('Error fetching responses:', error);
  39.     return NextResponse.json(
  40.       { error: 'Failed to fetch responses' },
  41.       { status: 500 }
  42.     );
  43.   }
  44. }
  45.  
  46. export async function POST(
  47.   request: NextRequest,
  48.   context: { params: { id: string } }
  49. ): Promise<ApiResponse<TicketResponse>> {
  50.   try {
  51.     const { id } = context.params;
  52.     const { response_text, admin_id } = await request.json();
  53.    
  54.     if (!response_text || !admin_id) {
  55.       return NextResponse.json(
  56.         { error: 'Missing required fields' },
  57.         { status: 400 }
  58.       );
  59.     }
  60.  
  61.     const newResponse = await sql`
  62.       INSERT INTO ticket_responses (ticket_id, response_text, admin_id)
  63.       VALUES (${id}, ${response_text}, ${admin_id})
  64.       RETURNING id, ticket_id, response_text, admin_id, created_at
  65.     ` as TicketResponse[];
  66.  
  67.     await sql`
  68.       UPDATE tickets
  69.       SET status = CASE
  70.         WHEN status = 'open' THEN 'in-progress'
  71.         ELSE status
  72.       END,
  73.       updated_at = CURRENT_TIMESTAMP
  74.       WHERE id = ${id}
  75.     `;
  76.  
  77.     return NextResponse.json(newResponse[0]);
  78.   } catch (error) {
  79.     console.error('Error creating response:', error);
  80.     return NextResponse.json(
  81.       { error: 'Failed to create response' },
  82.       { status: 500 }
  83.     );
  84.   }
  85. }
Tags: TSX
Advertisement
Add Comment
Please, Sign In to add comment