UNPKG

@tricoteuses/senat

Version:

Handle French Sénat's open data

72 lines (71 loc) 3.33 kB
import { jsonArrayFrom } from "kysely/helpers/postgres"; import { dbQuestions } from "../databases"; import { expandToRows, rtrim, toDateString } from "./util"; function reponses(questionId) { return jsonArrayFrom(dbQuestions .selectFrom("tam_reponses") .where("tam_reponses.idque", "=", questionId) .select(({ ref }) => [ toDateString(ref("tam_reponses.datejorep")).as("date_reponse_JO"), "tam_reponses.minreplib as ministere_reponse", "tam_reponses.txtrep as texte", "tam_reponses.txterrrep as texte_erratum", ]) .orderBy("tam_reponses.datejorep asc")); } function themes(questionId) { return jsonArrayFrom(dbQuestions .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 = dbQuestions .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", "sortquestion.sorquelib as sort", "tam_questions.natquecod as nature", "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.codequalite as civilite", "tam_questions.matricule as matricule", "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"), rtrim(ref("tam_questions.mindepotlib")).as("ministere_depot"), 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"), "tam_questions.minreplib1 as ministere_reponse", toDateString(ref("tam_questions.datecloture")).as("date_cloture"), "tam_questions.refquerappelee as reference_question_rappelee", //"tam_questions.url as url", // TODO ? "tam_questions.txtque as texte", "tam_questions.txtque as texte_erratum", "tam_questions.rubrique as rubrique", themes(ref("tam_questions.id")).as("themes"), reponses(ref("tam_questions.id")).as("reponses"), ]); export function findAll() { return findAllQuery.stream(); }