"feat: implement AccessLog and AppLog APIs with CRUD operations and test cases"
This commit is contained in:
24
03_source/cms_backend/src/app/api/AppLog/_GUIDELINES.md
Normal file
24
03_source/cms_backend/src/app/api/AppLog/_GUIDELINES.md
Normal 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
|
39
03_source/cms_backend/src/app/api/AppLog/detail/route.ts
Normal file
39
03_source/cms_backend/src/app/api/AppLog/detail/route.ts
Normal 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);
|
||||
}
|
||||
}
|
@@ -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
|
80
03_source/cms_backend/src/app/api/AppLog/route.ts
Normal file
80
03_source/cms_backend/src/app/api/AppLog/route.ts
Normal 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);
|
||||
}
|
||||
}
|
25
03_source/cms_backend/src/app/api/AppLog/test.http
Normal file
25
03_source/cms_backend/src/app/api/AppLog/test.http
Normal 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
|
Reference in New Issue
Block a user