// @ts-check
/**
* @import {ExpressRequestAuthorized, ExpressResponse} from '../../types.js'
*/
import paginateList from '../../utils/paginateList.js';
import { errorLoggerRead } from '../../utils/requestLogger.js';
import {
getListing,
getPersonsByUIDs,
getPersonsByGroups,
getAddedPersons,
getRemovedPersons,
getEnteredPersons,
getExitedPersons,
checkIsMember,
} from './service.js';
// ---------------------------------------------------------------------------
// GET /:UID (paginated)
// ---------------------------------------------------------------------------
/**
* Return a paginated list of persons belonging to a group.
* Only invoked when `__page` query parameter is present.
*
* @param {ExpressRequestAuthorized} req
* @param {ExpressResponse} res
* @param {import('express').NextFunction} next
*/
export const getListingPaginatedController = async (req, res, next) => {
if (!req.query.__page) {
next();
return;
}
try {
res.json(await paginateList(req, getListing));
} catch (error) {
errorLoggerRead(error);
res.status(500).json({ success: false, message: error.message });
}
};
// ---------------------------------------------------------------------------
// GET /:UID (full list)
// ---------------------------------------------------------------------------
/**
* Return the full list of persons belonging to a group / object.
*
* @param {ExpressRequestAuthorized} req
* @param {ExpressResponse} res
*/
export const getListingController = async (req, res) => {
try {
const result = await getListing(req);
res.json({ success: true, result });
} catch (error) {
errorLoggerRead(error);
res.status(500).json({ success: false, message: error.message });
}
};
// ---------------------------------------------------------------------------
// POST /
// ---------------------------------------------------------------------------
/**
* Return persons matching an array of UIDs supplied in the request body.
*
* @param {ExpressRequestAuthorized} req
* @param {ExpressResponse} res
*/
export const getPersonsByUIDsController = async (req, res) => {
try {
const result = await getPersonsByUIDs(req);
res.json(result);
} catch (error) {
errorLoggerRead(error);
res.status(500).json({ success: false, message: error.message });
}
};
// ---------------------------------------------------------------------------
// POST /groups/
// ---------------------------------------------------------------------------
/**
* Return persons belonging to one or more groups supplied as UUID array in body.
*
* @param {ExpressRequestAuthorized} req
* @param {ExpressResponse} res
*/
export const getPersonsByGroupsController = async (req, res) => {
try {
const result = await getPersonsByGroups(req);
res.json(result);
} catch (error) {
errorLoggerRead(error);
res.status(500).json({ success: false, message: error.message });
}
};
// ---------------------------------------------------------------------------
// GET /added/:UID/:timestamp
// ---------------------------------------------------------------------------
/**
* Return persons added to a group after the given timestamp.
*
* @param {ExpressRequestAuthorized} req
* @param {ExpressResponse} res
*/
export const getAddedPersonsController = async (req, res) => {
try {
const result = await getAddedPersons(req);
res.json(result);
} catch (error) {
errorLoggerRead(error);
res.status(500).json({ success: false, message: error.message });
}
};
// ---------------------------------------------------------------------------
// GET /removed/:UID/:timestamp
// ---------------------------------------------------------------------------
/**
* Return persons removed from a group after the given timestamp.
*
* @param {ExpressRequestAuthorized} req
* @param {ExpressResponse} res
*/
export const getRemovedPersonsController = async (req, res) => {
try {
const result = await getRemovedPersons(req);
res.json(result);
} catch (error) {
errorLoggerRead(error);
res.status(500).json({ success: false, message: error.message });
}
};
// ---------------------------------------------------------------------------
// GET /entered/:UID/:timestamp
// ---------------------------------------------------------------------------
/**
* Return persons who transitioned from extern to person (entered) after the timestamp.
*
* @param {ExpressRequestAuthorized} req
* @param {ExpressResponse} res
*/
export const getEnteredPersonsController = async (req, res) => {
try {
const result = await getEnteredPersons(req);
res.json(result);
} catch (error) {
errorLoggerRead(error);
res.status(500).json({ success: false, message: error.message });
}
};
// ---------------------------------------------------------------------------
// GET /exited/:UID/:timestamp
// ---------------------------------------------------------------------------
/**
* Return persons who transitioned from person to extern (exited) after the timestamp.
*
* @param {ExpressRequestAuthorized} req
* @param {ExpressResponse} res
*/
export const getExitedPersonsController = async (req, res) => {
try {
const result = await getExitedPersons(req);
res.json(result);
} catch (error) {
errorLoggerRead(error);
res.status(500).json({ success: false, message: error.message });
}
};
// ---------------------------------------------------------------------------
// GET /isMember/:UID/:person
// ---------------------------------------------------------------------------
/**
* Check whether a person is currently a member of a group.
*
* @param {ExpressRequestAuthorized} req
* @param {ExpressResponse} res
*/
export const checkIsMemberController = async (req, res) => {
try {
const result = await checkIsMember(req.params.person, req.params.UID);
res.json(result);
} catch (error) {
errorLoggerRead(error);
res.status(500).json({ success: false, message: error.message });
}
};