@tricoteuses/senat
Version:
Handle French Sénat's open data
72 lines (71 loc) • 3.33 kB
JavaScript
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();
}