57 lines
1.7 KiB
TypeScript
57 lines
1.7 KiB
TypeScript
import { MemberLight } from '@app/shared/types/member';
|
|
import pool from '../../db';
|
|
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];
|
|
|
|
return await pool.query(sql, params);
|
|
}
|
|
|
|
export async function createGroup(name: string, color: string, description: string) {
|
|
const sql = `INSERT INTO roles (name, color, description) VALUES (?, ?, ?)`;
|
|
const params = [name, color, description];
|
|
|
|
const result = await pool.query(sql, params);
|
|
return { id: result.insertId, name, color, description };
|
|
}
|
|
|
|
export async function getUserRoles(userID: number): Promise<Role[]> {
|
|
const sql = `SELECT r.id, r.name
|
|
FROM members_roles mr
|
|
INNER JOIN roles r ON mr.role_id = r.id
|
|
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[]
|
|
} |