refactor: organize API around operation domains (#24)

* feat: reorganize API around operation domains

Restructure the oRPC contract from 14 resource-oriented routers to 8
domain-oriented routers for a cleaner public API surface.

- Consolidate 7 watch procedures into unified tracking.watch/unwatch
  with scope + ids input (movie, episode, season, series)
- Split dashboard across tracking (stats, history), library
  (continueWatching, upcoming), and discover (recommendations)
- Merge explore + search + discover into single discover router
- Absorb integrations into account.integrations
- Merge system.authConfig into system.publicInfo
- Collapse 6 admin setting endpoints into admin.settings.get/update
- Deduplicate platforms.list + explore.watchProviders into
  discover.platforms
- Add symmetric unwatchMovie/unwatchSeries core functions
- Rename titles.detail→get, titles.recommendations→similar,
  people.detail→get

BREAKING CHANGE: All client API paths have changed. REST paths now
mirror router structure.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: address review feedback on API reorganization

- Fix updateRating invalidation in native app — was only invalidating
  title queries, now calls invalidateTitleQueries() to also refresh
  tracking.userInfo (drives the rating UI)
- Make unwatchMovie status revert consistent with unwatchSeries — revert
  any non-watchlist status, not just "completed"
- Add sync invariant comment on handleWatch/handleUnwatch loops
- Remove unused queryClient import in native use-title-actions

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: updateStatus NOT_FOUND error + rate() invalidation in native

- updateStatus now throws NOT_FOUND when quickAddTitle returns null
  (title doesn't exist), instead of silently succeeding
- Add NOT_FOUND error to updateStatus contract definition
- Fix rate() in native title-actions.ts to call invalidateTitleQueries()
  instead of only invalidating orpc.titles.key() — mirrors the fix
  already applied to the hook-based path in d2ddc0f

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: expand mobile app docs and add Play Store badge

- Add the Google Play badge to the README alongside the App Store badge
- Expand the mobile app docs with the Android/Play Store release details
- Refresh docs site dependencies and related package versions for the updated docs stack

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-26 15:44:05 -04:00
committed by GitHub
co-authored by Claude Opus 4.6
parent 3906f6021d
commit dce333e128
123 changed files with 3566 additions and 4325 deletions
+12 -12
View File
@@ -16,21 +16,21 @@
"@lingui/metro-transformer": "5.9.3",
"@lingui/react": "5.9.3",
"@lingui/vite-plugin": "5.9.3",
"@orpc/client": "1.13.10",
"@orpc/contract": "1.13.10",
"@orpc/json-schema": "1.13.10",
"@orpc/openapi": "1.13.10",
"@orpc/server": "1.13.10",
"@orpc/tanstack-query": "1.13.10",
"@orpc/zod": "1.13.10",
"@orpc/client": "1.13.13",
"@orpc/contract": "1.13.13",
"@orpc/json-schema": "1.13.13",
"@orpc/openapi": "1.13.13",
"@orpc/server": "1.13.13",
"@orpc/tanstack-query": "1.13.13",
"@orpc/zod": "1.13.13",
"@tanstack/react-form": "1.28.5",
"@tanstack/react-query": "5.95.2",
"@types/bun": "1.3.11",
"@types/node": "25.5.0",
"@types/react": "19.2.14",
"@vitest/browser": "4.1.1",
"@vitest/browser-playwright": "4.1.1",
"@vitest/coverage-v8": "4.1.1",
"@vitest/browser": "4.1.2",
"@vitest/browser-playwright": "4.1.2",
"@vitest/coverage-v8": "4.1.2",
"better-auth": "1.5.6",
"drizzle-kit": "1.0.0-beta.19",
"drizzle-orm": "1.0.0-beta.19",
@@ -40,7 +40,7 @@
"tailwindcss": "4.2.2",
"thumbhash": "0.1.1",
"typescript": "5.9.3",
"vitest": "4.1.1",
"vitest": "4.1.2",
"zod": "4.3.6"
}
},
@@ -72,7 +72,7 @@
"@vitest/browser-playwright": "catalog:",
"@vitest/coverage-v8": "catalog:",
"eslint-plugin-drizzle": "0.2.3",
"eslint-plugin-lingui": "0.11.0",
"eslint-plugin-lingui": "0.12.0",
"eslint-plugin-react-hooks": "7.0.1",
"oxfmt": "0.42.0",
"oxlint": "1.57.0",