Files
milsim-site-v4/api/src/services/CourseSerivce.ts

59 lines
2.0 KiB
TypeScript

import pool from "../db"
import { Course, CourseAttendee, CourseEventDetails, RawAttendeeRow } from "@app/shared/types/course"
export async function getAllCourses(): Promise<Course[]> {
const sql = "SELECT * FROM courses WHERE deleted = false;"
const res = await pool.query(sql);
return res;
}
function buildAttendee(row: RawAttendeeRow): CourseAttendee {
return {
passed: !!row.passed,
attendee_id: row.attendee_id,
course_event_id: row.course_event_id,
created_at: row.created_at,
updated_at: row.updated_at,
remarks: row.remarks,
attendee_role_id: row.attendee_role_id,
role: row.role_id
? {
id: row.role_id,
name: row.role_name,
description: row.role_description,
deleted: !!row.role_deleted,
created_at: row.role_created_at,
updated_at: row.role_updated_at,
}
: null
};
}
export async function getCourseEventAttendees(id: number): Promise<CourseAttendee[]> {
const sql = `SELECT
ca.*,
ar.id AS role_id,
ar.name AS role_name,
ar.description AS role_description,
ar.deleted AS role_deleted,
ar.created_at AS role_created_at,
ar.updated_at AS role_updated_at
FROM course_attendees ca
LEFT JOIN course_attendee_roles ar ON ar.id = ca.attendee_role_id
WHERE ca.course_event_id = ?;`;
const res:RawAttendeeRow[] = await pool.query(sql, [id]);
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;
}