feature(api) + feature(marketing-ui) + test(e2e): the app store product page — detail endpoint, reviews with comments, card → page wiring (D50) - #687
Merged
Conversation
…-keyed product page, reviews)
# Conflicts: # knowledge/knowledge-base/web10-v3/app-store/overview.md # knowledge/knowledge-base/web10-v3/db/clickhouse.md # knowledge/strategy/decisions.md
…ct page — detail endpoint, reviews with comments, card → page wiring (D50)
…oduct-page # Conflicts: # knowledge/strategy/decisions.md
…oduct-page # Conflicts: # api/app/v3/services/clickhouse.py
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.
What
The app store's product page is real (D50, the build). Tap a tile → a shareable page with the full manifest description, the complete metric breakdown, and reviews (rating + optional comment). Logged-in users can rate and comment directly on the page.
Builds on the D50 spec (PR #682,
app-store/endpoints.md) — this branch is a superset of it, so the diff shows the docs until #682 merges.Operator: "opening the app store logged in, they should be able to rate, comment."
API
GET /v3/apps/detail?url=— the product page payload in one public read: app record + full realtime metric breakdown (get_app_metricsoverapp_visits) + rating aggregate + rating list + the/v3/statsnode macro. 404 for unknown and unapproved apps. Pure read — a product-page view writes noapp_visitsrow.app_ratingsgainscomment String DEFAULT ''(DDL template + boot-time ALTER, named-column insert).POST /v3/apps/ratingaccepts an optional comment (1000-char cap); the rating list + detail return it. Ratings key on the canonical url (hardening dramatically reorganized the crm #4).deleted = 0read sees both until a background ReplacingMergeTree merge. Fixed with the house dedup-then-filter pattern (row_number() OVER (PARTITION BY target_app_id, author ORDER BY updated_at DESC, deleted DESC)) inget_app_ratingsand the admin aggregate (same latent bug).list_store_appsstops blankingweb10apps_post_id(field dropped — the URL is the key).UI (marketing-ui)
/app-store/app/{urlencoded-canonical-url}, preserving the?api=override for isolated stacks.AppDetailrewritten: the detail endpoint replaces the phantomPATCH /discover/app/{id}; the PWA manifest is preferred for identity; five metric blocks; reviews (aggregate + list + comments + designed empty state); the rate form is session-gated on thetokencookie — signed in → star picker + comment + submit; signed out → "Sign in to rate" card that loads the SDK IIFE on demand and runs the D42 auth popup. Node context footer.Tests
get_appmocks re-aligned to the newcreated_atcolumn.AppDetail.test.tsxrewritten (17 tests);AppCardroute tests re-aligned to the URL-encoded key.app-store.spec.ts(detail payload + pure-read, 404s, rating round-trip with re-rate dedup + cap, card → product page browser seam).Verification
KB
endpoints.mdlogistics table updated to built; CHANGELOG 3.17.0; plan + lane ticks.