Proposition de schéma pour l'API GraphQL#1986
Conversation
✅ Deploy Preview for stylo-docs canceled.
|
|
Hello, Quelques remarques : Renommage
Suppressions/Simplifications
|
La notion de "owner" (propriétaire/appartenance) n'est pas tellement adaptée à Stylo où une personne crée un article et collabore dessus. L'article appartient aux personnes qui contribuent. Cela permet aussi d'aligner Le terme "owner" évoque quelque chose en lien avec des droits/permissions et je pense que c'est bien de faire une distinction claire entre les permissions et la personne qui crée un objet.
C'est le cas les métadonnées sont accessibles avec
Je pense que tu peux toujours le faire avec les différents types: query all {
articles { id }
workspaces { id}
corpuses { id }
tags { id }
}Cela va récupérer les articles, les espace de travail, les corpus et les étiquettes de l'utilisateur. Cela permet de garder la même structure de réponse quand tu veux récupérer des articles.
Les articles dans un corpus sont ordonnées. Autrement dit, c'est une relation avec des attributs, on a pas uniquement une liste d'articles. C'est la raison pour laquelle on a une liste de |
Il me semble qu'il est entendu que le propriétaire est toujours le créateur, et je ne suis pas sûr que ce soit une bonne chose de distinguer ces deux notions : l’article appartient-il vraiment aux contributeurs ? Ils peuvent effectivement collaborer dessus, mais ils n'ont pas les mêmes droits que le propriétaire, qui seul peut le supprimer par exemple.
👌 mea culpa la sérialisation JSON m'avait échappé.
Ce qui est intéressant avec la formule actuelle, c'est de récupérer une hiérarchie à partir du Workspace : {
"Workspace": {
"corpus": [
{
"articles": []
},
"articles": []
]
}
}Pendant le processing des données on peut facilement propager les héritages ou les dépendances aux niveaux inférieurs. Si on peut toujours récupérer cette hiérarchie c'est nickel !
OK je comprends mieux ;) |
Résumé des changements
Renommages
_idid(sur tous les types)Article.titleArticle.nameArticle.ownerArticle.creatorArticle.workingVersionArticle.workingCopyWorkingVersionWorkingCopyVersionArticleVersionVersion.version(Int)ArticleVersion.majorVersion.revisionArticleVersion.minorVersion.mdArticleVersion.textVersion.bibArticleVersion.bibliographyVersion.bibPreviewArticleVersion.bibliographyPreviewWorkingVersion.mdWorkingCopy.textWorkingVersion.bibWorkingCopy.bibliographyUser.acquintancesUser.contactsQuery.userQuery.meUserPermission.user: User!UserPermission.userId: ID!Nouveaux éléments
ArticleVersion.revisionNumber: champ formaté"major.minor"(ex:"2.3")UserIdentity: nouveau type léger pour remplacerUserdans les champscreator,owner, etc. (évite les requêtes profondes)MetadataFilter: input permettant de filtrer par métadonnées (key/value)User.collaborators: liste des utilisateurs partageant un espace de travail ou un articleQuery.users: query admin avec filtresuserId,username,emailQuery.articles: nouveaux filtrescorpusId,workspaceId,tagId,metadata,nameQuery.corpuses: nouvelle query de liste (remplacecorpus(filter:...)) avec filtresworkspaceId,metadata,nameQuery.tags: filtre parnameSuppressions / simplifications
Article.delete,Article.rename,Version.rename,Workspace.leave,Corpus.addArticle, etc. → à déplacer versdes mutations racines
WorkspaceArticle/WorkspaceMembersupprimés (types intermédiaires pour mutations embarquées)CorpusArticlesimplifié : ne contient plus quearticleIdetorder(plus de référence àArticleni de mutations embarquées)Corpus.workspace(String) →Corpus.workspaceId(ID)Tag.ownersupprimé (remplacé parcreator: UserIdentity!)Tag.articlessupprimé du typeTagWorkspace.articles/Workspace.corpussupprimésPhilosophie générale du changement
Le schéma v2 applique les bonnes pratiques GraphQL :
idau lieu de_id— découplage de MongoDBUserIdentitycomme type léger pour les références d'auteur/créateur — évite la récursionworkingCopy,major/minor,text,bibliography)