Skip to content
Snippets Groups Projects
Commit 5e06250a authored by Francois Romain's avatar Francois Romain
Browse files

feat: importe et exporte les rapports de travaux

parent ef633deb
Branches
Tags
No related merge requests found
Showing with 137 additions and 54 deletions
......@@ -38,4 +38,5 @@ GOOGLE_SPREADSHEET_ID_ENTREPRISES=""
GOOGLE_SPREADSHEET_ID_UTILISATEURS=""
GOOGLE_SPREADSHEET_ID_PERMISSIONS=""
GOOGLE_SPREADSHEET_ID_ADMINISTRATIONS=""
GOOGLE_SPREADSHEET_ID_SUBSTANCES=""
\ No newline at end of file
GOOGLE_SPREADSHEET_ID_SUBSTANCES=""
GOOGLE_SPREADSHEET_ID_TITRES_TRAVAUX_RAPPORTS=""
\ No newline at end of file
const jsonToSpreadsheet = require('./json-to-spreadsheet')
const credentials = require('../credentials')
const dbProcess = async definition => {
const content = await definition.fetch
await jsonToSpreadsheet(
definition.spreadsheetId,
credentials,
definition.tables,
content
)
}
module.exports = dbProcess
......@@ -12,7 +12,12 @@ const {
cellValueSet
} = require('./google-spreadsheet-promisify')
const dbToSpreadsheet = async (spreadsheetId, credentials, tables, content) => {
const jsonToSpreadsheet = async (
spreadsheetId,
credentials,
tables,
content
) => {
// instancie le constructeur
const gss = new GoogleSpreadsheet(spreadsheetId)
......@@ -115,8 +120,8 @@ const rowsCreate = (elements, parents) => {
[]
)
: Array.isArray(elements)
? elements
: [elements]
? elements
: [elements]
}
const rowFormat = (element, columns, callbacks) =>
......@@ -135,4 +140,4 @@ const rowFormat = (element, columns, callbacks) =>
{}
)
module.exports = dbToSpreadsheet
module.exports = jsonToSpreadsheet
const { titresGet } = require('../../postgres/queries/titres')
const { utilisateursGet } = require('../../postgres/queries/utilisateurs')
const {
titresTravauxRapportsGet
} = require('../../postgres/queries/titres-travaux')
const titresTables = require('./tables-titres')
const utilisateursTables = require('./tables-utilisateurs')
const titresTables = require('./tables/titres')
const utilisateursTables = require('./tables/utilisateurs')
const titresTravauxRapportsTables = require('./tables/titres-travaux')
const titresCSpreadsheetId = process.env.GOOGLE_SPREADSHEET_ID_EXPORT_TITRES_C
const titresFSpreadsheetId = process.env.GOOGLE_SPREADSHEET_ID_EXPORT_TITRES_F
......@@ -14,6 +18,8 @@ const titresSSpreadsheetId = process.env.GOOGLE_SPREADSHEET_ID_EXPORT_TITRES_S
const titresWSpreadsheetId = process.env.GOOGLE_SPREADSHEET_ID_EXPORT_TITRES_W
const utilisateursSpreadsheetId =
process.env.GOOGLE_SPREADSHEET_ID_EXPORT_UTILISATEURS
const titresTravauxRapportsSpreadsheetId =
process.env.GOOGLE_SPREADSHEET_ID_EXPORT_TITRES_TRAVAUX_RAPPORTS
// const metasSpreadsheetId = process.env.GOOGLE_SPREADSHEET_ID_EXPORT_METAS
// const entreprisesSpreadsheetId =
// process.env.GOOGLE_SPREADSHEET_ID_EXPORT_ENTREPRISES
......@@ -31,62 +37,76 @@ const titresFetch = domaineId =>
noms: undefined
})
const utilisateursFetch = () => utilisateursGet({})
const utilisateursFetch = () =>
utilisateursGet({
noms: undefined,
entrepriseIds: undefined,
administrationIds: undefined,
permissionIds: undefined
})
const titresTravauxRapportsFetch = () => titresTravauxRapportsGet()
const definitions = [
{
name: 'utilisateurs',
id: utilisateursSpreadsheetId,
spreadsheetId: utilisateursSpreadsheetId,
fetch: utilisateursFetch(),
tables: utilisateursTables
},
{
name: 'titres-c',
id: titresCSpreadsheetId,
spreadsheetId: titresCSpreadsheetId,
fetch: titresFetch('c'),
tables: titresTables
},
{
name: 'titres-f',
id: titresFSpreadsheetId,
spreadsheetId: titresFSpreadsheetId,
fetch: titresFetch('f'),
tables: titresTables
},
{
name: 'titres-g',
id: titresGSpreadsheetId,
spreadsheetId: titresGSpreadsheetId,
fetch: titresFetch('g'),
tables: titresTables
},
{
name: 'titres-h',
id: titresHSpreadsheetId,
spreadsheetId: titresHSpreadsheetId,
fetch: titresFetch('h'),
tables: titresTables
},
{
name: 'titres-m',
id: titresMSpreadsheetId,
spreadsheetId: titresMSpreadsheetId,
fetch: titresFetch('m'),
tables: titresTables
},
{
name: 'titres-r',
id: titresRSpreadsheetId,
spreadsheetId: titresRSpreadsheetId,
fetch: titresFetch('r'),
tables: titresTables
},
{
name: 'titres-s',
id: titresSSpreadsheetId,
spreadsheetId: titresSSpreadsheetId,
fetch: titresFetch('s'),
tables: titresTables
},
{
name: 'titres-w',
id: titresWSpreadsheetId,
spreadsheetId: titresWSpreadsheetId,
fetch: titresFetch('w'),
tables: titresTables
},
{
name: 'titres-travaux-rapports',
spreadsheetId: titresTravauxRapportsSpreadsheetId,
fetch: titresTravauxRapportsFetch(),
tables: titresTravauxRapportsTables
}
]
......
require('dotenv').config()
require('../../postgres/index')
const PQueue = require('p-queue')
const jsonToSpreadsheet = require('./_utils/json-to-spreadsheet')
const dbProcess = require('./_utils/db-process')
const credentials = require('./credentials')
const definitions = require('./definitions')
const run = async () => {
// on utilise une queue plutôt que Promise.all
// pour ne pas surcharger l'API de google
const spreadSheetsPromises = definitions.map(d => () => dbProcess(d))
const spreadSheetsPromises = definitions.map(definition => () =>
dbProcess(definition)
)
const spreadSheetsQueue = new PQueue({ concurrency: 1 })
await spreadSheetsQueue.addAll(spreadSheetsPromises)
}
const dbProcess = async s => {
const content = await s.fetch
await jsonToSpreadsheet(s.id, credentials, s.tables, content)
}
run()
const dateFormat = require('dateformat')
// liste des tables
// la colonne id si elle existe doit être en première position
// car c'est un mot clé réservé par l'API google
// (cf: _utils/json-to-spreadsheet.js)
const tables = [
{
name: 'titresTravauxRapports',
columns: ['id', 'titreId', 'date', 'contenu'],
callbacks: {
contenu: v => JSON.stringify(v),
date: v => dateFormat(v, 'yyyy-mm-dd')
}
}
]
module.exports = tables
......@@ -3,7 +3,7 @@ const dateFormat = require('dateformat')
// liste des tables
// la colonne id si elle existe doit être en première position
// car c'est un mot clé réservé par l'API google
// (cf: _titres-db-to-spreadsheet.js)
// (cf: _utils/json-to-spreadsheet.js)
const tables = [
{
name: 'titres',
......
const PQueue = require('p-queue')
const GoogleSpreadsheet = require('google-spreadsheet')
const decamelize = require('decamelize')
const {
gssUseServiceAccountAuth,
rowAdd
} = require('./google-spreadsheet-promisify')
const rowToSpreadsheetAdd = async (
spreadsheetId,
credentials,
tables,
content
) => {
// instancie le constructeur
const gss = new GoogleSpreadsheet(spreadsheetId)
// authentification dans google
await gssUseServiceAccountAuth(gss, credentials)
}
require('dotenv').config()
require('../../postgres/index')
const dbProcess = require('./_utils/db-process')
const definitions = require('./definitions')
const titresTravauxRapportsDefinition = definitions.find(
definition => definition.name === 'titresTravauxRapports'
)
const run = async () => dbProcess(titresTravauxRapportsDefinition)
run()
require('dotenv').config()
require('../../postgres/index')
const jsonToSpreadsheet = require('./_utils/json-to-spreadsheet')
const credentials = require('./credentials')
const dbProcess = require('./_utils/db-process')
const definitions = require('./definitions')
const utilisateursDefinition = definitions.find(
definition => definition.name === 'utilisateurs'
)
const run = async () => {
await dbProcess(utilisateursDefinition)
}
const dbProcess = async definition => {
const content = await definition.fetch
await jsonToSpreadsheet(
definition.id,
credentials,
definition.tables,
content
)
}
const run = async () => dbProcess(utilisateursDefinition)
run()
......@@ -14,8 +14,10 @@ const permissionsSpreadsheetId = process.env.GOOGLE_SPREADSHEET_ID_PERMISSIONS
const administrationsSpreadsheetId =
process.env.GOOGLE_SPREADSHEET_ID_ADMINISTRATIONS
const substancesSpreadsheetId = process.env.GOOGLE_SPREADSHEET_ID_SUBSTANCES
const titresTravauxRapportsSpreadsheetId =
process.env.GOOGLE_SPREADSHEET_ID_TITRES_TRAVAUX_RAPPORTS
const titresCb = value => json =>
const jsonParse = value => json =>
json.map(j =>
Object.keys(j).reduce((res, cur) => {
res[cur] = cur === value ? JSON.parse(j[cur]) : j[cur]
......@@ -24,9 +26,9 @@ const titresCb = value => json =>
)
const titresTables = [
{ name: 'titres', cb: titresCb('references') },
{ name: 'titres', cb: jsonParse('references') },
{ name: 'titres_demarches' },
{ name: 'titres_etapes', cb: titresCb('visas') },
{ name: 'titres_etapes', cb: jsonParse('visas') },
{ name: 'titres_points' },
{ name: 'titres_points_references' },
{ name: 'titres_documents' },
......@@ -37,14 +39,6 @@ const titresTables = [
{ name: 'titres_erreurs' }
]
const substancesCb = json =>
json.map(j =>
Object.keys(j).reduce((res, cur) => {
res[cur] = cur === 'alias' ? j[cur].split(' ; ') : j[cur]
return res
}, {})
)
const spreadSheets = [
{
name: 'titres-c',
......@@ -155,11 +149,16 @@ const spreadSheets = [
name: 'substances',
id: substancesSpreadsheetId,
tables: [
{ name: 'substances', cb: substancesCb },
{ name: 'substances' },
{ name: 'substances_legales' },
{ name: 'substances_legales_codes' },
{ name: 'substances__substances_legales' }
]
},
{
name: 'titresTravauxRapports',
id: titresTravauxRapportsSpreadsheetId,
tables: [{ name: 'titres_travaux_rapports', cb: jsonParse('contenu') }]
}
]
......
const titresTravauxRapports = require('../../sources/titres-travaux-rapports.json')
exports.seed = (knex, Promise) =>
knex('titresTravauxRapports')
.del()
.then(() => knex('titresTravauxRapports').insert(titresTravauxRapports))
const titreTravauxRapports = require('../models/titres-travaux-rapports')
const queries = {
async titresTravauxRapportsGet() {
return titreTravauxRapports.query().skipUndefined()
},
async titreTravauxRapportAdd({ titreTravauxRapport }) {
return titreTravauxRapports
.query()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment