Repository navigation
feat(favourites): heart a club, «Любими» on the web, API for the phone (#672) - #678
Merged
Merged
Conversation
#672) Owner decision 2026-11-12: players can mark clubs as favourites, phone and web. - P87: `favourite_venue`, owner-only RLS on app.user_id like the bell, the P69 deleted-account trigger, and removal in account deletion. - GET /me/favourites/venues (ids + cards, newest heart first, public venues only), PUT and DELETE /me/favourites/venues/{venueId} (idempotent; a non-public venue is 404; at most 200). - Web: a heart on every venue card and on the venue page (signed in only), and a «Любими» toggle on /venues. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DfeuWUNfBvCav72pHsXdHa
# Conflicts: # openapi/playerz-v1.json # tests/guardrails/superuser-call-sites.test.ts
# Conflicts: # openapi/playerz-v1.json
h0mele55
enabled auto-merge (squash)
November 12, 2026 14:17
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes the server and web part of #672 (owner decision 2026-11-12: favourite clubs on phone and web).
Data (P87, additive):
favourite_venue (userId, venueId, createdAt), PK on both ids. Owner-only RLS onapp.user_id(as the bell, P22), the P69account_not_deletedtrigger, and a delete in account deletion (plan + new-rows rule updated). No foreign keys, likepush_subscription: a venue that is gone or suspended drops out because every read goes throughpublicVenueFilter.API:
GET /api/v1/me/favourites/venues→{ ids, items: VenueSummary[] }, newest heart first, public venues only.PUT/DELETE /api/v1/me/favourites/venues/{venueId}→{ favourite }, idempotent. A venue that is not public is 404; more than 200 is 409.favourites.tsis added to the BYPASSRLS allowlist (public venue cards for ids the person chose).Web: a heart (
aria-pressed, 44 px) on each/venuescard, above the card's stretched link, and next to the venue page's title. Signed out there is no heart. A «Любими» toggle on/venuesshows the hearted venues, with its own empty state. Strings in bg + en.Checked locally: tsc; eslint; guardrails + unit + rendered (313 suites, 9957 tests, incl. new
favourite-button); integrationfavourite-venues(new: 401, idempotent on/off and order, owner-only under RLS, 404, suspended venue drops out),account-deletion,rls-policy-shape,least-privileged-role(47) on a private test DB.The iOS heart follows in playerz-ios once this is merged.
🤖 Generated with Claude Code
https://claude.ai/code/session_01DfeuWUNfBvCav72pHsXdHa