import DipAPI from './DipAPI' ; import { Vorgang , Vorgangsposition , Fundstelle , VorgangspositionBeschlussfassung , } from '@democracy-deutschland/bt-dip-sdk' ; import { ProceduresArgs } from './types' ; import { UserInputError } from 'apollo-server' ; const germanDateFormat = new Intl . DateTimeFormat ( 'de-DE' , { year : 'numeric' , month : '2-digit' , day : '2-digit' , } ) ; export default { PageInfo : { startCursor : ( ) => '*' , } , Plenum : { editor : ( dok ) => dok . herausgeber , number : ( dok ) => dok . dokumentnummer , link : ( dok ) => dok . pdf_url , pages : ( dok ) => `${ dok . anfangsseite } - ${ dok . endseite }` , } , Document : { editor : ( dok ) => dok . herausgeber , number : ( dok ) => dok . dokumentnummer , type : ( dok ) => dok . drucksachetyp , url : ( dok ) => dok . pdf_url , } , ProcessFlow : { initiator : ( vp ) => { if ( ! vp . fundstelle ?. urheber ?. length ) return vp . vorgangsposition ; return `${ vp . vorgangsposition },  Urheber : ${ vp . fundstelle . urheber . join ( ', ' ) }` ; } , assignment : ( vp ) => vp . fundstelle ?. herausgeber , findSpotUrl : ( vp ) => vp . fundstelle ?. pdf_url , findSpot : ( vp ) => { const { fundstelle } = vp ; if ( ! fundstelle ) return ; const { herausgeber , dokumentart , dokumentnummer } = fundstelle ; const datum = germanDateFormat . format ( new Date ( fundstelle . datum ) ) ; const result = `${ datum } - ${ herausgeber }-${ dokumentart } ${ dokumentnummer }` ; const { anfangsseite , endseite , anfangsquadrant , endquadrant } = fundstelle as Fundstelle ; if ( ! [ anfangsseite , endseite , anfangsquadrant , endquadrant ] . every ( Boolean ) ) return result ; return `${ result }, S. ${ anfangsseite }${ anfangsquadrant } - ${ endseite }${ endquadrant }` ; } , date : ( vp ) => { return vp . fundstelle && new Date ( vp . fundstelle . datum ) . toISOString ( ) ; } , decision : ( vp ) => { return vp . beschlussfassung ; } , } , Decision : { page : ( bf ) => bf . seite , tenor : ( bf ) => bf . beschlusstenor , document : ( bf ) => bf . dokumentnummer , type : ( bf ) => bf . abstimmungsart , comment : ( bf ) => bf . abstimm_ergebnis_bemerkung , foundation : ( bf ) => bf . grundlage , majority : ( bf ) => bf . mehrheit , } , Procedure : { procedureId : ( vorgang ) => vorgang . id , tags : ( vorgang ) => vorgang . deskriptor ?. map ( ( d ) => d . name ) , title : ( vorgang ) => vorgang . titel , type : ( vorgang ) => vorgang . vorgangstyp , currentStatus : ( vorgang ) => vorgang . beratungsstand , period : ( vorgang ) => vorgang . wahlperiode , subjectGroups : ( vorgang ) => vorgang . sachgebiet , date : ( vorgang ) => vorgang . datum , plenums : ( vorgang , _args , { dataSources : { dipAPI } } ) => { return dipAPI . getVorgangsPlenarProtokolle ( vorgang . id ) ; } , importantDocuments : ( vorgang , _args , { dataSources : { dipAPI } } ) => { return dipAPI . getVorgangsDrucksachen ( vorgang . id ) ; } , gestOrderNumber : ( vorgang ) => vorgang . gesta , legalValidity : ( vorgang ) => { if ( ! vorgang . inkrafttreten ) return [ ] ; return vorgang . inkrafttreten . map ( ( ik ) => { const datum = germanDateFormat . format ( new Date ( ik . datum ) ) ; return `${ datum }${ ik . erlaeuterung ? ` (${ ik . erlaeuterung })` : '' }` ; } ) ; } , history : ( vorgang , _args , { dataSources : { dipAPI } } ) => { return dipAPI . getVorgangsVorgangspositionen ( vorgang . id ) ; } , } , Query : { procedure : ( _parent , args , { dataSources : { dipAPI } } ) => { return dipAPI . getVorgang ( args . id ) ; } , procedures : ( _parent , args , { dataSources : { dipAPI } } ) => { if ( args . limit % 50 !== 0 ) throw new UserInputError ( 'DIP has a fixed page size of 50. Make sure your limt is a multiple of 50 to avoid inconsistencies with cursor based pagination.' ) ; return dipAPI . getVorgaenge ( args ) ; } , } , } ;