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

Get notified on corpus changes #501

Open
4 of 6 tasks
cedricleandres opened this issue May 7, 2021 · 29 comments
Open
4 of 6 tasks

Get notified on corpus changes #501

cedricleandres opened this issue May 7, 2021 · 29 comments
Labels

Comments

@cedricleandres
Copy link

cedricleandres commented May 7, 2021

Description

A given user, interested in a corpus, could register to a corpus in order to be notified whenever something has been modified in this corpus.

What is the valuable outcome that cannot be achieved with current features?

For which stakeholder (people, role, project, domain) is it important?

Which user action should be enabled (or restricted)? For who?

Additional details (solutions you think about, or workarounds you tried)

Deliverables status

Phase 1

  • Scenarios (Gherkin)
  • Mockups
  • Implementation strategy

Phase 2

  • Acceptance tests (Capybara)
  • Implementation

Phase 3

  • Screencast
@sarah-ngn
Copy link

Dans le cadre de Graines d'artistes, cette fonctionnalité permettra en quelque sorte de fidéliser le visiteur en lui permettant d'être informé lorsqu'un changement a été fait sur le corpus comme par exemple l'ajout d'une nouvelle œuvre.

@cedricleandres
Copy link
Author

Dans le cadre de Graines d'artistes, ce ticket est assigné aux binômes:
Rédaction de scenario : @sarah-ngn et @cedricleandres
Conception de la maquette : @TristanGdc et @therealdarkflamemaster
Stratégie d'implémentation : @ThomasSobrecases et @lildelfino

@cedricleandres
Copy link
Author

cedricleandres commented May 28, 2021

Pour le groupe graines d'artistes :

Les scénarios "Etre informé de l'ajout d'un item" et "Etre informé de la modification d'un item" ont pu être validés. Cependant dans un soucis de cohérence avec le second ticket "Subscribe to a topic" de notre groupe, nous devons encore ajouter un scénario correspondant à l'abonnement de l'utilisateur à un corpus, avant de passer au livrable suivant.

Concernant les maquettes, il faudra rajouter une maquette utilisant un autre lecteur RSS.

Enfin la rédaction de la stratégie d'implémentation n'est pas encore achevée, il reste à déterminer la meilleure manière de récupérer les attributs d'un item notamment la date de modification du dernier contributeur.
@benel

@benel
Copy link
Member

benel commented May 28, 2021

@cedricleandres @sarah-ngn N'oubliez pas de mettre les scénario finaux (vous auriez même pu les faire avec des brouillons), directement dans le ticket. C'est une bonne manière de documenter la fonctionnalité.

@sarah-ngn
Copy link

Ancienne version des scénarios :

Fonctionnalité: S'abonner à un corpus
Scénario: 
Soit l'utilisateur sur la page d'accueil
Et l'utilisateur s'abonne au corpus “Dessins”
Alors l'utilisateur est abonné au corpus “Dessins”  dans son client RSS
Fonctionnalité: Être informé de l'ajout d'un item
Scénario :
Soit l'utilisateur est abonné au corpus "Dessins"
Quand l'item "1994_6-9_11_ROM_R_C" est ajouté au corpus
Alors l'utilisateur est informé de l'ajout de l'item "1994_6-9_11_ROM_R_C" par une notification dans son client RSS
 
Fonctionnalité: Être informé de la modification d'un item
Scénario : 
Soit l'utilisateur est  abonné au corpus "Dessins"
Quand l'item "1994_6-9_11_ROM_R_C" est modifié
Alors l'utilisateur est informé de l'ajout de l'item  "1994_6-9_11_ROM_R_C" par une notification dans son client RSS

@sarah-ngn
Copy link

Nouvelle version des scénarios :

Fonctionnalité : Etre informé, recevoir une notification 

Scénario 1 : Être informé de l'ajout de l'item
Suite à  l'abonnement au corpus "Dessins"
Suite à l'ajout de l'item "1994_6-9_11_ROM_R_C" 
Alors l'utilisateur sera informé par une notification dans son client RSS

