Source: Router/dlistFilters.js

// @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