From 14a3d8a02b4d2f001c35d57e9bffce20c8f42597 Mon Sep 17 00:00:00 2001 From: JMCP Bot Date: Wed, 25 Mar 2026 14:35:47 +0100 Subject: [PATCH] jmcp: Make the date cutoff a query parameter --- apps/web/app/feed/page.tsx | 3 +- package-lock.json | 127 +------------------------------------ packages/auth/package.json | 2 +- packages/db/src/index.ts | 12 +++- 4 files changed, 15 insertions(+), 129 deletions(-) diff --git a/apps/web/app/feed/page.tsx b/apps/web/app/feed/page.tsx index a6e5fce..3291ed3 100644 --- a/apps/web/app/feed/page.tsx +++ b/apps/web/app/feed/page.tsx @@ -11,7 +11,7 @@ const repository = createRepository() export default async function FeedPage({ searchParams, }: { - searchParams: Promise<{ q?: string }> + searchParams: Promise<{ q?: string; since?: string }> }) { const params = await searchParams const viewerHandle = await getViewerHandleFromCookies() @@ -19,6 +19,7 @@ export default async function FeedPage({ repository.getFeed({ viewerHandle, query: params.q, + since: params.since, }), repository.listTrendingPapers({ viewerHandle, diff --git a/package-lock.json b/package-lock.json index 6d40624..ee21e60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8084,7 +8084,7 @@ "@papers/config": "0.1.0", "@papers/db": "0.1.0", "better-auth": "^1.5.6", - "drizzle-orm": "^0.44.5", + "drizzle-orm": "^0.45.1", "pg": "^8.16.3" } }, @@ -8319,131 +8319,6 @@ } } }, - "packages/auth/node_modules/drizzle-orm": { - "version": "0.44.7", - "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.44.7.tgz", - "integrity": "sha512-quIpnYznjU9lHshEOAYLoZ9s3jweleHlZIAWR/jX9gAWNg/JhQ1wj0KGRf7/Zm+obRrYd9GjPVJg790QY9N5AQ==", - "license": "Apache-2.0", - "peerDependencies": { - "@aws-sdk/client-rds-data": ">=3", - "@cloudflare/workers-types": ">=4", - "@electric-sql/pglite": ">=0.2.0", - "@libsql/client": ">=0.10.0", - "@libsql/client-wasm": ">=0.10.0", - "@neondatabase/serverless": ">=0.10.0", - "@op-engineering/op-sqlite": ">=2", - "@opentelemetry/api": "^1.4.1", - "@planetscale/database": ">=1.13", - "@prisma/client": "*", - "@tidbcloud/serverless": "*", - "@types/better-sqlite3": "*", - "@types/pg": "*", - "@types/sql.js": "*", - "@upstash/redis": ">=1.34.7", - "@vercel/postgres": ">=0.8.0", - "@xata.io/client": "*", - "better-sqlite3": ">=7", - "bun-types": "*", - "expo-sqlite": ">=14.0.0", - "gel": ">=2", - "knex": "*", - "kysely": "*", - "mysql2": ">=2", - "pg": ">=8", - "postgres": ">=3", - "sql.js": ">=1", - "sqlite3": ">=5" - }, - "peerDependenciesMeta": { - "@aws-sdk/client-rds-data": { - "optional": true - }, - "@cloudflare/workers-types": { - "optional": true - }, - "@electric-sql/pglite": { - "optional": true - }, - "@libsql/client": { - "optional": true - }, - "@libsql/client-wasm": { - "optional": true - }, - "@neondatabase/serverless": { - "optional": true - }, - "@op-engineering/op-sqlite": { - "optional": true - }, - "@opentelemetry/api": { - "optional": true - }, - "@planetscale/database": { - "optional": true - }, - "@prisma/client": { - "optional": true - }, - "@tidbcloud/serverless": { - "optional": true - }, - "@types/better-sqlite3": { - "optional": true - }, - "@types/pg": { - "optional": true - }, - "@types/sql.js": { - "optional": true - }, - "@upstash/redis": { - "optional": true - }, - "@vercel/postgres": { - "optional": true - }, - "@xata.io/client": { - "optional": true - }, - "better-sqlite3": { - "optional": true - }, - "bun-types": { - "optional": true - }, - "expo-sqlite": { - "optional": true - }, - "gel": { - "optional": true - }, - "knex": { - "optional": true - }, - "kysely": { - "optional": true - }, - "mysql2": { - "optional": true - }, - "pg": { - "optional": true - }, - "postgres": { - "optional": true - }, - "prisma": { - "optional": true - }, - "sql.js": { - "optional": true - }, - "sqlite3": { - "optional": true - } - } - }, "packages/auth/node_modules/jose": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.2.tgz", diff --git a/packages/auth/package.json b/packages/auth/package.json index 4626c53..ac82834 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -17,7 +17,7 @@ "@papers/config": "0.1.0", "@papers/db": "0.1.0", "better-auth": "^1.5.6", - "drizzle-orm": "^0.44.5", + "drizzle-orm": "^0.45.1", "pg": "^8.16.3" } } diff --git a/packages/db/src/index.ts b/packages/db/src/index.ts index 7611584..32a3358 100644 --- a/packages/db/src/index.ts +++ b/packages/db/src/index.ts @@ -145,7 +145,11 @@ export interface PapersRepository { }): Promise updateViewerProfile(input: UpdateViewerProfileInput, viewerHandle?: string | null): Promise getRoadmap(): Promise - getFeed(input?: { viewerHandle?: string | null; query?: string | null }): Promise + getFeed(input?: { + viewerHandle?: string | null + query?: string | null + since?: string | null + }): Promise listTrendingPapers(input?: { viewerHandle?: string | null; limit?: number }): Promise getPaperBySlug(slug: string, viewerHandle?: string | null): Promise getProfileByHandle(handle: string, viewerHandle?: string | null): Promise @@ -431,13 +435,19 @@ class DemoRepository implements PapersRepository { async getFeed(input?: { viewerHandle?: string | null query?: string | null + since?: string | null }): Promise { const state = await readDemoState() const viewer = await this.getViewer(input?.viewerHandle) const normalizedQuery = input?.query?.trim().toLowerCase() + const sinceMs = input?.since ? new Date(input.since).getTime() : null return state.papers .filter((paper) => { + if (sinceMs && new Date(paper.createdAt).getTime() < sinceMs) { + return false + } + if (!normalizedQuery) { return true }