Skip to content

Commit

Permalink
Merge pull request #57 from lblod/ben/lmb-730-bulk-besluiten
Browse files Browse the repository at this point in the history
Ben/lmb 730 bulk besluiten
  • Loading branch information
Rahien authored Oct 24, 2024
2 parents 2b972b2 + f9e832a commit 140054d
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 1 deletion.
37 changes: 37 additions & 0 deletions controllers/mandataris.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { fractie } from '../data-access/fractie';
import {
bulkBekrachtigMandatarissen,
bulkSetPublicationStatusEffectief,
findDecisionForMandataris,
mandataris,
} from '../data-access/mandataris';
Expand Down Expand Up @@ -166,3 +168,38 @@ async function findDecision(mandatarisId: string): Promise<string | null> {

return decision ? decision.value : null;
}

export async function handleBulkSetPublicationStatus(
mandatarissen: string[],
status: string,
link?: string,
): Promise<void> {
if (!mandatarissen || mandatarissen.length == 0) {
throw new HttpError('No mandatarissen provided', STATUS_CODE.BAD_REQUEST);
}

// We just check access to the first mandataris
const isMandataris = await mandataris.isValidId(mandatarissen.at(0) ?? '');
if (!isMandataris) {
throw new HttpError('Unauthorized', 401);
}

if (status == 'Effectief') {
await bulkSetPublicationStatusEffectief(mandatarissen);
return;
}
if (status == 'Bekrachtigd') {
if (!link) {
throw new HttpError(
'No link to publication was provided',
STATUS_CODE.BAD_REQUEST,
);
}
await bulkBekrachtigMandatarissen(mandatarissen, link);
return;
}
throw new HttpError(
`The provided status: ${status} is not a valid publication status, please provide Effectief or Bekrachtigd.`,
STATUS_CODE.BAD_REQUEST,
);
}
83 changes: 83 additions & 0 deletions data-access/mandataris.ts
Original file line number Diff line number Diff line change
Expand Up @@ -597,6 +597,89 @@ export async function updatePublicationStatusOfMandataris(
}
}

export async function bulkSetPublicationStatusEffectief(
mandatarissen: string[],
): Promise<void> {
const escaped = {
mandatarissenUuids: mandatarissen
.map((uri) => sparqlEscapeString(uri))
.join(' '),
effectief: sparqlEscapeUri(PUBLICATION_STATUS.EFECTIEF),
bekrachtigd: sparqlEscapeUri(PUBLICATION_STATUS.BEKRACHTIGD),
};
const query = `
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
PREFIX lmb: <http://lblod.data.gift/vocabularies/lmb/>
DELETE {
GRAPH ?graph {
?mandataris lmb:hasPublicationStatus ?status .
}
}
INSERT {
GRAPH ?graph {
?mandataris lmb:hasPublicationStatus ${escaped.effectief} .
}
}
WHERE {
GRAPH ?graph {
?mandataris a mandaat:Mandataris ;
mu:uuid ?uuid .
OPTIONAL {
?mandataris lmb:hasPublicationStatus ?status .
}
VALUES ?uuid { ${escaped.mandatarissenUuids} }
FILTER (!BOUND(?status) || ?status NOT IN (${escaped.bekrachtigd}))
}
}
`;

await updateSudo(query);
}

export async function bulkBekrachtigMandatarissen(
mandatarissen: string[],
link: string,
): Promise<void> {
const escaped = {
mandatarissenUuids: mandatarissen
.map((uri) => sparqlEscapeString(uri))
.join(' '),
bekrachtigd: sparqlEscapeUri(PUBLICATION_STATUS.BEKRACHTIGD),
link: sparqlEscapeString(link),
};
const query = `
PREFIX mu: <http://mu.semte.ch/vocabularies/core/>
PREFIX mandaat: <http://data.vlaanderen.be/ns/mandaat#>
PREFIX lmb: <http://lblod.data.gift/vocabularies/lmb/>
DELETE {
GRAPH ?graph {
?mandataris lmb:hasPublicationStatus ?status .
}
}
INSERT {
GRAPH ?graph {
?mandataris lmb:hasPublicationStatus ${escaped.bekrachtigd} ;
lmb:linkToBesluit ${escaped.link} .
}
}
WHERE {
GRAPH ?graph {
?mandataris a mandaat:Mandataris ;
mu:uuid ?uuid .
OPTIONAL {
?mandataris lmb:hasPublicationStatus ?status .
}
VALUES ?uuid { ${escaped.mandatarissenUuids} }
}
}
`;

await updateSudo(query);
}

async function getPersonWithBestuursperiode(
mandatarisId: string,
sudo: boolean = false,
Expand Down
23 changes: 22 additions & 1 deletion routes/mandatarissen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@ import {
createLinkedMandataris,
removeLinkLinkedMandataris,
} from '../controllers/linked-mandataris';
import { mandatarisUsecase } from '../controllers/mandataris';
import {
handleBulkSetPublicationStatus,
mandatarisUsecase,
} from '../controllers/mandataris';
import { STATUS_CODE } from '../util/constants';

const upload = multer({ dest: 'mandataris-uploads/' });
Expand Down Expand Up @@ -174,6 +177,24 @@ mandatarissenRouter.get(
},
);

mandatarissenRouter.post(
'/bulk-set-publication-status/',
async (req: Request, res: Response) => {
const { decision, status, mandatarissen } = req.body;

try {
await handleBulkSetPublicationStatus(mandatarissen, status, decision);
return res.status(200).send({ status: 'ok' });
} catch (error) {
const message =
error.message ??
'Something went wrong while executing a bulk bekrachtiging.';
const statusCode = error.status ?? STATUS_CODE.INTERNAL_SERVER_ERROR;
return res.status(statusCode).send({ message });
}
},
);

mandatarissenRouter.get(
'/:id/fracties',
async (req: Request, res: Response) => {
Expand Down

0 comments on commit 140054d

Please sign in to comment.