From 403a8b394c16321a1d03720a621386744a35b17e Mon Sep 17 00:00:00 2001 From: ajdj100 Date: Wed, 19 Nov 2025 12:30:33 -0500 Subject: [PATCH] added attendees to form --- api/src/routes/course.ts | 12 +- api/src/services/CourseSerivce.ts | 8 +- ui/src/api/trainingReport.ts | 15 ++- .../trainingReport/trainingReportForm.vue | 113 +++++++++++++++--- .../components/ui/input-group/InputGroup.vue | 36 ++++++ .../ui/input-group/InputGroupAddon.vue | 32 +++++ ui/src/components/ui/input-group/index.js | 47 ++++++++ 7 files changed, 244 insertions(+), 19 deletions(-) create mode 100644 ui/src/components/ui/input-group/InputGroup.vue create mode 100644 ui/src/components/ui/input-group/InputGroupAddon.vue create mode 100644 ui/src/components/ui/input-group/index.js diff --git a/api/src/routes/course.ts b/api/src/routes/course.ts index ce7ce93..b1b3195 100644 --- a/api/src/routes/course.ts +++ b/api/src/routes/course.ts @@ -1,5 +1,5 @@ import { CourseAttendee, CourseEventDetails } from "@app/shared/types/course"; -import { getAllCourses, getCourseEventAttendees, getCourseEventDetails, getCourseEvents, insertCourseEvent } from "../services/CourseSerivce"; +import { getAllCourses, getCourseEventAttendees, getCourseEventDetails, getCourseEventRoles, getCourseEvents, insertCourseEvent } from "../services/CourseSerivce"; import { Request, Response, Router } from "express"; const courseRouter = Router(); @@ -15,6 +15,16 @@ courseRouter.get('/', async (req, res) => { } }) +courseRouter.get('/roles', async (req, res) => { + try { + const roles = await getCourseEventRoles(); + res.status(200).json(roles); + } catch (err) { + console.error('failed to fetch course roles', err); + res.status(500).json('failed to fetch course roles\n' + err); + } +}) + eventRouter.get('/', async (req: Request, res: Response) => { try { let events = await getCourseEvents(); diff --git a/api/src/services/CourseSerivce.ts b/api/src/services/CourseSerivce.ts index bc8d283..cff6c2a 100644 --- a/api/src/services/CourseSerivce.ts +++ b/api/src/services/CourseSerivce.ts @@ -1,5 +1,5 @@ import pool from "../db" -import { Course, CourseAttendee, CourseEventDetails, CourseEventSummary, RawAttendeeRow } from "@app/shared/types/course" +import { Course, CourseAttendee, CourseAttendeeRole, CourseEventDetails, CourseEventSummary, RawAttendeeRow } from "@app/shared/types/course" export async function getAllCourses(): Promise { const sql = "SELECT * FROM courses WHERE deleted = false;" @@ -91,4 +91,10 @@ export async function getCourseEvents(): Promise { const sql = "SELECT E.id AS event_id, E.course_id, E.event_date AS date, E.created_by, C.name AS course_name FROM course_events as E LEFT JOIN courses AS C ON E.course_id = C.id;"; let events: CourseEventSummary[] = await pool.query(sql); return events; +} + +export async function getCourseEventRoles(): Promise { + const sql = "SELECT * FROM course_attendee_roles;" + const roles: CourseAttendeeRole[] = await pool.query(sql); + return roles; } \ No newline at end of file diff --git a/ui/src/api/trainingReport.ts b/ui/src/api/trainingReport.ts index 54fa000..7bf7432 100644 --- a/ui/src/api/trainingReport.ts +++ b/ui/src/api/trainingReport.ts @@ -1,4 +1,4 @@ -import { Course, CourseEventDetails, CourseEventSummary } from '@shared/types/course' +import { Course, CourseAttendeeRole, CourseEventDetails, CourseEventSummary } from '@shared/types/course' //@ts-ignore const addr = import.meta.env.VITE_APIHOST; @@ -29,9 +29,20 @@ export async function getAllTrainings(): Promise { const res = await fetch(`${addr}/course`); if (res.ok) { - return await res.json() as Promise; + return await res.json() as Promise; } else { console.error("Something went wrong"); throw new Error("Failed to load training list"); } +} + +export async function getAllAttendeeRoles(): Promise { + const res = await fetch(`${addr}/course/roles`); + + if (res.ok) { + return await res.json() as Promise; + } else { + console.error("Something went wrong"); + throw new Error("Failed to load attendee roles"); + } } \ No newline at end of file diff --git a/ui/src/components/trainingReport/trainingReportForm.vue b/ui/src/components/trainingReport/trainingReportForm.vue index d32b307..c5d202b 100644 --- a/ui/src/components/trainingReport/trainingReportForm.vue +++ b/ui/src/components/trainingReport/trainingReportForm.vue @@ -1,18 +1,10 @@