UNPKG

@tricoteuses/senat

Version:

Handle French Sénat's open data

90 lines (89 loc) 4.27 kB
import { jsonArrayFrom } from "kysely/helpers/postgres"; import { dbSenat } from "../databases"; import { expandToRows, rtrim, toDateString } from "./util"; function reponses(questionId) { return jsonArrayFrom(dbSenat .withSchema("questions") .selectFrom("tam_reponses") .where("tam_reponses.idque", "=", questionId) .select(({ ref }) => [ toDateString(ref("tam_reponses.datejorep")).as("date_reponse_JO"), "tam_reponses.pagejorep as page_JO", toDateString(ref("tam_reponses.errdate")).as("date_erratum_JO"), "tam_reponses.minreplib as ministere_reponse", "tam_reponses.minrepid as ministere_reponse_id", "tam_reponses.urlrep as url", "tam_reponses.txtrep as texte", "tam_reponses.txterrrep as texte_erratum", ]) .orderBy("tam_reponses.datejorep", "asc")); } function themes(questionId) { return jsonArrayFrom(dbSenat .withSchema("questions") .with("question_theme", (db) => db .selectFrom("tam_questions") .select(({ eb, ref, val }) => [ "id as question_id", eb.cast(expandToRows(ref("tam_questions.themes"), val("#(\\d+)")), "smallint").as("theme_id"), ])) .selectFrom("the") .leftJoin("question_theme", "the.thenouidt", "question_theme.theme_id") .where("question_theme.question_id", "=", questionId) .select("the.thelib as libelle") .orderBy("the.thenouidt", "asc")); } const findAllQuery = dbSenat .withSchema("questions") .selectFrom("tam_questions") .leftJoin("tam_ministeres", "tam_questions.mindepotid", "tam_ministeres.minid") .leftJoin("sortquestion", (join) => join.onRef("tam_questions.sorquecod", "=", (eb) => eb.cast("sortquestion.sorquecod", "bigint"))) .leftJoin("naturequestion", "tam_questions.natquecod", "naturequestion.natquecod") .leftJoin("etatquestion", (join) => join.onRef("tam_questions.etaquecod", "=", (eb) => eb.cast("etatquestion.etaquecod", "bigint"))) .select(({ ref }) => [ "tam_questions.repub as republique", "tam_questions.legislature as legislature", "tam_questions.natquecod as nature", "naturequestion.natquelib as nature_libelle", "tam_questions.numero as numero", "tam_questions.reference as reference", "tam_questions.titre as titre", "tam_questions.nom as nom", "tam_questions.prenom as prenom", "tam_questions.nomtechnique as nom_technique", "tam_questions.codequalite as civilite", "tam_questions.matricule as matricule", "tam_questions.cirnum as circonscription_numero", "tam_questions.circonscription as circonscription", "tam_questions.groupe as groupe", "tam_questions.ratgrp as type_appartenance", toDateString(ref("tam_questions.datejodepot")).as("date_publication_JO"), "tam_questions.pagejodepot as page_JO", rtrim(ref("tam_questions.mindepotlib")).as("ministere_depot"), "tam_questions.mindepotid as ministere_depot_id", toDateString(ref("tam_ministeres.datedebut")).as("ministere_depot_date_debut"), toDateString(ref("tam_questions.datejotran")).as("date_transmission"), "tam_questions.mintranlib as ministere_transmission", toDateString(ref("tam_questions.datejorep1")).as("date_reponse_JO"), toDateString(ref("tam_questions.dateerr")).as("date_erratum_JO"), "tam_questions.pageerr as page_erratum_JO", "tam_questions.minreplib1 as ministere_reponse", toDateString(ref("tam_questions.datecloture")).as("date_cloture"), toDateString(ref("tam_questions.datesignal")).as("date_signalement"), "tam_questions.refquerappelee as reference_question_rappelee", //"tam_questions.url as url", // TODO ? "tam_questions.txtque as texte", "tam_questions.txterrque as texte_erratum", "tam_questions.rubrique as rubrique", "sortquestion.sorquelib as sort", "sortquestion.sorquecod as sort_code", "sortquestion.sorquenumtri as sort_tri", "etatquestion.etaquelib as etat_libelle", "etatquestion.etaquecod as etat_code", "etatquestion.etaquenumtri as etat_tri", themes(ref("tam_questions.id")).as("themes"), reponses(ref("tam_questions.id")).as("reponses"), ]); export function findAll() { return findAllQuery.stream(); }