Scénario 2 : Être informé de la modification d'un item
Suite à  l'abonnement au corpus "Dessins"
Suite à la modification de l'item "1994_6-9_11_ROM_R_C" 
Alors l'utilisateur sera informé par une notification dans son client RSS

@benel
Copy link
Member

benel commented Jun 1, 2021

Voir commentaires dans l'autre discussion...

benel added a commit to Hypertopic/AAAforREST that referenced this issue Jun 1, 2021
The prefix in the object can be changed in settings.
No prefix means no accountability.

Needed for Hypertopic/Porphyry#152, Hypertopic/Porphyry#501, 
Hypertopic/Porphyry#219.
@benel
Copy link
Member

benel commented Jun 1, 2021

@ThomasSobrecases @lildelfino

Bonne nouvelle : pour vous faciliter le travail, j'ai développé la partie backend (Argos) de votre fonctionnalité :
désormais, à chaque modification d'un objet, le nom de l'auteur et la date de la dernière modification sont ajoutés automatiquement à l'objet.

Ça ressemple à cela :

  "record":{
    "contributor":"alice",
    "modified":"2021-06-01T18:48:36.381Z"
  }

Vous retrouverez donc dans la vue du corpus ces données pour tout item modifié (à partir de maintenant).
Ce sont les données qui vous manquaient pour générer le flux RSS dans le frontend (Porphyry).

@lildelfino
Copy link

lildelfino commented Jun 3, 2021

Ce serait bien de tenir cette discussion dans le ticket lui-même. En effet, les livrables bien que faisables en parallèle ne sont pas complètement indépendant. Il est important de savoir ce que font les autres à côté.

@benel

Je copie la discussion ici, je vous ai également répondu tout en bas de cette publication :

Bonjour, voici la stratégie d'implémentation à laquelle nous avons réfléchi avec @ThomasSobrecases :

L’idée générale pour implémenter cette fonctionnalité serait de créer un flux RSS pour chaque corpus du site, afin que n’importe qui puisse les récupérer et le consulter via des sites comme Feedly, The old reader, etc… Créer notre propre lecteur RSS semble trop compliqué à implémenter en même temps, mais pourrait faire l’objet d’un autre ticket.

Quelle partie du code sera impactée (classes, méthodes) ?

La première chose à faire est de créer le bouton permettant au visiteur de récupérer le flux.
Il faut donc ajouter une nouvelle classe FluxRSS afin de définir les différentes méthodes du flux. On ajoutera ensuite un bouton dans la classe Header.jsx.

Le bouton donne un lien comme https://dessins.porphyry.org/corpus.xml, lien vers le fichier XML lié au flux RSS de notre corpus entier.

Ensuite il faudra :
Écrire une fonction (probablement dans un nouveau fichier .js dans le dossier src) de création de flux (voir librairie utilisée)
Écrire une fonction qui transforme les informations d’un items en un fichier XML compatible avec un lecteur de flux RSS (voir librairie utilisée). Ainsi à chaque création d’un nouvel item la fonction sera appelée, mais aussi à chaque modification d’un item.
Cette fonction sera implémentée dans la classe Item (item.jsx) pour avoir facilement accès aux attributs et être facilement appelée quand on en a besoin. En effet, elle serait appelée dans les fonctions de construction et de modification d’un item.

Si le code est fonctionnel, le un fichier xml pour le feed créé sera mis à jour à chaque modification/création d’un item, permettant, à partir d’un agrégateur de flux rss, d’avoir un aperçu de l’item et un lien vers porphyry pour constater les changements.

Y aura-t-il des difficultés d'un point de vue algorithmique ? Avez-vous des pistes pour les résoudre ?

Non, la difficulté réside plus dans l’organisation des fichiers, des classes et des méthodes que dans un quelconque algorithme.

