UNPKG

@tricoteuses/senat

Version:

Handle French Sénat's open data

87 lines (83 loc) 1.84 kB
import { Ses, sesFieldsToParseInt, sesFieldsToTrim, Sub, subFieldsToParseInt, subFieldsToTrim, TxtAmeli, txtAmeliFieldsToTrim } from '../types/ameli' import { dbByName } from "../databases" import { parseIntFields, trimFieldsRight } from '../fields' export const getSessFromAnns = async (ids: string[]): Promise<Ses[]> => { if (ids.length === 0) { return [] } return ( await dbByName.ameli.any( ` SELECT * FROM ses WHERE ann IN ($<ids:list>) `, { ids, }, ) ).map((ses: Ses) => parseIntFields(sesFieldsToParseInt, trimFieldsRight(sesFieldsToTrim, ses)), ) } export const getSubsFromTxtids = async (ids: string[]): Promise<Sub[]> => { if (ids.length === 0) { return [] } return ( await dbByName.ameli.any( ` SELECT * FROM sub WHERE txtid IN($<ids:list>) `, { ids, }, ) ).map((sub: Sub) => parseIntFields(subFieldsToParseInt, trimFieldsRight(subFieldsToTrim, sub)), ) } export const getTxtsAmeliBySesannNumJoins = async ( ids: string[], ): Promise<TxtAmeli[]> => { if (ids.length === 0) { return [] } const txtsAmelis = [] for (const id of ids) { const idSplit = id.split(" ") const sesann = parseInt(idSplit[0]) const num = idSplit[1] const txtAmeli = trimFieldsRight( txtAmeliFieldsToTrim, await dbByName.ameli.oneOrNone( ` SELECT * FROM txt_ameli WHERE sesinsid in ( SELECT id FROM ses WHERE ann = $<sesann> ) AND num = $<num> LIMIT 1 `, { num, sesann, }, ), ) as TxtAmeli if (txtAmeli !== null) { txtsAmelis.push(txtAmeli) } } return txtsAmelis }