feat(discover): Tinder-style book discovery + fix duplicate books
Some checks failed
CI / UI (push) Failing after 22s
CI / Backend (push) Successful in 53s
Release / Test backend (push) Successful in 24s
Release / Check ui (push) Failing after 24s
Release / Docker / ui (push) Has been skipped
CI / Backend (pull_request) Successful in 25s
CI / UI (pull_request) Failing after 22s
Release / Docker / caddy (push) Successful in 56s
Release / Docker / backend (push) Successful in 1m38s
Release / Docker / runner (push) Successful in 3m14s
Release / Gitea Release (push) Has been skipped
Some checks failed
CI / UI (push) Failing after 22s
CI / Backend (push) Successful in 53s
Release / Test backend (push) Successful in 24s
Release / Check ui (push) Failing after 24s
Release / Docker / ui (push) Has been skipped
CI / Backend (pull_request) Successful in 25s
CI / UI (pull_request) Failing after 22s
Release / Docker / caddy (push) Successful in 56s
Release / Docker / backend (push) Successful in 1m38s
Release / Docker / runner (push) Successful in 3m14s
Release / Gitea Release (push) Has been skipped
- New /discover page with swipe UI: left=skip, right=like, up=read now, down=nope - Onboarding modal to collect genre/status preferences (persisted in localStorage) - 3-card stack with pointer-event drag, CSS fly-out animation, 5 action buttons - Tap card for preview modal; empty state with deck reset - Like/read-now auto-saves book to user library - POST /api/discover/vote + DELETE for deck reset - Discovery vote persistence via PocketBase discovery_votes collection - Fix duplicate books: dedup by slug in getBooksBySlugs - Fix WriteMetadata TOCTOU race: conflict-retry on concurrent insert Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
14
ui/src/routes/discover/+page.server.ts
Normal file
14
ui/src/routes/discover/+page.server.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import type { PageServerLoad } from './$types';
|
||||
import { getBooksForDiscovery } from '$lib/server/pocketbase';
|
||||
import type { DiscoveryPrefs } from '$lib/server/pocketbase';
|
||||
|
||||
export const load: PageServerLoad = async ({ locals, url }) => {
|
||||
let prefs: DiscoveryPrefs | undefined;
|
||||
const prefsParam = url.searchParams.get('prefs');
|
||||
if (prefsParam) {
|
||||
try { prefs = JSON.parse(prefsParam) as DiscoveryPrefs; } catch { /* ignore */ }
|
||||
}
|
||||
|
||||
const books = await getBooksForDiscovery(locals.sessionId, locals.user?.id, prefs).catch(() => []);
|
||||
return { books };
|
||||
};
|
||||
Reference in New Issue
Block a user