// @ts-check
/**
* @import {ExpressRequestAuthorized, ExpressResponse} from './../../types.js'
*/
/**
* Group Controller — HTTP Request/Response Handling
*
* Extracts request parameters and delegates all business logic to the
* service layer. Each handler catches unexpected errors, logs them, and
* returns a 500 response so the process does not crash.
*/
import { errorLoggerRead, errorLoggerUpdate } from '../../utils/requestLogger.js';
import * as groupService from './service.js';
export { getGroupTreeGraph } from './krokiTree.js';
// ---------------------------------------------------------------------------
// Mutation handlers
// ---------------------------------------------------------------------------
/**
* PUT /:UIDparent — create or update a group under the given parent.
* @param {ExpressRequestAuthorized} req
* @param {ExpressResponse} res
*/
export const putGroup = async (req, res) => {
try {
const result = await groupService.createOrUpdateGroup(req);
res.status(result.status ?? 200).json(result);
} catch (e) {
errorLoggerUpdate(e);
res.status(500).json({ success: false, message: e.message });
}
};
/**
* POST /:UID — partial update of an existing group.
* @param {ExpressRequestAuthorized} req
* @param {ExpressResponse} res
*/
export const updateGroup = async (req, res) => {
try {
const result = await groupService.updateGroupData(req);
res.status(result.status ?? 200).json(result);
} catch (e) {
errorLoggerUpdate(e);
res.status(500).json({ success: false, message: e.message });
}
};
/**
* DELETE /:UID — delete a group if it has no remaining members.
* @param {ExpressRequestAuthorized} req
* @param {ExpressResponse} res
*/
export const deleteGroup = async (req, res) => {
try {
const result = await groupService.deleteGroupById(req);
res.status(result.status ?? 200).json(result);
} catch (e) {
errorLoggerUpdate(e);
res.status(500).json({ success: false, message: e.message });
}
};
// ---------------------------------------------------------------------------
// Read handlers
// ---------------------------------------------------------------------------
/**
* GET /:UID — fetch group details, optionally with parent and/or sibling data.
* @param {ExpressRequestAuthorized} req
* @param {ExpressResponse} res
*/
export const getGroup = async (req, res) => {
try {
const result = await groupService.getGroupById(req);
res.status(result.status ?? 200).json(result);
} catch (e) {
errorLoggerRead(e);
res.status(500).json({ success: false, message: e.message });
}
};
/**
* GET /admin/:UID — check whether the current user has admin rights for a group.
* @param {ExpressRequestAuthorized} req
* @param {ExpressResponse} res
*/
export const checkGroupAdmin = async (req, res) => {
try {
const result = await groupService.checkGroupAdminStatus(req);
res.json(result);
} catch (e) {
errorLoggerRead(e);
res.status(500).json({ success: false, message: e.message });
}
};