import { NextResponse } from "next/server"; import { ApiResponse, PaginationResponse, PaginatedApiResponse } from "./types"; /** * Standard success response handler * @param data The data to return in the response * @param status HTTP status code (default: 200) */ export function successResponse(data: T, status: number = 200) { return NextResponse.json( { success: true, data, } as ApiResponse, { status } ); } /** * Standard error response handler * @param message Error message * @param status HTTP status code (default: 500) */ export function errorResponse(message: string, status: number = 500) { console.error(`API error: ${message}`); return NextResponse.json( { success: false, error: message } as ApiResponse, { status } ); } /** * Standard pagination response format * @param data Array of items to return * @param pagination Pagination information */ export function paginationResponse(data: T[], pagination: PaginationResponse | null) { return NextResponse.json({ data: data || [], pagination: pagination || { page: 1, size: 10, totalCount: 0, totalItems: 0, totalPages: 0, pageCount: 0, orderField: ["name"], orderType: ["asc"], query: {}, next: false, back: false, }, } as PaginatedApiResponse); } /** * Create response handler * @param data The created item data */ export function createResponse(data: T) { return successResponse( { ...data as any, createdAt: new Date().toISOString(), } as T, 201 ); } /** * Update response handler * @param data The updated item data */ export function updateResponse(data: T) { return successResponse( { ...data as any, updatedAt: new Date().toISOString(), } as T ); } /** * Delete response handler */ export function deleteResponse() { return successResponse({ message: "Item deleted successfully" }, 204); }