Merge branch 'main' into promotions
This commit is contained in:
@@ -83,8 +83,10 @@ export async function insertCourseEvent(event: CourseEventDetails): Promise<numb
|
||||
try {
|
||||
var con = await pool.getConnection();
|
||||
|
||||
let course: Course = await getCourseByID(event.course_id);
|
||||
|
||||
await con.beginTransaction();
|
||||
const res = await con.query("INSERT INTO course_events (course_id, event_date, remarks, created_by) VALUES (?, ?, ?, ?);", [event.course_id, toDateTime(event.event_date), event.remarks, event.created_by]);
|
||||
const res = await con.query("INSERT INTO course_events (course_id, event_date, remarks, created_by, hasBookwork, hasQual) VALUES (?, ?, ?, ?, ?, ?);", [event.course_id, toDateTime(event.event_date), event.remarks, event.created_by, course.hasBookwork, course.hasQual]);
|
||||
var eventID: number = res.insertId;
|
||||
|
||||
for (const attendee of event.attendees) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { Role } from "@app/shared/types/roles";
|
||||
import pool from "../db";
|
||||
import { Member, MemberLight, memberSettings, MemberState } from '@app/shared/types/member'
|
||||
import { Member, MemberCardDetails, MemberLight, memberSettings, MemberState } from '@app/shared/types/member'
|
||||
|
||||
export async function getUserData(userID: number): Promise<Member> {
|
||||
const sql = `SELECT * FROM view_member_rank_unit_status_latest WHERE member_id = ?`;
|
||||
@@ -60,10 +61,50 @@ export async function getAllMembersLite(): Promise<MemberLight[]> {
|
||||
return res;
|
||||
}
|
||||
|
||||
export async function getMembersFull(ids: number[]): Promise<Member[]> {
|
||||
const sql = `SELECT * FROM view_member_rank_unit_status_latest WHERE member_id IN (?);`;
|
||||
const res: Member[] = await pool.query(sql, [ids]);
|
||||
return res;
|
||||
export async function getMembersFull(ids: number[]): Promise<MemberCardDetails[]> {
|
||||
const sql = `
|
||||
SELECT m.*,
|
||||
COALESCE(
|
||||
JSON_ARRAYAGG(
|
||||
CASE
|
||||
WHEN r.id IS NOT NULL THEN JSON_OBJECT(
|
||||
'id', r.id,
|
||||
'name', r.name,
|
||||
'color', r.color,
|
||||
'description', r.description
|
||||
)
|
||||
END
|
||||
),
|
||||
JSON_ARRAY()
|
||||
) AS roles
|
||||
FROM view_member_rank_unit_status_latest m
|
||||
LEFT JOIN members_roles mr ON m.member_id = mr.member_id
|
||||
LEFT JOIN roles r ON mr.role_id = r.id
|
||||
WHERE m.member_id IN (?)
|
||||
GROUP BY m.member_id;
|
||||
`;
|
||||
|
||||
const rows: any[] = await pool.query(sql, [ids]);
|
||||
|
||||
return rows.map(row => {
|
||||
const member: Member = {
|
||||
member_id: row.member_id,
|
||||
member_name: row.member_name,
|
||||
displayName: row.displayName,
|
||||
rank: row.rank,
|
||||
rank_date: row.rank_date,
|
||||
unit: row.unit,
|
||||
unit_date: row.unit_date,
|
||||
status: row.status,
|
||||
status_date: row.status_date,
|
||||
loa_until: row.loa_until ? new Date(row.loa_until) : undefined,
|
||||
};
|
||||
|
||||
// roles comes as array of strings; parse each one
|
||||
const roles: Role[] = JSON.parse(row.roles).map((r: string) => JSON.parse(r));
|
||||
|
||||
return { member, roles };
|
||||
});
|
||||
}
|
||||
|
||||
export async function mapDiscordtoID(id: number): Promise<number | null> {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { MemberLight } from '@app/shared/types/member';
|
||||
import pool from '../db';
|
||||
import { Role } from '@app/shared/types/roles'
|
||||
import { Role, RoleSummary } from '@app/shared/types/roles'
|
||||
|
||||
export async function assignUserGroup(userID: number, roleID: number) {
|
||||
|
||||
const sql = `INSERT INTO members_roles (member_id, role_id) VALUES (?, ?);`;
|
||||
const params = [userID, roleID];
|
||||
|
||||
@@ -24,4 +24,34 @@ export async function getUserRoles(userID: number): Promise<Role[]> {
|
||||
WHERE mr.member_id = ?;`;
|
||||
|
||||
return await pool.query(sql, [userID]);
|
||||
}
|
||||
|
||||
export async function getRole(id: number): Promise<Role> {
|
||||
let res = await pool.query(`SELECT * FROM roles WHERE id = ?`, [id])
|
||||
return res[0] as Role;
|
||||
}
|
||||
|
||||
export async function getAllRoles(): Promise<RoleSummary> {
|
||||
return await pool.query(`SELECT id, name, color FROM roles`);
|
||||
}
|
||||
|
||||
export async function getUsersWithRole(roleId: number): Promise<MemberLight[]> {
|
||||
const out = await pool.query(
|
||||
`
|
||||
SELECT
|
||||
m.member_id AS id,
|
||||
m.member_name AS username,
|
||||
m.displayName,
|
||||
u.color
|
||||
FROM members_roles mr
|
||||
JOIN view_member_rank_unit_status_latest m
|
||||
ON m.member_id = mr.member_id
|
||||
LEFT JOIN units u
|
||||
ON u.name = m.unit
|
||||
WHERE mr.role_id = ?
|
||||
`,
|
||||
[roleId]
|
||||
)
|
||||
|
||||
return out as MemberLight[]
|
||||
}
|
||||
Reference in New Issue
Block a user