diff --git a/api/src/routes/course.ts b/api/src/routes/course.ts index 7a61097..73955db 100644 --- a/api/src/routes/course.ts +++ b/api/src/routes/course.ts @@ -1,5 +1,5 @@ -import { CourseAttendee } from "@app/shared/types/course"; -import { getAllCourses, getCourseEventAttendees, getCourseEventDetails } from "../services/CourseSerivce"; +import { CourseAttendee, CourseEventDetails } from "@app/shared/types/course"; +import { getAllCourses, getCourseEventAttendees, getCourseEventDetails, insertCourseEvent } from "../services/CourseSerivce"; import { Request, Response, Router } from "express"; 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 // ur.post('/', async (req, res) => { diff --git a/api/src/services/CourseSerivce.ts b/api/src/services/CourseSerivce.ts index 5d913a6..7fc063a 100644 --- a/api/src/services/CourseSerivce.ts +++ b/api/src/services/CourseSerivce.ts @@ -18,7 +18,7 @@ function buildAttendee(row: RawAttendeeRow): CourseAttendee { updated_at: row.updated_at, remarks: row.remarks, attendee_role_id: row.attendee_role_id, - + role: row.role_id ? { id: row.role_id, @@ -44,9 +44,9 @@ export async function getCourseEventAttendees(id: number): Promise buildAttendee(row)) } @@ -56,4 +56,32 @@ export async function getCourseEventDetails(id: number): Promise { + 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; + } } \ No newline at end of file diff --git a/shared/types/course.ts b/shared/types/course.ts index 5e36f6f..4f75ad5 100644 --- a/shared/types/course.ts +++ b/shared/types/course.ts @@ -12,7 +12,7 @@ export interface Course { } export interface CourseEventDetails { - id: number; // PK + id: number | null; // PK course_id: number | null; // FK → courses.id event_type: number | null; // FK → event_types.id event_date: string; // datetime (not nullable)