92 lines
2.0 KiB
TypeScript
92 lines
2.0 KiB
TypeScript
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<T>(data: T, status: number = 200) {
|
|
return NextResponse.json(
|
|
{
|
|
success: true,
|
|
data,
|
|
} as ApiResponse<T>,
|
|
{ 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<never>,
|
|
{ status }
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Standard pagination response format
|
|
* @param data Array of items to return
|
|
* @param pagination Pagination information
|
|
*/
|
|
export function paginationResponse<T>(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<T>);
|
|
}
|
|
|
|
/**
|
|
* Create response handler
|
|
* @param data The created item data
|
|
*/
|
|
export function createResponse<T>(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<T>(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);
|
|
}
|