"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/AccessLog/_GUIDELINES.md
Normal file
24
03_source/cms_backend/src/app/api/AccessLog/_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
|
38
03_source/cms_backend/src/app/api/AccessLog/detail/route.ts
Normal file
38
03_source/cms_backend/src/app/api/AccessLog/detail/route.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
// src/app/api/AccessLog/detail/route.ts
|
||||
//
|
||||
// PURPOSE:
|
||||
// Get single AccessLog record detail
|
||||
//
|
||||
// RULES:
|
||||
// - Return complete AccessLog details
|
||||
//
|
||||
import type { NextRequest } from 'next/server';
|
||||
|
||||
import { STATUS, response, handleError } from 'src/utils/response';
|
||||
|
||||
import { AccessLogService } from '../../../../modules/AccessLog/AccessLog.service';
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
**************************************
|
||||
* GET - Get AccessLog details
|
||||
**************************************
|
||||
*/
|
||||
export async function GET(req: NextRequest) {
|
||||
try {
|
||||
const { searchParams } = req.nextUrl;
|
||||
|
||||
// RULES: accessLogId must exist
|
||||
const accessLogId = searchParams.get('accessLogId');
|
||||
if (!accessLogId) return response({ message: 'accessLogId is required!' }, STATUS.BAD_REQUEST);
|
||||
|
||||
const accessLog = await AccessLogService.findById(accessLogId);
|
||||
|
||||
if (!accessLog) return response({ message: 'AccessLog not found!' }, STATUS.NOT_FOUND);
|
||||
|
||||
return response({ accessLog }, STATUS.OK);
|
||||
} catch (error) {
|
||||
return handleError('AccessLog - 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
|
76
03_source/cms_backend/src/app/api/AccessLog/route.ts
Normal file
76
03_source/cms_backend/src/app/api/AccessLog/route.ts
Normal file
@@ -0,0 +1,76 @@
|
||||
import type { NextRequest, NextResponse } from 'next/server';
|
||||
|
||||
import { STATUS, response, handleError } from 'src/utils/response';
|
||||
|
||||
import { listAccessLogs } from 'src/app/services/AccessLog.service';
|
||||
|
||||
// import prisma from '../../lib/prisma';
|
||||
|
||||
export async function GET(req: NextRequest, res: NextResponse) {
|
||||
try {
|
||||
const result = await listAccessLogs();
|
||||
|
||||
return response(result, STATUS.OK);
|
||||
} catch (error) {
|
||||
return handleError('AccessLog - Get all', error);
|
||||
}
|
||||
}
|
||||
|
||||
// /**
|
||||
// ***************************************
|
||||
// * POST - create AccessLog
|
||||
// ***************************************
|
||||
// */
|
||||
// export async function POST(req: NextRequest) {
|
||||
// const { data } = await req.json();
|
||||
|
||||
// try {
|
||||
// const createResult = await AccessLogService.create(data);
|
||||
|
||||
// return response(createResult, STATUS.OK);
|
||||
// } catch (error) {
|
||||
// return handleError('AccessLog - Create', error);
|
||||
// }
|
||||
// }
|
||||
|
||||
// /**
|
||||
// ***************************************
|
||||
// * PUT - update AccessLog
|
||||
// ***************************************
|
||||
// */
|
||||
// export async function PUT(req: NextRequest) {
|
||||
// const { searchParams } = req.nextUrl;
|
||||
// const accessLogId = searchParams.get('accessLogId');
|
||||
|
||||
// const { data } = await req.json();
|
||||
|
||||
// try {
|
||||
// if (!accessLogId) throw new Error('accessLogId cannot be null');
|
||||
|
||||
// const updateResult = await AccessLogService.update(accessLogId, data);
|
||||
|
||||
// return response(updateResult, STATUS.OK);
|
||||
// } catch (error) {
|
||||
// return handleError('AccessLog - Update', error);
|
||||
// }
|
||||
// }
|
||||
|
||||
// /**
|
||||
// ***************************************
|
||||
// * DELETE - delete AccessLog
|
||||
// ***************************************
|
||||
// */
|
||||
// export async function DELETE(req: NextRequest) {
|
||||
// const { searchParams } = req.nextUrl;
|
||||
// const accessLogId = searchParams.get('accessLogId');
|
||||
|
||||
// try {
|
||||
// if (!accessLogId) throw new Error('accessLogId cannot be null');
|
||||
|
||||
// const deleteResult = await AccessLogService.delete(accessLogId);
|
||||
|
||||
// return response(deleteResult, STATUS.OK);
|
||||
// } catch (error) {
|
||||
// return handleError('AccessLog - Delete', error);
|
||||
// }
|
||||
// }
|
33
03_source/cms_backend/src/app/api/AccessLog/test.http
Normal file
33
03_source/cms_backend/src/app/api/AccessLog/test.http
Normal file
@@ -0,0 +1,33 @@
|
||||
###
|
||||
GET http://localhost:7272/api/AccessLog
|
||||
|
||||
###
|
||||
GET http://localhost:7272/api/AccessLog?accessLogId=51f2f5dd-78be-4069-ba29-09d2a5026191
|
||||
|
||||
###
|
||||
POST http://localhost:7272/api/AccessLog
|
||||
content-type: application/json
|
||||
|
||||
{
|
||||
"data": {
|
||||
"userId": "user123",
|
||||
"ipAddress": "192.168.1.1",
|
||||
"userAgent": "Mozilla/5.0",
|
||||
"action": "LOGIN",
|
||||
"path": "/api/auth/login",
|
||||
"status": 200
|
||||
}
|
||||
}
|
||||
|
||||
###
|
||||
PUT http://localhost:7272/api/AccessLog?accessLogId=51f2f5dd-78be-4069-ba29-09d2a5026191
|
||||
content-type: application/json
|
||||
|
||||
{
|
||||
"data": {
|
||||
"status": 404
|
||||
}
|
||||
}
|
||||
|
||||
###
|
||||
DELETE http://localhost:7272/api/AccessLog?accessLogId=51f2f5dd-78be-4069-ba29-09d2a5026191
|
Reference in New Issue
Block a user