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

Behavior in case of deletion #35

Open
oliverpool opened this issue Feb 14, 2014 · 19 comments
Open

Behavior in case of deletion #35

oliverpool opened this issue Feb 14, 2014 · 19 comments
Labels
Milestone

Comments

@oliverpool
Copy link
Contributor

Histoire de faire un truc clair (et si possible avoir une conclusion définitive).

Comment veut-on gérer les suppressions des éléments suivants (et dans quels cas une telle suppression à lieu):

  • utilisateur
  • chant
  • artiste
  • carnet
  • repository
@oliverpool
Copy link
Contributor Author

Je propose:

utilisateur

Ses carnets sont supprimés ("désinscription")

carnet

Suppression des éléments relatifs au carnet (seulement des liaisons)

artiste
chant

Suppression des chants et de l'artiste correspondant, aucune compilation possible à l'avenir (la suppression est demandée par les ayants droits)

repository

Suppression des chants concernés, et des artistes si ils n'ont plus de chant

Ma proposition est assez extrême : si des éléments ont été supprimés, ils ne sont pas récupérables et ne seront pas compilés

@Luthaf
Copy link
Contributor

Luthaf commented Feb 14, 2014

utilisateur

La politique "traditionnelle" de Django dans ce cas est d'utiliser le champ is_active en le mettant à False. L'utilisateur ne peut plus se connecter, mais on garde les données (je crois que l'on est obligé de toute façon).

Pour le reste, je suis d'accord avec toi. Il reste quand même le cas d'une suppression pour cause de duplication. On peut ajouter quelques méthodes pour gérer ça.

@oliverpool
Copy link
Contributor Author

utilisateur

ok pour le désactiver, mais est-ce qu'on garde ses carnets de chants ? (publics / privés)

@Luthaf
Copy link
Contributor

Luthaf commented Feb 15, 2014

Les publics oui, et les privés, ça ne coute pas grand chose en fait.

@oliverpool
Copy link
Contributor Author

Ben, ca dépend de la forme de stockage des carnets de chants (à l'heure actuelle c'est quand même pas mal de lignes dans pas mal de tables différentes)

@Luthaf
Copy link
Contributor

Luthaf commented Feb 16, 2014

Pour les carnets, on est pas obligé de les supprimer (il n'y a pas de problème légal je pense), et même si on a 2000 utilisateurs, avec 4 carnets chacun, ça fait quelque chose comme 20 000 entrée dans la base. Ce n'est pas forcément très grave.

Mais oui, on peut aussi supprimer les entrées correspondants aux carnets privés dans le cas d'une demande de suppression de compte par l'utilisateur.

@oliverpool
Copy link
Contributor Author

Un carnet c'est une entrée dans la table "Songbook" et une centaine dans la table "ItemsInSongbook" (+ SongInSongbook, ArtisitInSongbook)... ca fait un peu plus que 20 000!

Mais oui, on peut aussi supprimer les entrées correspondants aux carnets privés dans le cas d'une demande de suppression de compte par l'utilisateur.

Dans ce cas, il peut les supprimer lui-même avant de demander la suppression

@Luthaf
Copy link
Contributor

Luthaf commented Feb 16, 2014

Pas faux =)

Je vais regarder s'il y a un signal Django de désactivation d'un utilisateur. Il pourrait servir à supprimer ses carnets lors de la désactivation, en filtrant les carnets privé/publics.

@jmclem
Copy link
Contributor

jmclem commented Feb 16, 2014

@oliverpool : je te sens très crispé à l'égard de ce que j'ai codé; c'est pas la peine :) : comme je l'ai déjà dit, si ce n'est pas la bonne solution, je n'ai aucun problème à le modifier.

Revenons à la discussion.

Est-ce-que je me trompe, où on se retrouve peu à peu dans le cas proposé il y a une semaine :

  • on balance la gestion de version par dessus bord et on ne travaille qu'avec la dernière version d'un chant. Si le chant n'existe plus, il disparaît du carnet. Si quelqu'un a renommé/déplacé un fichier, il disparaît, à l'utilisateur de retourner inclure à nouveau le chant.

?

Parce que, pour la cohérence, je ne vois pas pourquoi s'embêter à gérer d'anciennes versions de chants pour des carnets existants alors qu'on supprime des carnets les chants qui disparaissent de la repo.

Je penche de plus en plus pour cette solution. On oublie les différentes versions de chants pour les différents carnets; il y a une version : celle du head, point barre. Au moins dans un premier temps. Je pense qu'il sera possible de revenir dessus si un fort souhait s'exprimait.

Pour l'archivage, on explique aux utilisateurs qu'ils sont responsables de la conservation de leur PDF, et que rien ne garantit qu'ils pourront le regénérer tel quel.

@Luthaf
Copy link
Contributor

Luthaf commented Feb 16, 2014

Parce que, pour la cohérence, je ne vois pas pourquoi s'embêter à gérer d'anciennes versions de chants pour des carnets existants alors qu'on supprime des carnets les chants qui disparaissent de la repo.

Pour moi ce n'est pas la même chose : on supprime les carnets en même temps que les utilisateurs, et les chants si on a la demande des ayant-droits, mais on garde la possibilité qu'il existe plusieurs versions, et on laisse aux utilisateur le choix de la leur.

Au moins dans un premier temps. Je pense qu'il sera possible de revenir dessus si un fort souhait s'exprimait.

Ça peut en effet être une solution : on lance le truc, puis on demande s'il y a des intéressés =)

@oliverpool
Copy link
Contributor Author

Au moins dans un premier temps. Je pense qu'il sera possible de revenir dessus si un fort souhait s'exprimait.

Ça peut en effet être une solution : on lance le truc, puis on demande s'il y a des intéressés =)

Effectivement c'est une bonne idée. En plus, une fois le site lancé, les utilisateurs auront peut-être des besoins et des idées différentes !


@oliverpool : je te sens très crispé à l'égard de ce que j'ai codé; c'est pas la peine :) : comme je l'ai déjà dit, si ce n'est pas la bonne solution, je n'ai aucun problème à le modifier.

"Crispé" est peut-être un peu fort (et de toute les manières, je continuerai de contribuer au design, quelque soit le back-end ;-)


Donc du coup on on dit que dans un premier temps on supporte une seule version (l'actuelle) ?
Ça simplifie la BDD et la génération du pdf (on peut utiliser les mêmes fichiers). Et pour la suite, on verra en fonction des souhaits/avis utilisateurs ?
[et puis du coup on se rapproche de notre ligne de conduite initiale : avoir quelque chose de simple, mais fonctionnel]

@Luthaf
Copy link
Contributor

Luthaf commented Feb 16, 2014

Allons-y !

Je propose aussi une remise à plat des migrations south au passage, j'ai eu quelques difficultés pour passer à la dernière version =)

@jmclem
Copy link
Contributor

jmclem commented Feb 16, 2014

Ok !

Quelques aspects qui en découlent :

  • on garde l'object hash, le commit hash n'est plus nécessaire. A-t-on besoin d'une table GitFile ? On pourrait mettre l'object hash et le chemin dans Song à mon avis.
  • Quand un chant est supprimé : on pourrait garder le Song et mettre le chemin à NULL. Ainsi, il est possible de faire savoir à l'utilisateur que le chant "Tralala" a été supprimé et ne peut plus être utilisé pour générer un carnet
  • ceci est valable quelque soit la source de suppression : via l'application par un admin ou via un pull sur la repo
  • On peut aujourd'hui importer (importsongs), il va falloir une fonction de mise à jour (même script avec des paramètres ou second script). En comparant les object hashes, il sera possible de savoir qu'une mise à jour d'un chant est nécessaire et de la faire. Il faudra aussi vérifier quels chants en db n'ont plus de fichier correspondant (en essayant de détecter les déplacements / renommages)
  • Tous les *InSongbook peuvent disparaître

@oliverpool
Copy link
Contributor Author

  • Quand un chant est supprimé : on pourrait garder le Song et mettre le chemin à NULL. Ainsi, il est possible de faire savoir à l'utilisateur que le chant "Tralala" a été supprimé et ne peut plus être utilisé pour générer un carnet

Excellente idée !

  • On peut aujourd'hui importer (importsongs), il va falloir une fonction de mise à jour (même script avec des paramètres ou second script). En comparant les object hashes, il sera possible de savoir qu'une mise à jour d'un chant est nécessaire et de la faire. Il faudra aussi vérifier quels chants en db n'ont plus de fichier correspondant (en essayant de détecter les déplacements / renommages)

Bonne idée aussi (mais qui va pas être évidente à coder).
Ça pose aussi la question de gérer plusieurs repo (dans un premier temps, on peut dire que non...)

@jmclem
Copy link
Contributor

jmclem commented Feb 17, 2014

Ça pose aussi la question de gérer plusieurs repo

et de différents types : fs simple, vcs, db, web api, ... rhôôoô, c'est bô...

dans un premier temps, on peut dire que non...

oui, heu... non... enfin, on est raisonnable et on attend, quoi ;)

@Luthaf
Copy link
Contributor

Luthaf commented Feb 17, 2014

A-t-on besoin d'une table GitFile ? On pourrait mettre l'object hash et le chemin dans Song à mon avis.

Et pourquoi pas dans une classe abstraite dont hériterai Song ? Ce n'est pas beaucoup plus compliqué, et on peut aussi s'en servir pour d'autres types de fichiers : illustrations d'albums, intersongs, chants persos, ...

@jmclem
Copy link
Contributor

jmclem commented Feb 17, 2014

Et pourquoi pas dans une classe abstraite dont hériterai Song ?

parce qu'un fichier n'est pas une généralisation d'un chant pour notre application, ça irait donc contre un des principes de l'OOP. À juste titre : je peux envisager d'avoir des chants qui n'ont qu'une représentation en BDD, ou que je récupère via une API Web, auquel cas l'abstraction imposée 'GitFile' me gènerait.

on peut aussi s'en servir pour d'autres types de fichiers : illustrations d'albums, intersongs, chants persos, ...

... qui peuvent aussi avoir d'autres formes de stockage qu'un fichier GIT (URL, ...).

Ce qui serait (enfin, sera un jour peut-être ;) ) envisageable, c'est de faire une abstraction "stockage" qui se spécialise en "gitfile", "db", "webapi", "url", "file", ... pour couvrir différents modes de stockage des éléments. Toutefois, pour l'instant, je suis de l'avis que :