Les données dont vous avez besoin sont-elles déjà chargées par la page ? Si oui, quelle est la structure des données et comment allez-vous récupérer précisément celles qui vous intéressent ? Si non, quelle sera la requête la plus efficace et comment allez-vous récupérer dans la structure de données précisément celles qui vous intéressent ?

Les données envoyées sont celles entrées à la création d’un item, quand l’item est créé on peut donc directement les récupérer pour créer notre flux RSS avant de les envoyer dans la bdd.
Par contre lors de la modification d’un item on devra sûrement faire appel aux fonctions _getAttributes(), getString(this.state.item.name), etc… pour que toutes les informations sur l’item soient ajoutées dans le flux, pas seulement les informations sur les modifications effectuées.

Existe-t-il des bibliothèques qui pourraient simplifier l'implémentation ?

https://github.com/phi-jp/rss-generator : cette bibliothèque JS permet de simplifier la génération de fichier XML adaptés aux flux RSS.
Elle permettait de :

Créer un feed (un feed par corpus)
Créer un item de feed (ici il s’agirait d’un item décrivant donc les items de porphyry)
Créer/mettre à jour un code XML lié au feed

Probablement que ce code XML devra être stocké dans la bdd aux côtés des items, et non dans les fichiers source du projet React. Sinon il ne pourrait pas être récupéré et mis à jour facilement pour le client.

Doit-on intégrer des services extérieurs (ex : cartographie) ? De quelles fonctionnalités en particulier aura-t-on besoin ? Est-ce que le service choisi les propose ou doit-on passer chez un concurrent ? Comment s'utilisent ces fonctionnalités ? avec quels paramètres ?

Des services extérieurs seront nécessaires pour utiliser la fonctionnalité mais ils ne seront pas à intégrer dans notre application ; on fournit simplement le fichier permettant aux services de lire notre flux.

Des étapes préalables de développement, testables, sont-elles envisageables afin de diminuer la complexité de la livraison ? Refactoring (livrable à part entière, isofonctionnel) ? Code développable et testable de manière externe au logiciel ? Étape du scénario (non livrable en tant que tel mais dont l’effet peut être testé) ?

Il faudrait tester en amont la librairie de création de XML pour obtenir le rendu que l’on souhaite facilement en terme de flux RSS, une fois satisfait du rendu on pourra implémenter ce que l’on a fait dans le code final.

@lildelfino @ThomasSobrecases

L'idée serait donc d'ajouter la fonction updatefun(), avec dans l'argument doc l'ensemble des attributs de l'item, et dans req l'id de l'item crée/modifié ?

C'est ça. Je vous ai fait un premier prototype : https://lists.apache.org/thread.html/r90d3419fba70abb64629666387e534ecae15436bb4e2eb2b638c4a66%40%3Cuser.couchdb.apache.org%3E Comme cette partie backend est un petit peu plus difficile que prévue (comme l'indique la discussion, la correction de petits problèmes nécessite une autre stratégie), je m'en charge. Vous pouvez donc la considérer comme une boîte noire qui sera bientôt disponible.

Maintenant que la question de la production des données est à peu près réglée, se pose celle de la consultation. Dans quelle vue espéreriez-vous obtenir la date et le contributeur de la dernière modification de chaque item

Nickel merci pour ça.

Je pense que la date et le contributeur de la dernière modification seront considérés comme des attributs d'un item. Dans ce cas une requête GET /item/ID/"attribut"/ pour obtenir un attribut lié à un item me parait adapté.

En fait on évite de faire une requête par "objet". Si vous avez 1780 items comme dans le portfolio des vitraux, ça ferait 1750 requêtes... Inspectez les méthodes Ajax (XHR) qui sont lancées dans cette page et repérez dans quelle ressource vous vous attendriez à trouver les données de dernière modification de chaque item (une fois que vous aurez trouvé, vous verrez c"était très logique, vu le titre de votre ticket...).

Sur la page principale on a : GET https://argos.utt.fr/corpus/Graines%20d'artistes et GET https://steatite.utt.fr/corpus/Graines%20d'artistes qui semblent permettre de récupérer l'ensemble du corpus dans un fichier JSON. Grâce à votre modification du back-end (merci pour ça) on pourra récupérer les infos sur les contributeurs et les dates de modifications, et donc organiser correctement notre fichier XML pour le flux RSS.
Les attributs sont récupérables dans le json à ce niveau là : ["rows"][index]["value"][nom_attribut], par exemple pour graine d'artiste: ["rows"][1]["value"]["name"] ="1994_6-9_11_ROM_R_C".

Maintenant qu'on sait comment récupérer la date de modification et les attributs, il faudrait trier le corpus par date de modification pour pouvoir récupérer seulement les derniers items dans notre flux RSS. Je pense que la manière la plus logique pour ne pas ralentir porphyry est de le faire en back-end à chaque modification. Cependant je ne sais pas si cela est possible, qu'en dites vous ?

@benel
Copy link
Member

benel commented Jun 4, 2021

Merci @lildelfino @ThomasSobrecases pour cette mise à jour de votre stratégie d'implémentation.

Il faut donc ajouter une nouvelle classe FluxRSS afin de définir les différentes méthodes du flux. On ajoutera ensuite un bouton dans la classe Header.jsx.

Je ne sais pas si vous avez vu les recherches du binôme qui travaille sur les maquettes, mais il est possible aussi de référencer les flux RSS dans l'entête du fichier HTML (ce qui présente une petite difficulté avec React mais pas insurmontable). Du coup, vous n'avez pas besoin de modifier le design de votre page. C'est le navigateur qui gère lui-même l'affichage du menu RSS (en général à droite de la barre d'adresse).

Créer notre propre lecteur RSS semble trop compliqué à implémenter

Bien sûr. L'intérêt des standards, c'est que l'on peut être compatible avec des outils qui existent déjà.

Par contre lors de la modification d’un item on devra sûrement faire appel aux fonctions _getAttributes(), getString(this.state.item.name), etc… pour que toutes les informations sur l’item soient ajoutées dans le flux, pas seulement les informations sur les modifications effectuées.

Si vous choisissez de générer votre RSS avec React, elle aura sa propre URI. Donc a priori ce ne sera pas dans la même "page". Vous partirez donc directement de ce que vous récupérez dans le backend...

https://dessins.porphyry.org/corpus.xml

Je l'ai déjà écrit quelque part (ça m'inquiète, je ne le retrouve plus), mais si vous voulez que ce soit l'URI du flux d'un corpus. Il va falloir absolument que vous ayez l'identifiant de ce corpus dans l'URI...
Par ailleurs, il est préférable de ne jamais mentionner le format dans l'URI elle-même (c'est parce que dans la spécification de HTTP il y a la distinction entre une "ressource" et ses "représentations").

Des services extérieurs seront nécessaires pour utiliser la fonctionnalité mais ils ne seront pas à intégrer dans notre application ; on fournit simplement le fichier permettant aux services de lire notre flux.

Du coup (voir plus haut), vous allez vous appuyer directement sur la vue "corpus" produite par Argos.

Je pense que la date et le contributeur de la dernière modification seront considérés comme des attributs d'un item. Dans ce cas une requête GET /item/ID/"attribut"/ pour obtenir un attribut lié à un item me parait adapté.

Pas à proprement parler. Un attribut est de la forme {"creator":"bob"} alors que la trace à propos de la dernière modification des données est de la forme {"record":{"creator":"bob"}}. C'est fait exprès pour faire la différence entre par exemple le créateur de la photographie et le créateur de la description de la photographie.

Maintenant qu'on sait comment récupérer la date de modification et les attributs, il faudrait trier le corpus par date de modification pour pouvoir récupérer seulement les derniers items dans notre flux RSS. Je pense que la manière la plus logique pour ne pas ralentir porphyry est de le faire en back-end à chaque modification. Cependant je ne sais pas si cela est possible, qu'en dites vous ?

