// @ts-check
/**
* @import {ExpressRequestAuthorized, ExpressResponse} from './../../types.js'
*/
/**
* Achievement Controller
*
* Contains all the business logic for achievement operations:
* - Creating and updating achievements
* - Deleting achievements
* - Renewing/expiring achievements
* - Fetching achievement information
* - Listing achievements for persons
*
* All functions handle proper authorization checks and data validation.
*/
import { UUID2hex } from '@commtool/sql-query';
import { errorLoggerUpdate } from '../../utils/requestLogger.js';
import { insertOrUpdateAchievement as _insertOrUpdateAchievement } from './insertOrUpdate.js';
import { deleteAchievement as _deleteAchievement } from './delete.js';
import { expireAchievements } from './utilities.js';
import { getAchievement as _getAchievement, listAchievementsPerson as _listAchievementsPerson } from './select.js';
// @ts-check
import './../../types.js';
/**
* Handles the insertion or update of an achievement for a member
* @param {Object} req - Express request object
* @param {Object} res - Express response object
*/
export const insertOrUpdateAchievement = _insertOrUpdateAchievement;
/**
* Deletes an achievement from the database
* @param {Object} req - Express request object
* @param {Object} res - Express response object
*/
export const deleteAchievement = _deleteAchievement;
/**
* Retrieves a specific achievement by UID
* @param {Object} req - Express request object
* @param {Object} res - Express response object
*/
export const getAchievement = _getAchievement;
/**
* Lists all achievements for a specific person
* @param {Object} req - Express request object
* @param {Object} res - Express response object
*/
export const listAchievementsPerson = _listAchievementsPerson;
/**
* Maintenance endpoint to check renewal of achievements
* @param {Object} req - Express request object
* @param {Object} res - Express response object
*/
export const renewalMaintenance = async (req, res) => {
try {
await expireAchievements(UUID2hex(req.session.root), req.query.complete);
res.json({ success: true });
} catch (e) {
errorLoggerUpdate(e);
res.status(500).json({ success: false, message: 'Internal server error' });
}
};