Skip to content

feat: portfolios partagés entre amis (suggestion n° 125) - #183

Merged
Palawizard merged 6 commits into
devfrom
feat/suggestion-125
Nov 3, 2026
Merged

Palawizard merged 6 commits into
devfrom
feat/suggestion-125

Conversation

@Palawizard

@Palawizard Palawizard commented Oct 30, 2026 •

Copy link
Copy Markdown
Owner

Suggestion n° 125 · issue #182 · branche feat/suggestion-125

Résumé

Le propriétaire d'un portfolio peut inviter des amis depuis l'éditeur (5 joueurs au plus, lui compris). L'ami reçoit une notification, accepte ou refuse depuis la page Portfolios ou la page du portfolio, puis ajoute, réordonne et retire ses propres cartes ; aucune carte ne change de main. Le propriétaire peut révoquer un accès (les cartes de l'ami quittent le portfolio et restent à lui) et choisir si le portfolio est visible de tous ou des seuls participants.

Décisions de Palawi

  1. Droits choisis par le propriétaire pour chaque invité : Contributeur (par défaut : ajoute et retire ses propres cartes, sans toucher à l'ordre ni à la vedette) ou Éditeur (ordre, vedette et retrait des cartes de tous, comme le propriétaire). Titre, design, partage et visibilité restent au propriétaire. Les droits se changent à tout moment ; les cartes déjà posées restent.
  2. 10 joueurs au plus, propriétaire et invitations compris.
  3. Visibilité au choix du propriétaire.
  4. Visibilité par défaut : celle du portfolio (publique).
  5. Le propriétaire peut retirer les cartes de ses amis.
  6. Ordre et vedette : propriétaire et éditeurs (voir 1).
  7. Plus amis : l'ami quitte le portfolio avec ses cartes.
  8. Chaque participant peut l'épingler sur son profil (dans ses 3 portfolios affichés) ; un portfolio « participants seuls » quitte tous les profils.

Changements

  • packages/game : PORTFOLIO_SHARED_MAX_PLAYERS, PORTFOLIO_VISIBILITIES et règle portfolioCardsChange (qui peut retirer quoi), avec tests
  • packages/db : table portfolio_members (invitation en attente tant que joined_at est nul) et colonne portfolios.visibility (migration 0054)
  • API : invitation d'un ami (POST /portfolios/:id/members), acceptation (POST /portfolios/:id/join), départ, refus ou révocation (DELETE /portfolios/:id/members/:username), invitations en attente (GET /portfolios/invitations), visibilité dans PATCH /portfolios/:id
  • API : cartes d'un portfolio comptées si elles sont à un participant ; chacun n'ajoute que ses cartes et ne retire que les siennes (le propriétaire, toutes) ; titre et design réservés au propriétaire ; participants exclus des j'aime
  • API : un portfolio « participants seuls » disparaît de la page Communauté, du profil et de la page publique pour les autres ; il quitte le profil du propriétaire
  • API : retirer un ami le fait sortir des portfolios partagés (dans les deux sens), avec ses cartes
  • Notifications portfolio_invite et portfolio_joined (catégorie Amis, guilde et portfolios partagés) ; export des données personnelles complété
  • Web, éditeur : panneau Partage pour le propriétaire (amis, invitations, retrait avec confirmation, visibilité) ; vue d'un participant (ses cartes, qui compose, Quitter) ; auteur de chaque carte sous la carte
  • Web : section Invitations sur la page Portfolios, bandeau Rejoindre / Refuser sur la page du portfolio, participants nommés sur la page publique et dans les aperçus
  • Droits par invité : colonne portfolio_members.role, PATCH /portfolios/:id/members/:username, sélecteur Contributeur / Éditeur dans le panneau Partage ; un contributeur n'a que ses additions et retraits pris en compte
  • Épinglage : colonne portfolio_members.profile_slot, PUT /portfolios/profile accepte les portfolios partagés rejoints
  • Tests : test/portfolios.test.ts (5 cas), e2e 17-portfolios-partages.spec.ts

Migration

  • packages/db/migrations/0054_portfolio_members.sql

Réponse proposée au joueur

C'est en ligne : depuis l'éditeur d'un de tes portfolios, invite jusqu'à 9 amis pour le composer ensemble. Chacun y ajoute ses propres cartes, qui restent à lui ; tu choisis qui peut aussi ranger l'ordre et la vedette, et si le portfolio est visible de tous ou de vous seuls. Chacun peut l'afficher sur son profil. Merci pour l'idée !

Ligne d'annonce

Portfolios : invite jusqu'à 9 amis à composer un portfolio avec toi, chacun avec ses propres cartes, et affichez-le sur vos profils.

Vérifications

  • pnpm format
  • pnpm lint
  • pnpm typecheck
  • pnpm --filter @palacards/game test
  • vitest : test/portfolios.test.ts, test/social.test.ts, test/privacy.test.ts
  • e2e : 16-portfolios.spec.ts, 17-portfolios-partages.spec.ts
  • impeccable detect (aucun signalement)

Branche préparée automatiquement. Pour l'accepter : Squash and merge vers dev (le commit sera à ton nom). Pour demander une modification : un commentaire qui commence par @claude.

@Palawizard

Copy link
Copy Markdown
Owner Author

@claude Mets la branche à jour avec dev : merge de dev dans la branche, puis renumérote la migration de cette PR après 0052_achievement_archives (supprime ta migration et son snapshot, relance pnpm --filter @palacards/db generate pour obtenir le même SQL sous le numéro suivant, journal à jour). Vérifie typecheck, lint et tests, puis commite.

@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

Claude finished @Palawizard's task in 55s —— View job


Mise à jour avec dev : bloquée, rien n'a été commité

  • Merge de dev dans la branche : refusé par les permissions du job
  • Renumérotation de la migration après 0052_achievement_archives : pas faite
  • typecheck, lint, tests : pas lancés
  • Commit : rien commité

Le job ne m'autorise pas à lancer git merge origin/dev (ni git fetch origin dev) : la commande est refusée faute d'approbation. Je n'ai pas cherché à contourner ce blocage avec d'autres commandes git.

Renuméroter sans le merge n'aurait servi à rien : drizzle-kit génère la migration à partir du dernier snapshot. Sans le 0052_snapshot.json de dev, j'obtiendrais un SQL faux et un journal qui entrerait de nouveau en conflit au merge.

La branche a un seul commit de retard : fa55c55 (#186). Il touche aussi apps/api/src/services/portfolios.ts et privacy.ts, donc des conflits sont à prévoir dans ces deux fichiers.

Pour débloquer :

  • Option 1 : ajoute Bash(git merge:*) et Bash(git fetch:*) aux allowedTools du workflow suggestion-followup, puis relance le même commentaire. Je ferai alors le merge, la régénération en 0053_portfolio_members avec le journal à jour, les vérifications et le commit.
  • Option 2 : merge dev toi-même dans la branche et garde la version de dev pour la migration 0052. Je m'occupe ensuite de la renumérotation, sans avoir besoin du merge.

- droits par invité : contributeur (par défaut, ajoute et retire ses cartes) ou éditeur (ordre, vedette, retrait des cartes de tous) ;
- 10 joueurs au plus, propriétaire compris ;
- chaque participant peut épingler le portfolio partagé sur son profil ;
- migration renumérotée en 0054_portfolio_members.
@Palawizard
Palawizard merged commit e5e382d into dev Nov 3, 2026
2 checks passed
@github-actions
github-actions Bot deleted the feat/suggestion-125 branch November 3, 2026 15:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant