Let friends invite each other into active rooms
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 30/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- cypress, javascript, mongodb, node.js, postgresql, react
- Ambito
- api, authorization, backend, databases, frontend, full-stack, testing
Direzione di ricerca
Inizia tracciando il percorso di concessione dell'accesso alla room da #156 e la friends/notification UI, quindi esamina i requisiti di persistenza MongoDB e del mirror PostgreSQL. Verifica le operazioni create, list, decline, revoke e consume rispetto ai criteri di autorizzazione e idempotenza. Concludi con il flusso invite-to-join di Cypress con due utenti e i casi elencati di scadenza, blocco, ban, replay e riconnessione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Goal
Let a user turn an existing friendship into a race by sending a safe, actionable room invitation.
Product contract
- A user may invite an accepted friend while the inviter is actively in the room.
- Any participant may invite a friend to a public room.
- Only the room owner/current admin may grant a private-room invitation.
- One active invite per room/invitee is deduplicated; resending refreshes the existing invitation rather than spamming duplicates.
- Invites expire after a documented short TTL and immediately become invalid when the room is deleted/hidden, the inviter loses authority, either user blocks the other, or the invite is revoked.
- The recipient can join or decline from the notification/friends UI.
- A private-room invite may bypass the password only for the exact authenticated invitee and room. It never bypasses bans, revealed-identity requirements, room availability, or server-side join checks.
Data and API
Use a durable typed room-invite resource with inviter, invitee, room, state, expiry, and response timestamps. Notification records reference this resource; notification actions do not contain arbitrary callbacks. Use an opaque invite identifier in deep links and validate the authenticated recipient on every operation.
Coordinate the access-grant path with #156 so private-room approval and friend invitations do not become two incompatible authorization systems.
Acceptance criteria
- Add create/list/decline/revoke/consume operations with idempotent state transitions and explicit authorization.
- Persist invites in MongoDB and add the corresponding non-blocking PostgreSQL mirror/migration.
- Create a typed in-app notification and realtime event without exposing room passwords or private room membership.
- Make successful joining consume the invite atomically enough to prevent replay while remaining retry-safe.
- Give clear UI feedback for expired, revoked, deleted-room, blocked, banned, and no-longer-authorized cases.
- Add tests for public/private rooms, owner/admin changes, duplicate sends, expiry, blocking, bans, identity requirements, replay, and reconnect.
- Add a two-user Cypress flow for invite → notification → join.
Dependencies
- #75
- #105
- #153
- Related: #156
Non-goals
- Anonymous invite links.
- Inviting arbitrary non-friends.
- Sharing or revealing private-room passwords.
- Lingua principale
- JavaScript
- Stelle
- 30
- Fork
- 9
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di coder13/LetsCube
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 65/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
-
area: data area: platform enhancement priority: P1
Difficoltà 5/5 Più di una settimana Idoneità per principianti 28/100
Tutte le issue di coder13/LetsCube
Issue simili
-
automated issue report
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
lirantal/discoprint#36 ·
I maintainer di solito rispondono entro 1 giorno
-
accepting PR Content:HTML
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
mdn/content#45988 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
pnpm/pnpm#16635 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
txn2/mcp-data-platform#2030 ·
I maintainer di solito rispondono entro 1 giorno
-
ci hacktoberfest help wanted size/small type/bug type/docs type/enhancement up-for-grabs
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
Redo-San/RedoSan-Authenticity#527 ·
I maintainer di solito rispondono entro 1 giorno