async function listAccounts()

in api/v1/src/accounts/dataManager.js [88:173]


async function listAccounts(projectId, datasetId, policyId) {
    const bigqueryUtil = new BigQueryUtil(projectId);
    const table = bigqueryUtil.getTableFqdn(projectId, cfg.cdsDatasetId, cfg.cdsAccountViewId);
    const policyTable = bigqueryUtil.getTableFqdn(projectId, cfg.cdsDatasetId, cfg.cdsPolicyViewId);
    const limit = 10;
    let sqlQuery = `SELECT ca.* except(policies),
        array(
            select as struct
                pm.policyId,
                pm.name,
                pm.marketplace.solutionId,
                pm.marketplace.planId
            from unnest(ca.policies) p
            join \`${policyTable}\` pm on p.policyId = pm.policyId
            where pm.isDeleted is false
           ) as policies
        FROM \`${table}\` ca
        where ca.isDeleted is false;`
    let options = {
        query: sqlQuery
    };
    if (datasetId) {
        sqlQuery = `with policies as (
            select distinct
              cp.policyId,
              cp.name,
              cp.isTableBased,
              cp.marketplace.solutionId,
              cp.marketplace.planId,
              d.datasetId
            FROM \`${policyTable}\` cp
            cross join unnest(cp.datasets) d
            where d.datasetId = @datasetId and cp.isDeleted is false
          ),
          userPolicies as (
            select
              ca.* EXCEPT(policies),
              cp.policyId,
              cp.name,
              cp.solutionId,
              cp.planId
            FROM \`${table}\` ca
            cross join unnest(ca.policies) as p
            join policies cp on p.policyId = cp.policyId
            where ca.isDeleted IS false and cp.isTableBased IS false
          )
          select
            up.rowId,
            up.email,
            up.emailType,
            up.accountId,
            up.createdAt,
            up.createdBy,
            up.version,
            ARRAY_AGG(struct(policyId, name, solutionId, planId)) as policies
          from userPolicies up
          group by up.rowId, up.email, up.emailType, up.accountId, up.createdAt, up.createdBy, up.version`;
        options = {
            query: sqlQuery,
            params: { datasetId: datasetId }
        };
    } else if (policyId) {
        let fields = new Set(cfg.cdsAccountViewFields);
        let remove = ['rowId', 'accountId', 'accountType', 'createdBy', 'policies', 'createdAt', 'version', 'isDeleted'];
        remove.forEach(f => fields.delete(f));
        fields = Array.from(fields).map(i => 'ca.' + i).join();
        sqlQuery = `SELECT ${fields}
        FROM \`${table}\` ca
        CROSS JOIN UNNEST(ca.policies) as p
        WHERE p.policyId = @policyId
        LIMIT ${limit}`
        options = {
            query: sqlQuery,
            params: { policyId: policyId }
        };
    }

    try {
        const [rows] = await bigqueryUtil.executeQuery(options);
        const accounts = await checkProcurementEntitlements(projectId, rows);
        return { success: true, data: accounts };
    } catch (err) {
        console.error(err);
        return { success: false, code: 500, errors: ['Unable to retrieve accounts'] };
    }
}