À ralentir quelque chose, il vaut mieux le faire sur une requête qui sera utilisée peut-être une fois par jour (RSS sur le frontend) plutôt que sur qui est utilisée toutes les minutes (corpus sur la backend).
Notez par ailleurs que la spécification de RSS ne requiert pas de tri particulier.

Probablement que ce code XML devra être stocké dans la bdd aux côtés des items

Je ne comprends pas cette phrase. Par ailleurs, j'ai un doute sur l'intégration de votre bibliothèque dans React.
Apparemment il est possible de générer du XML en React (donc sans bibliothèque spécifique pour RSS), mais ce n'est pas très courant et je ne sais pas s'il y a des limites...

Une autre alternative serait de générer le RSS directement dans CouchDB... Si certains d'entre vous ont fait LO10, c'est comparable à ce que l'on avait fait ensemble. Si vous avez besoin d'aide, on peut regarder ensemble...
Dans ce cas, la partie React serait limitée à la référence au RSS dans l'entête du fichier HTML, mais la génération du RSS serait faite par CouchDB.

@lildelfino
Copy link

lildelfino commented Jun 4, 2021

@benel

Pour le front-end :

link rel="alternate" type="application/rss+xml" href="https://www.lemonde.fr/entreprises/rss_full.xml" title="Test2"
Voilà à quoi ressemblerait la balise à ajouter au header.
Pour la modifier en react on travaille encore dessus.

Pour la back-end :

Voilà ce qu'on a compris avec les nouveaux assignés à la stratégie d'implémentation : il faudrait déjà classer la base de données par date de modification, pour simplifier la récupération des items qui nous intéressent. Ensuite on utilisera la librairie JS dans argos pour générer le fichier XML lié à un flux RSS, en fonction du corpus. On créera ensuite une vue pour récupérer le lien du fichier généré sur le coup.
Le problème qu'on a c'est qu'on ne voit vraiment pas où est fait le lien entre la front-end porphyry et argos dans le code. Également nous ne sommes pas sur de ce que vous entendiez par "rewrite couchDB".

@benel
Copy link
Member

benel commented Jun 4, 2021

@Hypertopic/graines-d-artistes-1

<link rel="alternate" type="application/rss+xml" href="https://www.lemonde.fr/entreprises/rss_full.xml" title="Test2"/>

