implemented getter for course event details
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
import { CourseAttendee } from "@app/shared/types/course";
|
import { CourseAttendee } from "@app/shared/types/course";
|
||||||
import { getAllCourses, getCourseAttendees } from "../services/CourseSerivce";
|
import { getAllCourses, getCourseEventAttendees, getCourseEventDetails } from "../services/CourseSerivce";
|
||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
|
|
||||||
const courseRouter = Router();
|
const courseRouter = Router();
|
||||||
@@ -15,9 +15,20 @@ courseRouter.get('/', async (req, res) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
eventRouter.get('/:id', async (req: Request, res: Response) => {
|
||||||
|
try {
|
||||||
|
let out = await getCourseEventDetails(Number(req.params.id));
|
||||||
|
console.log(out);
|
||||||
|
res.status(200).json(out);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('failed to fetch report', error);
|
||||||
|
res.status(500).json(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
eventRouter.get('/attendees/:id', async (req: Request, res: Response) => {
|
eventRouter.get('/attendees/:id', async (req: Request, res: Response) => {
|
||||||
try {
|
try {
|
||||||
const attendees: CourseAttendee[] = await getCourseAttendees(Number(req.params.id));
|
const attendees: CourseAttendee[] = await getCourseEventAttendees(Number(req.params.id));
|
||||||
res.status(200).json(attendees);
|
res.status(200).json(attendees);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('failed to fetch attendees', err);
|
console.error('failed to fetch attendees', err);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import pool from "../db"
|
import pool from "../db"
|
||||||
import { Course, CourseAttendee, RawAttendeeRow } from "@app/shared/types/course"
|
import { Course, CourseAttendee, CourseEventDetails, RawAttendeeRow } from "@app/shared/types/course"
|
||||||
|
|
||||||
export async function getAllCourses(): Promise<Course[]> {
|
export async function getAllCourses(): Promise<Course[]> {
|
||||||
const sql = "SELECT * FROM courses WHERE deleted = false;"
|
const sql = "SELECT * FROM courses WHERE deleted = false;"
|
||||||
@@ -32,7 +32,7 @@ function buildAttendee(row: RawAttendeeRow): CourseAttendee {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getCourseAttendees(id: number): Promise<CourseAttendee[]> {
|
export async function getCourseEventAttendees(id: number): Promise<CourseAttendee[]> {
|
||||||
const sql = `SELECT
|
const sql = `SELECT
|
||||||
ca.*,
|
ca.*,
|
||||||
ar.id AS role_id,
|
ar.id AS role_id,
|
||||||
@@ -48,4 +48,12 @@ export async function getCourseAttendees(id: number): Promise<CourseAttendee[]>
|
|||||||
const res:RawAttendeeRow[] = await pool.query(sql, [id]);
|
const res:RawAttendeeRow[] = await pool.query(sql, [id]);
|
||||||
|
|
||||||
return res.map((row) => buildAttendee(row))
|
return res.map((row) => buildAttendee(row))
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getCourseEventDetails(id: number): Promise<CourseEventDetails> {
|
||||||
|
const sql = `SELECT * FROM course_events WHERE id = ?;`;
|
||||||
|
let rows: CourseEventDetails[] = await pool.query(sql, [id]);
|
||||||
|
let event = rows[0];
|
||||||
|
event.attendees = await getCourseEventAttendees(id);
|
||||||
|
return event;
|
||||||
}
|
}
|
||||||
@@ -6,11 +6,30 @@ export interface Course {
|
|||||||
description?: string | null;
|
description?: string | null;
|
||||||
image_url?: string | null;
|
image_url?: string | null;
|
||||||
created_at: string;
|
created_at: string;
|
||||||
updated_at: string;
|
updated_at: string;
|
||||||
deleted?: number | boolean;
|
deleted?: number | boolean;
|
||||||
prereq_id?: number | null;
|
prereq_id?: number | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface CourseEventDetails {
|
||||||
|
id: number; // PK
|
||||||
|
course_id: number | null; // FK → courses.id
|
||||||
|
event_type: number | null; // FK → event_types.id
|
||||||
|
event_date: string; // datetime (not nullable)
|
||||||
|
|
||||||
|
guilded_event_id: number | null;
|
||||||
|
|
||||||
|
created_at: string; // datetime
|
||||||
|
updated_at: string; // datetime
|
||||||
|
|
||||||
|
deleted: boolean | null; // tinyint(4), nullable
|
||||||
|
report_url: string | null; // varchar(2048)
|
||||||
|
remarks: string | null; // text
|
||||||
|
|
||||||
|
attendees: CourseAttendee[] | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export interface CourseAttendee {
|
export interface CourseAttendee {
|
||||||
passed: boolean; // tinyint(1)
|
passed: boolean; // tinyint(1)
|
||||||
attendee_id: number; // PK
|
attendee_id: number; // PK
|
||||||
|
|||||||
Reference in New Issue
Block a user