131 lines
4.1 KiB
TypeScript
131 lines
4.1 KiB
TypeScript
const express = require('express');
|
|
const router = express.Router();
|
|
|
|
import { Request, Response } from 'express';
|
|
import pool from '../db';
|
|
import { requireLogin, requireMemberState, requireRole } from '../middleware/auth';
|
|
import { getUserActiveLOA } from '../services/loaService';
|
|
import { getMemberSettings, getMembersFull, getMembersLite, getUserData, setUserSettings } from '../services/memberService';
|
|
import { getUserRoles } from '../services/rolesService';
|
|
import { memberSettings, MemberState } from '@app/shared/types/member';
|
|
|
|
router.use(requireLogin);
|
|
|
|
//get all users
|
|
router.get('/', [requireMemberState(MemberState.Member)], async (req, res) => {
|
|
try {
|
|
const result = await pool.query(
|
|
`SELECT
|
|
v.*,
|
|
CASE
|
|
WHEN EXISTS (
|
|
SELECT 1
|
|
FROM leave_of_absences l
|
|
WHERE l.member_id = v.member_id
|
|
AND l.deleted = 0
|
|
AND UTC_TIMESTAMP() BETWEEN l.start_date AND l.end_date
|
|
) THEN 1 ELSE 0
|
|
END AS on_loa
|
|
FROM view_member_rank_unit_status_latest v;`);
|
|
return res.status(200).json(result);
|
|
} catch (err) {
|
|
console.error('Error fetching users:', err);
|
|
return res.status(500).json({ error: 'Failed to fetch users' });
|
|
}
|
|
});
|
|
|
|
router.get('/me', async (req, res) => {
|
|
if (req.user === undefined)
|
|
return res.sendStatus(401)
|
|
|
|
try {
|
|
const { id, name, state } = await getUserData(req.user.id);
|
|
// const LOAData = await pool.query(
|
|
// `SELECT *
|
|
// FROM leave_of_absences
|
|
// WHERE member_id = ?
|
|
// AND deleted = 0
|
|
// AND UTC_TIMESTAMP() BETWEEN start_date AND end_date;`, req.user.id);
|
|
const LOAData = await getUserActiveLOA(req.user.id);
|
|
|
|
const roleData = await getUserRoles(req.user.id);
|
|
|
|
const userDataFull = { id, name, state, LOAData, roleData };
|
|
console.log(userDataFull)
|
|
res.status(200).json(userDataFull);
|
|
} catch (error) {
|
|
console.error('Error fetching user data:', error);
|
|
return res.status(500).json({ error: 'Failed to fetch user data' });
|
|
}
|
|
})
|
|
|
|
router.get('/settings', async (req: Request, res: Response) => {
|
|
try {
|
|
let user = req.user.id;
|
|
console.log(user);
|
|
let output = await getMemberSettings(user);
|
|
res.status(200).json(output);
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json(error);
|
|
}
|
|
})
|
|
|
|
router.put('/settings', async (req: Request, res: Response) => {
|
|
try {
|
|
let user = req.user.id;
|
|
let settings: memberSettings = req.body;
|
|
console.log(settings)
|
|
await setUserSettings(user, settings);
|
|
res.sendStatus(200);
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json(error);
|
|
}
|
|
})
|
|
|
|
router.post('/lite/bulk', async (req: Request, res: Response) => {
|
|
try {
|
|
let ids = req.body.ids;
|
|
let out = await getMembersLite(ids);
|
|
res.status(200).json(out);
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json(error);
|
|
}
|
|
})
|
|
|
|
router.post('/full/bulk', async (req: Request, res: Response) => {
|
|
try {
|
|
let ids = req.body.ids;
|
|
let out = await getMembersFull(ids);
|
|
res.status(200).json(out);
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json(error);
|
|
}
|
|
})
|
|
|
|
router.get('/:id', async (req, res) => {
|
|
try {
|
|
const userId = req.params.id;
|
|
const result = await pool.query('SELECT * FROM view_member_rank_unit_status_latest WHERE id = $1;', [userId]);
|
|
if (result.rows.length === 0) {
|
|
return res.status(404).json({ error: 'User not found' });
|
|
}
|
|
return res.status(200).json(result.rows[0]);
|
|
} catch (err) {
|
|
console.error('Error fetching user:', err);
|
|
return res.status(500).json({ error: 'Failed to fetch user' });
|
|
}
|
|
});
|
|
|
|
//update a user's display name (stub)
|
|
router.put('/:id/displayname', async (req, res) => {
|
|
// Stub: not implemented yet
|
|
return res.status(501);
|
|
});
|
|
|
|
|
|
export const memberRouter = router;
|