added API support for posting training reports
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
import { CourseAttendee } from "@app/shared/types/course";
|
import { CourseAttendee, CourseEventDetails } from "@app/shared/types/course";
|
||||||
import { getAllCourses, getCourseEventAttendees, getCourseEventDetails } from "../services/CourseSerivce";
|
import { getAllCourses, getCourseEventAttendees, getCourseEventDetails, insertCourseEvent } from "../services/CourseSerivce";
|
||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
|
|
||||||
const courseRouter = Router();
|
const courseRouter = Router();
|
||||||
@@ -36,6 +36,18 @@ eventRouter.get('/attendees/:id', async (req: Request, res: Response) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
eventRouter.post('/', async (req: Request, res: Response) => {
|
||||||
|
try {
|
||||||
|
console.log();
|
||||||
|
const data: CourseEventDetails = req.body;
|
||||||
|
await insertCourseEvent(data);
|
||||||
|
res.sendStatus(201);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('failed to post training', error);
|
||||||
|
res.status(500).json("failed to post training\n" + error)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
// //insert a new latest rank for a user
|
// //insert a new latest rank for a user
|
||||||
// ur.post('/', async (req, res) => {
|
// ur.post('/', async (req, res) => {
|
||||||
|
|
||||||
|
|||||||
@@ -57,3 +57,31 @@ export async function getCourseEventDetails(id: number): Promise<CourseEventDeta
|
|||||||
event.attendees = await getCourseEventAttendees(id);
|
event.attendees = await getCourseEventAttendees(id);
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function insertCourseEvent(event: CourseEventDetails): Promise<number> {
|
||||||
|
const con = await pool.getConnection();
|
||||||
|
try {
|
||||||
|
await con.beginTransaction();
|
||||||
|
const res = await con.execute("INSERT INTO course_events (course_id, event_date, remarks) VALUES (?, ?, ?);", [event.course_id, event.event_date, event.remarks]);
|
||||||
|
var eventID: number = res.insertId;
|
||||||
|
|
||||||
|
for (const attendee of event.attendees) {
|
||||||
|
await con.execute(`INSERT INTO course_attendees (
|
||||||
|
attendee_id,
|
||||||
|
course_event_id,
|
||||||
|
attendee_role_id,
|
||||||
|
passed,
|
||||||
|
remarks
|
||||||
|
)
|
||||||
|
VALUES (?, ?, ?, ?, ?);`, [attendee.attendee_id, eventID, attendee.attendee_role_id, attendee.passed, attendee.remarks]);
|
||||||
|
|
||||||
|
}
|
||||||
|
await con.commit();
|
||||||
|
} catch (error) {
|
||||||
|
await con.rollback();
|
||||||
|
throw error;
|
||||||
|
} finally {
|
||||||
|
await con.release();
|
||||||
|
return eventID;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,7 +12,7 @@ export interface Course {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface CourseEventDetails {
|
export interface CourseEventDetails {
|
||||||
id: number; // PK
|
id: number | null; // PK
|
||||||
course_id: number | null; // FK → courses.id
|
course_id: number | null; // FK → courses.id
|
||||||
event_type: number | null; // FK → event_types.id
|
event_type: number | null; // FK → event_types.id
|
||||||
event_date: string; // datetime (not nullable)
|
event_date: string; // datetime (not nullable)
|
||||||
|
|||||||
Reference in New Issue
Block a user