"feat: implement AccessLog and AppLog APIs with CRUD operations and test cases"

This commit is contained in:
louiscklaw
2025-06-03 15:27:56 +08:00
parent fc6ed533e2
commit 5480b62131
13 changed files with 402 additions and 15 deletions

View File

@@ -0,0 +1,24 @@
# GUIDELINE
- this is a AppLog api endpoint
- this is a demo to handle AppLog record
- use single file for single db table/collection only
## `route.ts`
`route.ts` - handle `GET`, `POST`, `PUT`, `DELETE`
`detail/route.ts` - handle `GET` request of specific `AppLog` by id
## `test.http`
store test request
## `../../services/AppLog.service.ts`
AppLog schema CRUD handler
`listAppLogs` - list AppLog record
`getAppLog` - get AppLog record by id
`createNewAppLog` - create AppLog record
`updateAppLog` - update AppLog record by id
`deleteAppLog` - delete AppLog record by id

View File

@@ -0,0 +1,39 @@
// src/app/api/AppLog/detail/route.ts
//
// PURPOSE:
// Get single AppLog record detail
//
// RULES:
// - Return complete AppLog details
//
import type { NextRequest } from 'next/server';
import { STATUS, response, handleError } from 'src/utils/response';
import prisma from '../../../lib/prisma';
// ----------------------------------------------------------------------
/**
**************************************
* GET - Get AppLog details
**************************************
*/
export async function GET(req: NextRequest) {
// Original user details functionality
try {
const { searchParams } = req.nextUrl;
// RULES: appLogId must exist
const appLogId = searchParams.get('appLogId');
if (!appLogId) return response({ message: 'appLogId is required!' }, STATUS.BAD_REQUEST);
const appLog = await prisma.appLog.findFirst({ where: { id: appLogId } });
if (!appLog) return response({ message: 'AppLog not found!' }, STATUS.NOT_FOUND);
return response({ appLog }, STATUS.OK);
} catch (error) {
return handleError('AppLog - Get details', error);
}
}

View File

@@ -0,0 +1,7 @@
###
GET http://localhost:7272/api/AppLog/detail?appLogId=e1bb8e4a-da37-4dbc-b8f2-9ad233a102ad
###
GET http://localhost:7272/api/AppLog/detail?start=2025-01-01&end=2025-12-31

View File

@@ -0,0 +1,80 @@
import type { NextRequest, NextResponse } from 'next/server';
import { STATUS, response, handleError } from 'src/utils/response';
import { listAppLogs, deleteAppLog, updateAppLog, createNewAppLog } from 'src/app/services/AppLog.service';
// import prisma from '../../lib/prisma';
export async function GET(req: NextRequest, res: NextResponse) {
try {
const result = await listAppLogs();
return response(result, STATUS.OK);
} catch (error) {
return handleError('Post - Get latest', error);
}
}
/**
***************************************
* POST - create AppLog
***************************************
*/
export async function POST(req: NextRequest) {
const { data } = await req.json();
try {
const createResult = await createNewAppLog(data);
return response(createResult, STATUS.OK);
} catch (error) {
return handleError('AppLog - Create', error);
}
}
/**
***************************************
* PUT - update AppLog
***************************************
*/
export async function PUT(req: NextRequest) {
const { searchParams } = req.nextUrl;
const appLogId = searchParams.get('appLogId');
const { data } = await req.json();
try {
if (!appLogId) throw new Error('appLogId cannot null');
const id: number = parseInt(appLogId);
const updateResult = await updateAppLog(id, data);
return response(updateResult, STATUS.OK);
} catch (error) {
return handleError('AppLog - Update', error);
}
}
/**
***************************************
* DELETE - update AppLog
***************************************
*/
export async function DELETE(req: NextRequest) {
const { searchParams } = req.nextUrl;
const appLogId = searchParams.get('appLogId');
const { data } = await req.json();
try {
if (!appLogId) throw new Error('appLogId cannot null');
const id: number = parseInt(appLogId);
const deleteResult = await deleteAppLog(id);
return response(deleteResult, STATUS.OK);
} catch (error) {
return handleError('AppLog - Update', error);
}
}

View File

@@ -0,0 +1,25 @@
###
GET http://localhost:7272/api/AppLog
###
GET http://localhost:7272/api/AppLog?appLogId=51f2f5dd-78be-4069-ba29-09d2a5026191
###
POST http://localhost:7272/api/AppLog?appLogId=1
content-type: application/json
{
"data":{"hello": "test"}
}
###
PUT http://localhost:7272/api/AppLog?appLogId=1
content-type: application/json
{
"data": {"hello": "test"}
}
###
DELETE http://localhost:7272/api/AppLog?appLogId=1