fix: handle empty filter param and add created/updated fields for PB 0.25 compat

This commit is contained in:
2026-07-19 15:03:15 +00:00
parent a45a2a0bb2
commit 327c5bf733
48 changed files with 49 additions and 1684 deletions
+2 -2
View File
@@ -9,12 +9,12 @@ export const GET = withAuth(async (request: NextRequest, _user) => {
const { searchParams } = new URL(request.url);
const page = parseInt(searchParams.get('page') || '1');
const perPage = parseInt(searchParams.get('perPage') || '50');
const filter = searchParams.get('filter') || '';
const filter = searchParams.get('filter') || undefined;
const sort = searchParams.get('sort') || '-created';
const pb = createPocketBaseClient();
const result = await pb.collection('agents').getList(page, perPage, {
filter,
...(filter ? { filter } : {}),
sort,
});
+2 -2
View File
@@ -9,12 +9,12 @@ export const GET = withAuth(async (request: NextRequest, _user) => {
const { searchParams } = new URL(request.url);
const page = parseInt(searchParams.get('page') || '1');
const perPage = parseInt(searchParams.get('perPage') || '50');
const filter = searchParams.get('filter') || '';
const filter = searchParams.get('filter') || undefined;
const sort = searchParams.get('sort') || '-created';
const pb = createPocketBaseClient();
const result = await pb.collection('canvases').getList(page, perPage, {
filter,
...(filter ? { filter } : {}),
sort,
});
+2 -2
View File
@@ -9,12 +9,12 @@ export const GET = withAuth(async (request: NextRequest, _user) => {
const { searchParams } = new URL(request.url);
const page = parseInt(searchParams.get('page') || '1');
const perPage = parseInt(searchParams.get('perPage') || '50');
const filter = searchParams.get('filter') || '';
const filter = searchParams.get('filter') || undefined;
const sort = searchParams.get('sort') || 'sort_order';
const pb = createPocketBaseClient();
const result = await pb.collection('domains').getList(page, perPage, {
filter,
...(filter ? { filter } : {}),
sort,
});
+1 -1
View File
@@ -20,7 +20,7 @@ export const GET = withAuth(async (request: NextRequest) => {
const pb = createPocketBaseClient();
const result = await pb.collection('habit_logs').getList(1, 1000, {
filter,
...(filter ? { filter } : {}),
sort: '-logged_at',
});
+1 -1
View File
@@ -12,7 +12,7 @@ export const GET = withAuth<RouteContext>(async (request: NextRequest, _user, co
const { searchParams } = new URL(request.url);
const page = parseInt(searchParams.get('page') || '1');
const perPage = parseInt(searchParams.get('perPage') || '50');
const filter = searchParams.get('filter') || '';
const filter = searchParams.get('filter') || undefined;
const sort = searchParams.get('sort') || '-logged_at';
const pb = createPocketBaseClient();
+2 -2
View File
@@ -9,12 +9,12 @@ export const GET = withAuth(async (request: NextRequest, _user) => {
const { searchParams } = new URL(request.url);
const page = parseInt(searchParams.get('page') || '1');
const perPage = parseInt(searchParams.get('perPage') || '50');
const filter = searchParams.get('filter') || '';
const filter = searchParams.get('filter') || undefined;
const sort = searchParams.get('sort') || '-created';
const pb = createPocketBaseClient();
const result = await pb.collection('habits').getList(page, perPage, {
filter,
...(filter ? { filter } : {}),
sort,
});
+2 -2
View File
@@ -9,12 +9,12 @@ export const GET = withAuth(async (request: NextRequest, _user) => {
const { searchParams } = new URL(request.url);
const page = parseInt(searchParams.get('page') || '1');
const perPage = parseInt(searchParams.get('perPage') || '50');
const filter = searchParams.get('filter') || '';
const filter = searchParams.get('filter') || undefined;
const sort = searchParams.get('sort') || '-created';
const pb = createPocketBaseClient();
const result = await pb.collection('milestones').getList(page, perPage, {
filter,
...(filter ? { filter } : {}),
sort,
});
+2 -2
View File
@@ -10,12 +10,12 @@ export const GET = withAuth(async (request: NextRequest, _user) => {
const { searchParams } = new URL(request.url);
const page = parseInt(searchParams.get('page') || '1');
const perPage = parseInt(searchParams.get('perPage') || '50');
const filter = searchParams.get('filter') || '';
const filter = searchParams.get('filter') || undefined;
const sort = searchParams.get('sort') || '-created';
const pb = createPocketBaseClient();
const result = await pb.collection('notes').getList(page, perPage, {
filter,
...(filter ? { filter } : {}),
sort,
});
+2 -2
View File
@@ -9,12 +9,12 @@ export const GET = withAuth(async (request: NextRequest, _user) => {
const { searchParams } = new URL(request.url);
const page = parseInt(searchParams.get('page') || '1');
const perPage = parseInt(searchParams.get('perPage') || '50');
const filter = searchParams.get('filter') || '';
const filter = searchParams.get('filter') || undefined;
const sort = searchParams.get('sort') || '-created';
const pb = createPocketBaseClient();
const result = await pb.collection('projects').getList(page, perPage, {
filter,
...(filter ? { filter } : {}),
sort,
});
+2 -2
View File
@@ -9,12 +9,12 @@ export const GET = withAuth(async (request: NextRequest, _user) => {
const { searchParams } = new URL(request.url);
const page = parseInt(searchParams.get('page') || '1');
const perPage = parseInt(searchParams.get('perPage') || '50');
const filter = searchParams.get('filter') || '';
const filter = searchParams.get('filter') || undefined;
const sort = searchParams.get('sort') || '-created';
const pb = createPocketBaseClient();
const result = await pb.collection('reports').getList(page, perPage, {
filter,
...(filter ? { filter } : {}),
sort,
});
+2 -2
View File
@@ -9,12 +9,12 @@ export const GET = withAuth(async (request: NextRequest, _user) => {
const { searchParams } = new URL(request.url);
const page = parseInt(searchParams.get('page') || '1');
const perPage = parseInt(searchParams.get('perPage') || '50');
const filter = searchParams.get('filter') || '';
const filter = searchParams.get('filter') || undefined;
const sort = searchParams.get('sort') || 'name';
const pb = createPocketBaseClient();
const result = await pb.collection('tags').getList(page, perPage, {
filter,
...(filter ? { filter } : {}),
sort,
});
+2 -2
View File
@@ -9,12 +9,12 @@ export const GET = withAuth(async (request: NextRequest, _user) => {
const { searchParams } = new URL(request.url);
const page = parseInt(searchParams.get('page') || '1');
const perPage = parseInt(searchParams.get('perPage') || '50');
const filter = searchParams.get('filter') || '';
const filter = searchParams.get('filter') || undefined;
const sort = searchParams.get('sort') || '-created';
const pb = createPocketBaseClient();
const result = await pb.collection('tasks').getList(page, perPage, {
filter,
...(filter ? { filter } : {}),
sort,
});
+1 -1
View File
@@ -7,7 +7,7 @@ export const GET = withAuth(async (request: NextRequest, _user) => {
const { searchParams } = new URL(request.url);
const page = parseInt(searchParams.get('page') || '1');
const perPage = parseInt(searchParams.get('perPage') || '50');
const filter = searchParams.get('filter') || '';
const filter = searchParams.get('filter') || undefined;
const sort = searchParams.get('sort') || '-created';
const webhookId = searchParams.get('webhook_id') || '';
+2 -2
View File
@@ -9,12 +9,12 @@ export const GET = withAuth(async (request: NextRequest, _user) => {
const { searchParams } = new URL(request.url);
const page = parseInt(searchParams.get('page') || '1');
const perPage = parseInt(searchParams.get('perPage') || '50');
const filter = searchParams.get('filter') || '';
const filter = searchParams.get('filter') || undefined;
const sort = searchParams.get('sort') || '-created';
const pb = createPocketBaseClient();
const result = await pb.collection('webhooks').getList(page, perPage, {
filter,
...(filter ? { filter } : {}),
sort,
});
+19 -8
View File
@@ -1,5 +1,4 @@
import { NextRequest, NextResponse } from 'next/server';
import { createPocketBaseClient } from './pocketbase';
export interface AuthUser {
id: string;
@@ -23,13 +22,24 @@ export async function getAuthUser(request: NextRequest): Promise<AuthUser | null
if (!token) return null;
try {
const pb = createPocketBaseClient(token);
const authData = await pb.collection('users').authRefresh();
// Decode JWT to get user ID
const payload = JSON.parse(Buffer.from(token.split('.')[1], 'base64').toString());
const userId = payload.id;
// Use raw fetch with admin token to get the user record
// (avoids PocketBase SDK authStore issues with superuser tokens)
const adminToken = process.env.POCKETBASE_ADMIN_TOKEN || '';
const pbUrl = process.env.POCKETBASE_URL || 'http://localhost:8090';
const res = await fetch(pbUrl + '/api/collections/users/records/' + userId, {
headers: { Authorization: adminToken },
});
if (!res.ok) return null;
const record = await res.json();
return {
id: authData.record.id,
email: authData.record.email,
name: authData.record.name || authData.record.email,
id: record.id,
email: record.email,
name: record.name || record.email,
};
} catch {
return null;
@@ -78,8 +88,9 @@ export function withAuth<T>(
);
}
console.error('[withAuth] error:', error);
return NextResponse.json(
{ error: { code: 'INTERNAL_ERROR', message: 'Authentication failed' } },
{ error: { code: 'INTERNAL_ERROR', message: 'Auth error: ' + (error instanceof Error ? error.message : String(error)) } },
{ status: 500 }
);
}
@@ -134,4 +145,4 @@ export function createErrorResponse(
},
{ status }
);
}
}
+1 -1
View File
@@ -29,7 +29,7 @@ export function createAdminClient(): PocketBase {
const pb = new PocketBase(pocketbaseUrl);
const adminToken = getAdminToken();
if (adminToken) {
pb.authStore.save(adminToken, null);
pb.authStore.save(adminToken, { id: 'admin', email: 'admin@projecte.local', collectionId: '_superusers', collectionName: '_superusers' } as any);
}
return pb;
}