Skip to content
This repository was archived by the owner on Apr 7, 2022. It is now read-only.

Commit

Permalink
feat(titres): archive les titres, les démarches et les étapes (#915)
Browse files Browse the repository at this point in the history
* feat(titres): archive les titres, titres_demarches et titres_etapes

* feat(titres): utilise les droits de modification pour gérer la suppression

* feat(titres): corrige le typage

Co-authored-by: Bitard Michaël <bitard.michael@gmail.com>
  • Loading branch information
vmaubert and MichaelBitard committed Mar 17, 2022
1 parent 35f4424 commit 6488fc8
Show file tree
Hide file tree
Showing 58 changed files with 794 additions and 324 deletions.
2 changes: 1 addition & 1 deletion src/api/_format/users.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { IUtilisateur, IUser } from '../../types'

import { permissionCheck } from '../../tools/permission'
import { permissionCheck } from '../../business/permission'

const userFormat = (utilisateur: IUtilisateur | null) => {
if (!utilisateur) return null
Expand Down
2 changes: 1 addition & 1 deletion src/api/_permissions/utilisateur.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { IUtilisateur, IUtilisateurCreation } from '../../types'
import { permissionCheck } from '../../tools/permission'
import { permissionCheck } from '../../business/permission'
import { emailCheck } from '../../tools/email-check'

const utilisateurEditionCheck = (
Expand Down
41 changes: 2 additions & 39 deletions src/api/graphql/resolvers/_titre-document.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import { join } from 'path'

import {
ITitre,
ITitreDemarche,
ITitreActivite,
IDocumentRepertoire,
ITitreEtape
} from '../../../types'
import { IDocumentRepertoire } from '../../../types'

import { dirDelete } from '../../../tools/dir-delete'

Expand All @@ -22,35 +16,4 @@ const fichiersRepertoireDelete = async (
}
}

const titreEtapesOrActivitesFichiersDelete = async (
repertoire: IDocumentRepertoire,
etapesOrActvites?: ITitreEtape[] | ITitreActivite[] | null
) => {
if (etapesOrActvites?.length) {
for (const ea of etapesOrActvites) {
await fichiersRepertoireDelete(ea.id, repertoire)
}
}
}

const titreDemarchesFichiersDelete = async (
repertoire: IDocumentRepertoire,
demarches?: ITitreDemarche[] | null
) => {
if (demarches?.length) {
for (const dt of demarches) {
await titreEtapesOrActivitesFichiersDelete(repertoire, dt.etapes)
}
}
}

const titreFichiersDelete = async (titre: ITitre) => {
await titreDemarchesFichiersDelete('demarches', titre.demarches)
await titreEtapesOrActivitesFichiersDelete('activites', titre.activites)
}

export {
fichiersRepertoireDelete,
titreEtapesOrActivitesFichiersDelete,
titreFichiersDelete
}
export { fichiersRepertoireDelete }
2 changes: 1 addition & 1 deletion src/api/graphql/resolvers/administrations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import administrationUpdateTask from '../../../business/administration-update'
import { fieldsBuild } from './_fields-build'

import { administrationFormat } from '../../_format/administrations'
import { permissionCheck } from '../../../tools/permission'
import { permissionCheck } from '../../../business/permission'
import { emailCheck } from '../../../tools/email-check'
import { userGet } from '../../../database/queries/utilisateurs'

Expand Down
2 changes: 1 addition & 1 deletion src/api/graphql/resolvers/documents.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import { documentInputValidate } from '../../../business/validations/document-in
import { documentUpdationValidate } from '../../../business/validations/document-updation-validate'
import { entrepriseGet } from '../../../database/queries/entreprises'
import { userGet } from '../../../database/queries/utilisateurs'
import { permissionCheck } from '../../../tools/permission'
import { permissionCheck } from '../../../business/permission'
import { userSuper } from '../../../database/user-super'
import { documentFilePathFind } from '../../../tools/documents/document-path-find'

Expand Down
2 changes: 1 addition & 1 deletion src/api/graphql/resolvers/entreprises.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import { entrepriseFormat } from '../../_format/entreprises'
import { emailCheck } from '../../../tools/email-check'
import { apiInseeEntrepriseAndEtablissementsGet } from '../../../tools/api-insee/index'
import { userGet } from '../../../database/queries/utilisateurs'
import { permissionCheck } from '../../../tools/permission'
import { permissionCheck } from '../../../business/permission'

const entreprise = async (
{ id }: { id: string },
Expand Down
2 changes: 1 addition & 1 deletion src/api/graphql/resolvers/metas-activites.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import {
activitesTypesPaysGet,
activiteTypePaysDelete
} from '../../../database/queries/metas-activites'
import { permissionCheck } from '../../../tools/permission'
import { permissionCheck } from '../../../business/permission'
import { ordreUpdate } from './_ordre-update'

const activitesTypes = async (
Expand Down
2 changes: 1 addition & 1 deletion src/api/graphql/resolvers/metas-join.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import { debug } from '../../../config/index'

import { userGet } from '../../../database/queries/utilisateurs'

import { permissionCheck } from '../../../tools/permission'
import { permissionCheck } from '../../../business/permission'

import {
titresTypesGet,
Expand Down
2 changes: 1 addition & 1 deletion src/api/graphql/resolvers/metas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ import {

import { userGet } from '../../../database/queries/utilisateurs'

import { permissionCheck } from '../../../tools/permission'
import { permissionCheck } from '../../../business/permission'
import { fieldsBuild } from './_fields-build'
import {
etapeTypeFormat,
Expand Down
2 changes: 1 addition & 1 deletion src/api/graphql/resolvers/points.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import { userGet } from '../../../database/queries/utilisateurs'
import { etapeTypeGet } from '../../../database/queries/metas'
import { titreGet, titresGet } from '../../../database/queries/titres'
import { userSuper } from '../../../database/user-super'
import { permissionCheck } from '../../../tools/permission'
import { permissionCheck } from '../../../business/permission'
import intersect from '@turf/intersect'

const stream2buffer = async (stream: Stream): Promise<Buffer> => {
Expand Down
49 changes: 26 additions & 23 deletions src/api/graphql/resolvers/titre-demande.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,17 @@ import dateFormat from 'dateformat'
import {
IToken,
ITitreDemande,
ITitre,
ITitreDemarche,
ITitreEtape,
ISection
ISection,
ITitreEntreprise
} from '../../../types'
import { debug } from '../../../config/index'
import {
userGet,
utilisateurTitreCreate
} from '../../../database/queries/utilisateurs'
import { titreDemandeEntreprisesGet } from '../../../database/queries/entreprises'
import { permissionCheck } from '../../../tools/permission'
import { permissionCheck } from '../../../business/permission'
import { domaineGet, etapeTypeGet } from '../../../database/queries/metas'
import { titreCreate, titreGet } from '../../../database/queries/titres'
import { titreDemarcheCreate } from '../../../database/queries/titres-demarches'
Expand Down Expand Up @@ -86,13 +85,14 @@ const titreDemandeCreer = async (
throw new Error('droits insuffisants')
}
// insert le titre dans la base
let titre = await titreCreate(
const titre = await titreCreate(
{
nom: titreDemande.nom,
typeId: titreDemande.typeId,
domaineId: titreDemande.domaineId,
references: titreDemande.references
} as ITitre,
references: titreDemande.references,
propsTitreEtapesIds: {}
},
{ fields: {} }
)

Expand All @@ -102,27 +102,32 @@ const titreDemandeCreer = async (
const titreDemarche = await titreDemarcheCreate({
titreId,
typeId: 'oct'
} as ITitreDemarche)
})

await titreDemarcheUpdateTask(titreDemarche.id, titreDemarche.titreId)

titre = (await titreGet(
const updatedTitre = await titreGet(
titreId,
{ fields: { demarches: { id: {} } } },
userSuper
)) as ITitre
)

if (!updatedTitre) {
throw new Error('recupération du titre nouvellement créé impossible')
}

const date = dateFormat(new Date(), 'yyyy-mm-dd')
const titreDemarcheId = titre.demarches![0].id
const titreDemarcheId = updatedTitre.demarches![0].id

let titreEtape = {
const titulaire = { id: titreDemande.entrepriseId } as ITitreEntreprise
const titreEtape: Omit<ITitreEtape, 'id'> = {
titreDemarcheId,
typeId: 'mfr',
statutId: 'aco',
date,
duree: titreDemande.typeId === 'arm' ? 4 : undefined,
titulaires: [{ id: titreDemande.entrepriseId }]
} as ITitreEtape
titulaires: [titulaire]
}

let decisionsAnnexesEtapeTypeIds: string[] = []
if (titreDemande.typeId === 'axm') {
Expand Down Expand Up @@ -182,17 +187,15 @@ const titreDemandeCreer = async (
titreEtape.decisionsAnnexesSections.push(decisionAnnexeSections)
}
}
titreEtape = await titreEtapeUpsert(titreEtape, user, titreId)
const updatedTitreEtape = await titreEtapeUpsert(titreEtape, user, titreId)

await titreEtapeUpdateTask(titreEtape.id, titreEtape.titreDemarcheId, user)

titre = (await titreGet(
titreId,
{ fields: { demarches: { etapes: { id: {} } } } },
userSuper
)) as ITitre
await titreEtapeUpdateTask(
updatedTitreEtape.id,
titreEtape.titreDemarcheId,
user
)

const titreEtapeId = titre.demarches![0].etapes![0].id
const titreEtapeId = updatedTitreEtape.id

// on abonne l’utilisateur au titre
await utilisateurTitreCreate({ utilisateurId: user.id, titreId })
Expand Down
8 changes: 2 additions & 6 deletions src/api/graphql/resolvers/titres-demarches.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ import { debug } from '../../../config/index'

import { fieldsBuild } from './_fields-build'

import { titreEtapesOrActivitesFichiersDelete } from './_titre-document'

import { titreFormat } from '../../_format/titres'

import { titreDemarcheFormat } from '../../_format/titres-demarches'
Expand All @@ -23,7 +21,7 @@ import {
titresDemarchesGet,
titreDemarcheCreate,
titreDemarcheUpdate,
titreDemarcheDelete
titreDemarcheArchive
} from '../../../database/queries/titres-demarches'

import { titreGet } from '../../../database/queries/titres'
Expand Down Expand Up @@ -291,9 +289,7 @@ const demarcheSupprimer = async (

if (!demarcheOld.suppression) throw new Error('droits insuffisants')

await titreDemarcheDelete(id)

await titreEtapesOrActivitesFichiersDelete('demarches', demarcheOld.etapes)
await titreDemarcheArchive(id)

await titreDemarcheUpdateTask(null, demarcheOld.titreId)

Expand Down
12 changes: 3 additions & 9 deletions src/api/graphql/resolvers/titres-etapes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,13 @@ import { titreFormat } from '../../_format/titres'

import {
titreEtapeCreate,
titreEtapeDelete,
titreEtapeGet,
titreEtapeUpdate,
titreEtapeUpsert
} from '../../../database/queries/titres-etapes'
import { titreDemarcheGet } from '../../../database/queries/titres-demarches'
import { titreGet } from '../../../database/queries/titres'

import { fichiersRepertoireDelete } from './_titre-document'

import titreEtapeUpdateTask from '../../../business/titre-etape-update'
import {
titreEtapeHeritageBuild,
Expand Down Expand Up @@ -55,7 +52,7 @@ import {
contenuFilesPathGet,
sectionsContenuAndFilesGet
} from '../../../business/utils/contenu-element-file-process'
import { permissionCheck } from '../../../tools/permission'
import { permissionCheck } from '../../../business/permission'
import dateFormat from 'dateformat'
import {
documentCreate,
Expand Down Expand Up @@ -757,7 +754,7 @@ const etapeSupprimer = async (

if (!titreEtape) throw new Error("l'étape n'existe pas")

if (!titreEtape.suppression) throw new Error('droits insuffisants')
if (!titreEtape.modification) throw new Error('droits insuffisants')

const titreDemarche = await titreDemarcheGet(
titreEtape.titreDemarcheId,
Expand Down Expand Up @@ -789,10 +786,7 @@ const etapeSupprimer = async (
if (rulesErrors.length) {
throw new Error(rulesErrors.join(', '))
}

await titreEtapeDelete(id, user!, titreDemarche.titreId)

await fichiersRepertoireDelete(id, 'demarches')
await titreEtapeUpdate(id, { archive: true }, user, titreDemarche.titreId)

await titreEtapeUpdateTask(null, titreEtape.titreDemarcheId, user)

Expand Down
10 changes: 3 additions & 7 deletions src/api/graphql/resolvers/titres.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,14 @@ import { fieldsBuild } from './_fields-build'

import {
titreCreate,
titreDelete,
titreGet,
titresCount,
titresGet,
titreUpsert
titreUpsert,
titreArchive
} from '../../../database/queries/titres'
import { userGet } from '../../../database/queries/utilisateurs'

import { titreFichiersDelete } from './_titre-document'

import titreUpdateTask from '../../../business/titre-update'

import { titreUpdationValidate } from '../../../business/validations/titre-updation-validate'
Expand Down Expand Up @@ -254,9 +252,7 @@ const titreSupprimer = async ({ id }: { id: string }, context: IToken) => {

if (!titreOld.suppression) throw new Error('droits insuffisants')

await titreFichiersDelete(titreOld)

await titreDelete(id)
await titreArchive(id)

return titreOld.slug
}
Expand Down
2 changes: 1 addition & 1 deletion src/api/graphql/resolvers/utilisateurs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import {
import { globales } from '../../../database/cache/globales'

import { utilisateurUpdationValidate } from '../../../business/validations/utilisateur-updation-validate'
import { permissionCheck } from '../../../tools/permission'
import { permissionCheck } from '../../../business/permission'
import { emailCheck } from '../../../tools/email-check'
import { utilisateurEditionCheck } from '../../_permissions/utilisateur'
import { utilisateurFormat } from '../../_format/utilisateurs'
Expand Down
2 changes: 1 addition & 1 deletion src/api/graphql/schemas/titres-demarches.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ type Demarche {
parents: [Demarche]

modification: Boolean
etapesCreation: Boolean
suppression: Boolean
etapesCreation: Boolean
}

"Phase d'un titre minier"
Expand Down
1 change: 0 additions & 1 deletion src/api/graphql/schemas/titres-etapes.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@ type Etape {
decisionsAnnexesContenu: Json

modification: Boolean
suppression: Boolean
deposable: Boolean
}

Expand Down
6 changes: 2 additions & 4 deletions src/tools/permission.ts → src/business/permission.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { IUtilisateur, IPermissionId } from '../types'

const permissionCheck = (
export const permissionCheck = (
permissionId: IPermissionId | null | undefined,
permissions: IPermissionId[]
) => !!(permissionId && permissions.includes(permissionId))

const permissionAdministrationsCheck = (
export const permissionAdministrationsCheck = (
user: IUtilisateur | undefined,
administrationsIds: string[]
) =>
Expand All @@ -16,5 +16,3 @@ const permissionAdministrationsCheck = (
administrationsIds.length &&
user.administrations.some(ua => administrationsIds.includes(ua.id))
)

export { permissionCheck, permissionAdministrationsCheck }
Loading

0 comments on commit 6488fc8

Please sign in to comment.