Skip to content

Créer une nouvelle source de données (csv)

Flavien Beninca edited this page Aug 4, 2020 · 2 revisions

Ajouter la table dans postgres

La première chose à faire est de créer une nouvelle table dans postgres qui aura la même structure que le csv.

Attention ne pas oublié de créer une colonne siren

Il ne faut pas non plus oublié d'ajouter un index sur les colonnes siren et siret

Pour créer la table nous utilisons l'outil de migration.

Créer la migration

# CreateMyNewSource = nom de la migration
c42 server:migrate create CreateMyNewSource

Documentation node-pg-migrate

Exécuter la migration

c42 server:migrate:up

Ajouter la configuration de l'importer

Documentation

Server

Ajouter le(s) champ qui seront envoyé au front

  • Etablissement :
// src/frentreprise/models/Etablissement.js
class DireccteEtablissement extends Etablissement {
  export() {
    return {
      ...copyKeys(
        this,
        [
          //...
          "maCléPourLeFront"
  • Entreprise :

Ci besoin pour la fiche entreprise procéder comme pour l'établissement en ajoutant la clé dans src/frentreprise/models/Entreprise.js

Frentreprise

Model

Créer le modèle Sequelize dans src/Models en s'inspirant des autres modèles

Documentation Sequelize

Exemple de modèle

const monModele = (sequelize, DataTypes) => {
  const MonModele = sequelize.define(
    "monModele",
    {
      siret: DataTypes.STRING,
      siren: DataTypes.STRING,
      unChamp: DataTypes.STRING,
    },
    {
      tableName: "ma_table",
    }
  );

  return MonModele;
};

export default monModele;
  • Ajouter le liaison avec le modèle etablissement
// Pour des modèles simple (qui n'ont pas de liaison avec d'autres modèles
const associatedSources = [
  // ...
  { type: "hasOne", model: "MonModele" },
];

// Si le modèle à des associations avec d'autres modèles il faut ajouter la liaison directement plus bas
Etablissement.associate = (models) => {
  // ...
  Etablissement.hasOne(models.MonModele, {
    foreignKey: "siret",
    sourceKey: "siret",
  });
  • Ajouter le liaison avec le modèle entreprise
Entreprise.associate = (models) => {
  // ...
  Entreprise.hasMany(models.MonModele, {
    foreignKey: "siren",
    sourceKey: "siren",
  });

Getters

  • Etablissement (uniquement pour les modèles complexe qui ont des associations)
// src/DataSources/PG/Siret/getSettlement.js
const includes = [
  // ...
  {
    model: models.MonModele,
    include: [models.AutreModele],
  },
  • Entreprise (si besoin)
// src/DataSources/PG/Siren/getEntreprise.js
const sources = [
  ...models.Entreprise.associatedSources,
  ...[
    // ...
    {
      model: "MonModele",
      include: [models.Etablissement],
      entity: "monModeles",
    }

Formatters

  • Etablissement

Créer le fichier de formatage

// src/DataSources/PG/Format/establishmentSources/monModele.js

export default (data) => {
  // Faire mon traitement

  return {
    maCléPourLeFront: data
  }
}
  • Entreprise

Si nécessaire se calquer sur le même fonctionnement et créer un fichier dans src/DataSources/PG/Format/enterpriseSources