Il faudrait faire un petit test (avec du HTML statique en local) pour voir :

  • comment les différents navigateurs l'affichent,
  • ce qui se passe qand il y en a plusieurs (y a-t-il par exemple un menu quand on clique sur le bouton dans la barre d'adresse ?).

Pour la modifier en react on travaille encore dessus.

OK.

Voilà ce qu'on a compris avec les nouveaux assignés à la stratégie d'implémentation : il faudrait déjà classer la base de données par date de modification, pour simplifier la récupération des items qui nous intéressent. Ensuite on utilisera la librairie JS dans argos pour générer le fichier XML lié à un flux RSS, en fonction du corpus. On créera ensuite une vue pour récupérer le lien du fichier généré sur le coup.

On avait dit qu'on générait le XML dans CouchDB... Vous avec regardé la documentation des listes CouchDB ?

Également nous ne sommes pas sur de ce que vous entendiez par "rewrite couchDB".

C'est une autre fonctionnalité de CouchDB : réécrire une URI sur mesure pour la faire correspondre à une URI interne

Pour la partie vue CouchDB. On peut le faire ensemble, si vous voulez... Je suis encore là jusqu'à midi...

@benel
Copy link
Member

benel commented Jun 10, 2021

@lildelfino

J'ai regardé mais je vois que la fonction est dépréciée, cela ne pose-t-il pas un gros problème pour le futur de porphyry ?

Pour Argos plutôt ?

Vous faites bien de vous poser la question, mais la réponse est plutôt non :

  • la version 4 de CouchDB est une version très ambitieuse (il s'agit d'une réécriture complète) qui ne va pas venir de si tôt,
  • les versions 2 (que l'on utilise actuellement) et 3 continueront à être patchées et elles sont tout à fait suffisantes pour ce que l'on veut en faire,
  • si vraiment un jour on peut et on veut passer à la version 4, il ne me sera pas très compliqué de réécrire ce que vous ferez pour CouchDB pour que ce soit fait au niveau d'un proxy.

Aujourd'hui, la solution la plus simple est de le faire avec CouchDB. C'est pour cela que je vous oriente vers ce choix technologique.

@benel
Copy link
Member

benel commented Jun 10, 2021

@lildelfino @sarah-ngn

Demain nous aurions vraiment besoin de votre aide pour comprendre comment implémenter la fonctionnalité car on a du mal à comprendre comment sont effectués les échanges entre couchdb et la front-end dans le code. @sarah-ngn et moi-même seront présent toute la matinée après notre réunion pour en parler.

Ça vous va si on le fait en tout début de matinée ? Ça vous laissera du temps pour avancer avant la réunion de suivi...

Quel est votre sujet exactement ? Est-ce réellement le lien entre backend et frontend ? Ou est-ce la partie backend ?

@benel
Copy link
Member

benel commented Jun 10, 2021

@lildelfino @sarah-ngn

Je vois dans votre compte-rendu (qui vient d'arriver) que vous étiez affectés au backend. Donc j'imagine que c'est bien sur cela que vous voulez être briefés.

@therealdarkflamemaster
Copy link

@benel

  • Comment changer le header en React avec react-helmet
    Les codes :
// Exemple : le fichier Portfolio.jsx, dans render()
return (
  <div className="App container-fluid">
          <Header conf={conf} />
          <Helmet>
            <link rel="alternate" type="application/rss+xml" href="https://www.lemonde.fr/rss/une.xml" title="Test1" />
            <link rel="alternate" type="application/rss+xml" href="https://www.lemonde.fr/entreprises/rss_full.xml" title="Test2" />
          </Helmet>
          <div className="Status row align-items-center h5">
....

Il faut d'abord installer react-helmet avec la commande npm install react-helmet ou yarn add react-helmet et importer ensuite dans le début de fichier

import { Helmet } from 'react-helmet';

Pour la version de react-helmet, dans le fichier package.json

    "react-helmet": "^6.1.0",
    ...

@benel
Copy link
Member

benel commented Jun 11, 2021

Merci @therealdarkflamemaster pour cette partie de stratégie d'implémentation.

Par contre, j'imagine que vous avez lu la discussion à propos de la gestion devenue très chaotique dans les navigateurs des html/head/link et en particulier la conclusion de @TristanGdc d'avoir plutôt des liens dans le corps des pages.

@sarah-ngn
Copy link

sarah-ngn commented Jun 14, 2021

Stratégie d'implémentation backend :

  • Vue Couchdb :
    Créer un fichier : Argos/app/views/feed/map.js
function (doc) {
    if(doc.item_corpus && doc.record.modified){
        emit([doc.item_corpus, doc.record.modified]);
    }
}
  • Rewrite Couchdb :
    Modifier le fichier Argos/app/rewrites.json
{
    "from": "feed/:corpus",
    "to": "_list/feed/feed",
    "query": {
      "include_docs": "true",
      "startkey": [":corpus"],
      "endkey": [":corpus",{}]
    }
  • List Couchdb :
    Créer un fichier Argos/app/list/feed/feed.js
    exemple à modifier avec les balises souhaitées pour une bonne lecture rss:
function(head, req){
        start({
                    'headers': {
                                'Content-Type': 'application/rss+xml'
                            }
                });
        send('<rss><channel><title>Modifications</title><link>https://dessins.porphyry.org/</link><description>IF05</description>');
        while(row = getRow()){
                    send(''.concat(
                                '<item>',
                                '<title>' + row.item_name + '</title>',
                                '<created>' + row.created + '</created>',
                                '<spatial>' + row.spatial + '</spatial>',
                                '</item>'
                            ));
                }
        send('</channel></rss>');
}

Pour ce qui est du lien du corpus dans le titre, nous continuons de chercher un moyen de le récupérer de manière dynamique. Nous nous posions la question s'il n'existe pas déjà un attribut qui permettrai de récupérer le nom du corpus ou bien si l'on pouvait directement récupérer l'URI vers la page de l'item en attribut ?

@benel
co-writer : @lildelfino

@benel
Copy link
Member

benel commented Jun 15, 2021

Merci @sarah-ngn et @lildelfino pour ce début de stratégie d'implémentation (et même un début d'implémentation !).

Pour ce qui est du lien du corpus dans le titre, nous continuons de chercher un moyen de le récupérer de manière dynamique. Nous nous posions la question s'il n'existe pas déjà un attribut qui permettrai de récupérer le nom du corpus ou bien si l'on pouvait directement récupérer l'URI vers la page de l'item en attribut ?

Ne perdez pas de vue le problème à résoudre.

Dans votre flux (https://argos.utt.fr/feed/Graines d'artistes), vous savez que le premier élément modifié est par exemple :

  • un item
  • qu'il a pour identifiant 379c510401214c97968b15affb6eba1ed6a03db0
  • qu'il a pour corpus Graines d'artistes.

Or vous voulez générer un lien de votre flux RSS vers https://dessins.porphyry.org/item/Graines%20d'artistes/379c510401214c97968b15affb6eba1ed6a03db0

Donc, ce qui vous manque c'est https://dessins.porphyry.org .

La solution la plus simple est, comme je vous le disais la semaine dernière, est de passer cette chaîne de caractères en paramètre à l'URI de votre liste. Elle deviendrait par exemple https://argos.utt.fr/feed/Graines d'artistes?app=https://dessins.porphyry.org .

Avant d'y arriver, vous avez deux informations à chercher dans la documentation de CouchDB :

  • comment récupérer les paramètres de requête dans la fonction liste (ici : app),
  • comment transmettre les paramètres lors de la réécriture (il me semble que ça se fait tout seul, mais il faut vérifier).

@lildelfino
Copy link

lildelfino commented Jun 16, 2021

comment récupérer les paramètres de requête dans la fonction liste (ici : app),

D'après ce lien : https://guide.couchdb.org/draft/transforming.html, il semblerait que via le paramètre req, on peut récupérer les requêtes http :
"query": {"foo":"bar"},
Dans notre cas dans la fonction list ça donnerait :
uri = req.query.app

comment transmettre les paramètres lors de la réécriture (il me semble que ça se fait tout seul, mais il faut vérifier).

https://docs.couchdb.org/en/1.5.1/api/ddoc/rewrites.html : D'après l'exemple suivant il semblerait que les "queries" non-considérées dans le rewrites sont gardées à la réécriture :
{“from”: “/a/b”, “to”: “/some”} : /a/b?k=v => /some?k=v

J'ai malheureusement pas pu tester ces solutions car j'ai un problème avec argos et couchdb : quand je modifie un fichier js en local et que je fais docker-compose up --detach, rien ne se met à jour sur couchdb. Je n'arrive donc pas à créer la fonction liste. D'ailleurs cette fois-ci, quand je "up", les items modifiés restent modifiés (avant ça les remettait à l'état initial). Je ne comprends vraiment pas d'où vient ce problème sachant que je vérifie à chaque fois que couchdb est éteint avant de up.

@benel

@benel
Copy link
Member

benel commented Jun 16, 2021

Dans notre cas dans la fonction list ça donnerait :
uri = req.query.app

Tout à fait !

D'après l'exemple suivant il semblerait que les "queries" non-considérées dans le rewrites sont gardées à la réécriture

C'est bien ce qu'il me semblait. Heureux que vous ayez trouvé confirmation dans la documentation.

Je ne comprends vraiment pas d'où vient ce problème sachant que je vérifie à chaque fois que couchdb est éteint avant de up.

Vous pouvez réinitialiser vos données de la manière suivante :

  1. faites un down
  2. supprimez le dossier data
  3. faites un up

@therealdarkflamemaster
Copy link

therealdarkflamemaster commented Jun 16, 2021

@benel
Pour la partie Front-end d'Implémentation, voici ce que j'ai fait :
le dossier src :
image

  • Ajouter un component RSS dans le fichier header.js
    En utilisant les paramètres de BootStrap, j'ai refait les paramètres de colonne col-lg-4 à col-lg-2 pour avoir une place pour le button Rss
    image
<header className="row align-items-center">
        <div className="col-lg-4 d-none d-lg-block logo"></div>
        <h1 className="col-lg-4">
          <Link to="/">{this.state.user}</Link>
        </h1>
        <div className="col-lg-2">
          <Rss/>
        </div>
        <div className="col-lg-2">
          <Authenticated conf={this.props.conf} />
        </div>
</header>

Pour le button RSS, il y a deux parties :

  1. la partie icon, j'ai utilisé une image SVG
  2. la partie de texte, c'est simplement Flux RSS
class Rss extends Component {

  constructor(props) {
    super(props);
    this.state = {rss: ''};
  }

  render() {
    return (
      <div className="rss-btn">
        <Link to="/rss">
          <div className="rss-icon">
            <RssIcon/> // l'image svg
          </div>
          <Trans>Flux RSS</Trans>
        </Link>
      </div>
    );
  }

}

export default Rss;
  • Faire la page Rss.jsx
    J'ai créé un dossier rssPage. Je l'ai fait comme la maquette envoyée par Cédric.
    image

  • Faire la page RssTopic.jsx
    Je l'ai fait comme la maquette envoyée par Cédric. En outre, j'ai crée deux components Topic et Viewpoint pour démontrer les catégories.
    image

  • Configuration du routage
    J'ai changé un peu de codes dans le fichier index.js :

 <Router>
      <Switch>
        <Route path="/item/:corpus/:item" component={Item} />
        <Route path="/viewpoint/:id" component={Outliner} />
        <Route path="/rss/topic/" component={RSSTopic} />  // nouveau
        <Route path="/rss/" component={RSS} /> // nouveau
        <Route path="/" component={Portfolio} />
      </Switch>
</Router>

En outre, j'ai quelques problèmes sur le style de button Rss que j'ai fait et la transciption de textes en anglais. Ces problèmes ont été résolus par @TristanGdc

@TristanGdc
Copy link

TristanGdc commented Jun 16, 2021

@benel
Je me suis occupé de l'ajout des textes explicatifs présents dans la maquette et des différentes traductions en anglais en modifiant les "messages.po" et en utilisant les balises Trans :

image

image

image

Merci à @therealdarkflamemaster de m'avoir aider pour l'écriture du CSS et l'utilisation des Link.

@benel
Copy link
Member

benel commented Jun 22, 2021

OK, merci pour vos traductions @TristanGdc.

therealdarkflamemaster added a commit to therealdarkflamemaster/Porphyry that referenced this issue Jun 25, 2021
&& Get notified on changes related to a topic (Hypertopic#152)
therealdarkflamemaster added a commit to therealdarkflamemaster/Porphyry that referenced this issue Jun 25, 2021
&& Get notified on changes related to a topic (Hypertopic#152)
therealdarkflamemaster added a commit to therealdarkflamemaster/Porphyry that referenced this issue Jun 25, 2021
&& Get notified on changes related to a topic (Hypertopic#152)
therealdarkflamemaster added a commit to therealdarkflamemaster/Porphyry that referenced this issue Jun 25, 2021
&& Get notified on changes related to a topic (Hypertopic#152)
therealdarkflamemaster added a commit to therealdarkflamemaster/Porphyry that referenced this issue Jun 25, 2021
&& Get notified on changes related to a topic (Hypertopic#152)
therealdarkflamemaster added a commit to therealdarkflamemaster/Porphyry that referenced this issue Jun 25, 2021
&& Get notified on changes related to a topic (Hypertopic#152)
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

7 participants