UNPKG

@tricoteuses/senat

Version:

Handle French Sénat's open data

95 lines (94 loc) 3.37 kB
import { jsonArrayFrom } from "kysely/helpers/postgres"; import { dbAmeli } from "../databases"; import { concat, toDateString } from "./util"; function auteurs(amendementId) { return jsonArrayFrom(dbAmeli .selectFrom("amdsen") .leftJoin("sen_ameli", "amdsen.senid", "sen_ameli.entid") .where("amdsen.amdid", "=", amendementId) .select([ "amdsen.prenomuse as prenom", "amdsen.nomuse as nom", "sen_ameli.mat as matricule", ]) .orderBy("amdsen.rng asc")); } const findAllQuery = dbAmeli .selectFrom("amd") .leftJoin("sub", "amd.subid", "sub.id") .leftJoin("typsub", "sub.typid", "typsub.id") .leftJoin("txt_ameli", "amd.txtid", "txt_ameli.id") .leftJoin("ses", "txt_ameli.sesdepid", "ses.id") .leftJoin("nat", "txt_ameli.natid", "nat.id") .leftJoin("lec_ameli", "txt_ameli.lecid", "lec_ameli.id") .leftJoin("avicom", "amd.avcid", "avicom.id") .leftJoin("avigvt", "amd.avgid", "avigvt.id") .leftJoin("sor", "amd.sorid", "sor.id") .leftJoin("irr", "amd.irrid", "irr.id") .leftJoin("grppol_ameli", "amd.nomentid", "grppol_ameli.entid") .leftJoin("com_ameli", "amd.nomentid", "com_ameli.entid") .leftJoin("cab", "amd.nomentid", "cab.entid") .select(({ eb, ref, val }) => [ "ses.ann as session", "txt_ameli.doslegsignet as signet_dossier_legislatif", "nat.libcourt as nature_texte", "txt_ameli.numabs as numero_texte", "txt_ameli.int as intitule_texte", "lec_ameli.lib as lecture", eb .case() .when("amd.typ", "=", "A") .then(val("Amendement")) .when("amd.typ", "=", "M") .then(val("Motion")) .when("amd.typ", "=", "S") .then(val("Sous-amendement")) .else("") .end() .as("nature"), "amd.id as id", "amd.amdperid as parent_id", "amd.num as numero", "amd.numabs as numero_absolu", "amd.ord as ordre", "sub.lib as subdivision_libelle", "sub.lic as subdivision_libelle_court", "typsub.lib as subdivision_type", "amd.alinea as alinea", toDateString(ref("amd.datdep")).as("date_depot"), "amd.dis as dispositif", "amd.obj as objet", eb .case() .when("amd.etaid", "=", 7) .then(val("Diffusé")) .when("amd.etaid", "=", 8) .then(val("Retiré avant réunion ou séance")) .when("amd.etaid", "=", 9) .then(val("Examiné en commission ou séance")) .when("amd.etaid", "=", 10) .then(val("Irrecevable")) .when("amd.etaid", "=", 11) .then(val("Irrecevable")) .else("") .end() .as("etat"), "avicom.lib as avis_commission", "avigvt.lib as avis_gouvernement", eb.fn.coalesce("sor.lib", "irr.libirr").as("sort"), "amd.rev as revision", concat(val("https://www.senat.fr/amendements/"), ref("ses.lil"), val("/"), ref("txt_ameli.numabs"), val("/Amdt_"), ref("amd.numabs"), val(".html")).as("url"), "grppol_ameli.lilcou as au_nom_de_groupe_politique", "com_ameli.lil as au_nom_de_commission", eb .case() .when("cab.entid", "is not", null) .then(true) .else(false) .end() .as("auteur_est_gouvernement"), auteurs(ref("amd.id")).as("auteurs"), ]); export function findAll() { return findAllQuery.stream(); }