// @ts-check
/**
* @import {ExpressRequestAuthorized, ExpressResponse} from '../types.js'
*/
import {query, UUID2hex} from '@commtool/sql-query'
import { checkObjectAdmin} from '../utils/authChecks.js';
import { rebuildFiltersDlist } from '../utils/rebuildFilter.js';
import {requestUpdateLogger, errorLoggerRead, errorLoggerUpdate} from '../utils/requestLogger.js'
import { getOrganizationForList } from '../utils/organizationUtils.js'
const dlistFilters=(dlist)=>
{
/**
* Retrieves all filters (include, exclude, intersect) associated with a specific dynamic list.
*
* @async
* @function getAllFilters
* @param {string} UID - The unique identifier of the dynamic list
* @returns {Promise<Array>} Array of filter objects with UID, Type, Data, Title, Display, UIDBelongsTo, and SourceType
*/
const getAllFilters = async(UID)=>
{
return await query(`SELECT Filter.UID ,Filter.Type, Filter.Data, Source.Title, Member.Display, Filter.UIDBelongsTo,
Source.Type AS SourceType
FROM
ObjectBase AS Filter
INNER JOIN Links AS Links ON (Filter.UID = Links.UID AND Links.Type ='list')
INNER JOIN ObjectBase AS Source ON (Source.UID= Filter.UIDBelongsTo)
INNER JOIN Member ON (Member.UID=Source.UID)
WHERE
Links.UIDTarget = ? AND Filter.Type IN ('include','exclude','intersect')`,
[UUID2hex(UID)],
{cast:['UUID','json']})
}
// @ts-ignore
dlist.get('/filter/:UID',checkObjectAdmin, async(req,res)=>
{
try {
const result= await getAllFilters(req.params.UID)
res.json({success:true,result})
}
catch(e)
{
errorLoggerRead(e)
}
})
// @ts-ignore
dlist.post('/rebuild/:UID', requestUpdateLogger,async (req,res)=>
{
/**
* POST /rebuild/:UID
* Rebuilds all filters for a specific dynamic list and publishes membership change events.
*
* @param {string} req.params.UID - The unique identifier of the dynamic list to rebuild
* @returns {Object} JSON response with result data and success status
*/
try {
const rebuildFilters= await getAllFilters(req.params.UID)
const UIDOrga = await getOrganizationForList(req.params.UID);
const result=await rebuildFiltersDlist(rebuildFilters, UIDOrga)
res.json({result,success: true})
}
catch(e)
{
errorLoggerUpdate(e)
res.status(500).json({success: false, error: e.message})
}
})
}
export default dlistFilters