[CLEANUP] Utilisation d'un read-model dans le service Current-user de Pix Orga (PIX-553).#1448
Conversation
|
I'm deploying this PR to these urls:
Please check it out! |
7586fb6 to
1d0a39b
Compare
1d0a39b to
ae5d1fd
Compare
ae5d1fd to
8adb4d8
Compare
e0b0507 to
a88716f
Compare
a88716f to
35da0c8
Compare
| module.exports = function getPrescriber({ userId, prescriberRepository }) { | ||
| return prescriberRepository.getPrescriber(userId); | ||
| }; |
There was a problem hiding this comment.
Quand on utilise les read-model (dans une logique de flux descendant / query) il n'y a pas de logique "métier" à appliquer, simplement de la logique de récupération de données et de présentation de la données (répo & serializer) et le usecase devient obsolète car il ne fait que passe plat, comme ici.
Tu peux donc t'en passer et appeler le repo directement depuis le controller, comme ce qui est fait ici.
C'est d'ailleurs assez cohérent avec la logique de séparation du read et du write, dans cette logique, seul le write est considérée comme étant du "métier" alors que read est un détail d'implémentation. Le usecase étant un classe d'orchestration de workflow "métier" il est normal qu'on ne l'utilise pas sur le write.
Par ailleurs, même si ce n'est pas ce qu'on a fait jusqu'à maintenant : les read-models ne devraient pas se trouver dans domain, ils font partie de l'infrastructure.
Voir ici : #649 (comment)
There was a problem hiding this comment.
Cette PR etant mergé avant tes retours, on le prend en compte dans la prochaine PR de refacto
| const UserOrgaSettings = require('../../domain/models/UserOrgaSettings'); | ||
| const Organization = require('../../domain/models/Organization'); | ||
|
|
||
| function _toPrescriberDomain(bookshelfUser) { |
There was a problem hiding this comment.
Le prescriber étant un read-model ne devrait pas faire partie du domain.
_toPrescriberDomain -> _toPrescriberReadModel
| memberships: _toMembershipsDomain(bookshelfUser.related('memberships')), | ||
| userOrgaSettings: _toUserOrgaSettingsDomain(bookshelfUser.related('userOrgaSettings')) |
There was a problem hiding this comment.
Membership et Organization semblent ne pas être des read-model.
Il faut soit :
- qu'ils soient des read-models (s'ils ne servent pas dans le domain par ailleurs)
- faire des read-model correspondant
There was a problem hiding this comment.
A creuser dans le prochain point design code !
🦄 Problème
Depuis le front, dans le service current-user de Pix Orga, trois requêtes distinctes sont réalisées pour récupérer l'utilisateur connecté (tous ses attributs), ses memberships ainsi que ses paramètres (userOrgaSettings).
S'enchainent des opérations difficilement lisibles, qui pourraient être effectuées par l'API.
Seuls les attributs du user firstName, lastName et pixOrgaTermsOfServiceAccepted sont utilisés.
La récupération des
membershipset deuserOrgaSettingss'effectue en deux appels vers l'API (cf. api/lib/infrastructure/serializers/jsonapi/user-serializer.js).🤖 Solution
🌈 Remarques
💯 Pour tester