enfin, on est raisonnable et on attend, quoi ;)

@Luthaf
Copy link
Contributor

Luthaf commented Feb 17, 2014

Ça me va =)

@Luthaf Luthaf added this to the 0.2 milestone Apr 21, 2014
@Luthaf Luthaf modified the milestone: 0.2 Jun 4, 2014
@Luthaf
Copy link
Contributor

Luthaf commented Jun 4, 2014

Alors je reviens sur cette issue avec l'état actuel du projet

Quand un chant est supprimé : on pourrait garder le Song et mettre le chemin à NULL. Ainsi, il est possible de faire savoir à l'utilisateur que le chant "Tralala" a été supprimé et ne peut plus être utilisé pour générer un carnet

Plutôt que de mettre le chemin à NULL, je propose de mettre le hash à NULL. Comme ça la même fonction de comparaison que pour les mises à jour peut être utilisée pour les suppressions.

On peut aujourd'hui importer (importsongs), il va falloir une fonction de mise à jour (même script avec des paramètres ou second script). En comparant les object hashes, il sera possible de savoir qu'une mise à jour d'un chant est nécessaire et de la faire. Il faudra aussi vérifier quels chants en db n'ont plus de fichier correspondant (en essayant de détecter les déplacements / renommages)

Le même script doit pouvoir servir directement : on effectue l'import des nouveaux chants, la mise à jour des chants existants (mise à jour du hash). Là ou je bloque par contre est sur les renommages/suppression et comment faire la différence entre ces deux.

On peut essayer de regarder l’historique des fichiers et détecter si il y a une différence ? Cela semnle possible à coups de GitPython (http://pythonhosted.org/GitPython/0.3.1/reference.html#git.diff.Diff), mais pas évident si le diff contient beaucoup de fichiers.

@Luthaf Luthaf modified the milestones: 0.3, 0.2 Jul 3, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants