demarches-normaliennes/app/services/serializer_service.rb

363 lines
7.4 KiB
Ruby

class SerializerService
def self.dossier(dossier)
Sentry.with_scope do |scope|
scope.set_tags(dossier_id: dossier.id)
data = execute_query('serializeDossier', { number: dossier.id })
data && data['dossier']
end
end
def self.dossiers(procedure)
Sentry.with_scope do |scope|
scope.set_tags(procedure_id: procedure.id)
data = execute_query('serializeDossiers', { number: procedure.id })
data && data['demarche']['dossiers']
end
end
def self.demarches_publiques(after: nil)
data = execute_query('serializeDemarchesPubliques', { after: after })
data && data['demarchesPubliques']
end
def self.avis(avis)
data = execute_query('serializeAvis', { number: avis.dossier_id, id: avis.to_typed_id })
data && data['dossier']['avis'].first
end
def self.champ(champ)
Sentry.with_scope do |scope|
scope.set_tags(champ_id: champ.id)
if champ.private?
data = execute_query('serializeAnnotation', { number: champ.dossier_id, id: champ.to_typed_id })
data && data['dossier']['annotations'].first
else
data = execute_query('serializeChamp', { number: champ.dossier_id, id: champ.to_typed_id })
data && data['dossier']['champs'].first
end
end
end
def self.execute_query(operation_name, variables)
result = API::V2::Schema.execute(QUERY,
variables: variables,
context: { internal_use: true },
operation_name: operation_name)
if result['errors'].present?
raise result['errors'].first['message']
end
result['data']
end
QUERY = <<-'GRAPHQL'
query serializeDossiers($number: Int!, $after: String) {
demarche(number: $number) {
dossiers(after: $after) {
nodes {
...DossierFragment
}
pageInfo {
hasNextPage
endCursor
}
}
}
}
query serializeDemarchesPubliques($after: String) {
demarchesPubliques(after: $after) {
nodes {
...DemarcheDescriptorFragment
}
pageInfo {
hasNextPage
endCursor
}
}
}
query serializeDossier($number: Int!) {
dossier(number: $number) {
...DossierFragment
}
}
query serializeAvis($number: Int!, $id: ID!) {
dossier(number: $number) {
avis(id: $id) {
...AvisFragment
}
}
}
query serializeChamp($number: Int!, $id: ID!) {
dossier(number: $number) {
champs(id: $id) {
...ChampFragment
...RepetitionChampFragment
...CarteChampFragment
}
}
}
query serializeAnnotation($number: Int!, $id: ID!) {
dossier(number: $number) {
annotations(id: $id) {
...ChampFragment
...RepetitionChampFragment
...CarteChampFragment
}
}
}
fragment DossierFragment on Dossier {
id
number
archived
state
dateDerniereModification
datePassageEnConstruction
datePassageEnInstruction
dateTraitement
dateDepot
dateSuppressionParUsager
dateSuppressionParAdministration
instructeurs {
email
}
groupeInstructeur {
label
}
champs {
...ChampFragment
...RepetitionChampFragment
...CarteChampFragment
}
annotations {
...ChampFragment
...RepetitionChampFragment
...CarteChampFragment
}
avis {
...AvisFragment
}
demandeur {
...PersonnePhysiqueFragment
...PersonneMoraleFragment
}
motivation
motivationAttachment {
...FileFragment
}
demarche {
number
revision {
id
}
}
}
fragment AvisFragment on Avis {
id
question
reponse
dateQuestion
dateReponse
claimant {
email
}
expert {
email
}
attachment {
...FileFragment
}
}
fragment ChampFragment on Champ {
id
label
stringValue
... on SiretChamp {
etablissement {
...PersonneMoraleFragment
}
}
... on LinkedDropDownListChamp {
primaryValue
secondaryValue
}
... on MultipleDropDownListChamp {
values
}
... on PieceJustificativeChamp {
file {
...FileFragment
}
}
... on AddressChamp {
address {
...AddressFragment
}
}
... on CommuneChamp {
commune {
name
code
}
departement {
name
code
}
}
... on DepartementChamp {
departement {
name
code
}
}
... on RegionChamp {
region {
name
code
}
}
}
fragment RepetitionChampFragment on RepetitionChamp {
rows {
champs {
...ChampFragment
}
}
}
fragment CarteChampFragment on CarteChamp {
geoAreas {
source
description
geometry {
type
coordinates
}
... on ParcelleCadastrale {
prefixe
numero
commune
section
surface
}
}
}
fragment PersonnePhysiqueFragment on PersonnePhysique {
civilite
nom
prenom
dateDeNaissance
}
fragment PersonneMoraleFragment on PersonneMorale {
siret
siegeSocial
naf
libelleNaf
address {
...AddressFragment
}
entreprise {
siren
capitalSocial
numeroTvaIntracommunautaire
formeJuridique
formeJuridiqueCode
nomCommercial
raisonSociale
siretSiegeSocial
codeEffectifEntreprise
dateCreation
nom
prenom
}
association {
rna
titre
objet
dateCreation
dateDeclaration
datePublication
}
}
fragment AddressFragment on Address {
label
type
streetAddress
streetNumber
streetName
postalCode
cityName
cityCode
departmentName
departmentCode
regionName
regionCode
}
fragment FileFragment on File {
filename
checksum
byteSize: byteSizeBigInt
contentType
}
fragment ChampDescriptorFragment on ChampDescriptor {
__typename
label
description
required
... on DropDownListChampDescriptor {
options
otherOption
}
... on MultipleDropDownListChampDescriptor {
options
}
... on LinkedDropDownListChampDescriptor {
options
}
}
fragment DemarcheDescriptorFragment on DemarcheDescriptor {
number
title
description
tags
zones
datePublication
service { nom organisme typeOrganisme }
demarcheUrl
dpoUrl
noticeUrl
siteWebUrl
cadreJuridiqueUrl
logo { ...FileFragment }
notice { ...FileFragment }
deliberation { ...FileFragment }
dossiersCount
revision {
champDescriptors {
...ChampDescriptorFragment
... on RepetitionChampDescriptor {
champDescriptors {
...ChampDescriptorFragment
}
}
}
}
}
GRAPHQL
end