Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEATURE] Ajout de script pour supprimer des orga, dpo et tags associés (PIX-16091) #11124

Open
wants to merge 5 commits into
base: dev
Choose a base branch
from

Conversation

bpetetot
Copy link
Contributor

@bpetetot bpetetot commented Jan 15, 2025

🥞 Problème

Suite à une mauvaise manipulation sur Pix admin, des organisations ont été ajoutées en double et il faudrait les retirer.

🥓 Proposition

Concevoir un script qui va parcourir le csv contenant tous les identifiants des organisations à supprimer et va successivement:

  • Supprimer l'organisation de la table data-protection-officers,
  • Supprimer l'association de l'organisation et de tous ces tags dans la table organization-tags,
  • Supprimer l'organisation de la table organizations.

🧃 Remarques

Ce script n'a pas vocation à rester, mais il a permis d'ajouter les méthodes suivantes:

  • Supprimer une dpo,
  • Retirer tous les tags associés à une organisation sans supprimer les tags,
  • Supprimer une organisation.

😋 Pour tester

Le teste peut être fait en RA, mais il est plus simple et confortable de le faire en local. La procédure ne diffère cependant pas beaucoup.

En local:

  • Faire un reset de la db pour avoir le nouveau seed:
cd api
npm run db:reset
  • Lancer l'api et pix-admin,
  • Se connecter sur pix-admin avec le compte [email protected],
  • Sur la page des organisations, constater que l'organisation "Accis est présente,
  • Noter son identifiant,
  • Créer un fichier .csv avec le contenu suivant:
"organization ID";
<identifiant de l'organisation>;
  • Sauvegarder le fichier,
  • Dans le dossier api, exécuter ce script:
node api/src/organizational-entities/scripts/delete-organizations-script.js --dryRun --file <chemin/vers/votre/fichier.csv>

L'option dryRun est une sécurité, elle n'efface pas les éléments. Un message de ce type sera affiché:
"Would delete {nombre} organizations.".

  • Répéter la même commande en supprimant l'option --dryRun, soit:
node api/src/organizational-entities/scripts/delete-organizations-script.js --file <chemin/vers/votre/fichier.csv>

Cette fois, le message "Deleted {nombre} organizations." sera afiché.

  • Retourner sur Pix admin et constater dans la liste des organisations que "Accis" a disparru.

En RA

  • Se connecter sur pix-admin avec le compte [email protected],
  • Sur la page des organisations, constater que l'organisation "Accis est présente,
  • Noter son identifiant,
  • Créer un fichier .csv avec le contenu suivant:
"organization ID";
<identifiant de l'organisation>;
  • Sauvegarder le fichier,
  • En ligne de commande, avec scalingo connecté, exécuter la commande suivante:
scalingo -a pix-api-review-pr11124 run --file <chemin/vers/votre/fichier.csv> /src/organizational-entities/scripts/delete-organizations-script.js --dryRun --file /tmp/uploads/<fichier.csv>

L'option dryRun est une sécurité, elle n'efface pas les éléments. Un message de ce type sera affiché "Would delete {nombre} organizations.".

  • Répéter la même commande en supprimant l'option --dryRun, soit:
scalingo -a pix-api-review-pr11124 run --file <chemin/vers/votre/fichier.csv> /src/organizational-entities/scripts/delete-organizations-script.js --file /tmp/uploads/<fichier.csv>

Cette fois, le message "Deleted {nombre} organizations." sera afiché.

  • Retourner sur Pix admin et constater dans la liste des organisations que "Accis" a disparru,
  • Afin de permettre aux personnes suivante de tester, relancez les seeds avec cette commande:
scalingo -a pix-api-review-pr11124 run npm run db:seed

@pix-bot-github
Copy link

Une fois les applications déployées, elles seront accessibles via les liens suivants :

Les variables d'environnement seront accessibles via les liens suivants :

@bpetetot bpetetot force-pushed the pix-16091-script-to-delete-deplicated-orga branch 2 times, most recently from 46a8465 to 683ca74 Compare January 15, 2025 13:49
@theotime2005 theotime2005 force-pushed the pix-16091-script-to-delete-deplicated-orga branch 10 times, most recently from 374e1a1 to afefd95 Compare January 17, 2025 09:31
@theotime2005 theotime2005 changed the title [FEATURE] Ajout de script pour supprimer des orga et tags associés (PIX-16091) [FEATURE] Ajout de script pour supprimer des orga, dpo et tags associés (PIX-16091) Jan 17, 2025
theotime2005 and others added 5 commits January 17, 2025 10:44
Co-Authored-By: EmmanuelleBonnemay <[email protected]>
Co-Authored-By: Benjamin Petetot <[email protected]>
Co-Authored-By: EmmanuelleBonnemay <[email protected]>
Co-Authored-By: Benjamin Petetot <[email protected]>
in data-protection-officer repository
Co-Authored-By: EmmanuelleBonnemay <[email protected]>
Co-Authored-By: Benjamin Petetot <[email protected]>
@theotime2005 theotime2005 force-pushed the pix-16091-script-to-delete-deplicated-orga branch from afefd95 to 92d5a05 Compare January 17, 2025 09:44
@theotime2005 theotime2005 marked this pull request as ready for review January 17, 2025 10:53
@theotime2005 theotime2005 requested a review from a team as a code owner January 17, 2025 10:53
Comment on lines +219 to +222
const deleteById = async function (id) {
const deleteCount = await knex(ORGANIZATIONS_TABLE_NAME).where({ id }).del();
return deleteCount === 1;
};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion de nommage d'argument organizationId plus explicite et qui est plus la norme dans la base de code.

De plus le deleteCount ne sert jamais à rien dans le code de production (c'est à dire hors tests), en effet soit la suppression est un succès, soit il y a une erreur et une exception sera levée. Mettre à jour les tests pour ne pas chercher à utiliser la valeur de retour booléenne précédente. Enfin, les tests testent déjà bien que la suppression est effective.

Suggested change
const deleteById = async function (id) {
const deleteCount = await knex(ORGANIZATIONS_TABLE_NAME).where({ id }).del();
return deleteCount === 1;
};
const deleteById = async function (organizationId) {
await knex(ORGANIZATIONS_TABLE_NAME).where({ id: organizationId }).del();
};

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants