feat: add wishlist

This commit is contained in:
2026-09-30 19:15:57 +02:00
parent ab3bbb6338
commit 1f6061b998
57 changed files with 638 additions and 232 deletions
+15 -17
View File
@@ -1,6 +1,5 @@
import type { H3Event } from 'h3'
type Table = 'reviews' | 'notes'
type Fields = Record<string, unknown>
interface RowPage<Row> {
@@ -11,19 +10,10 @@ interface RowPage<Row> {
const PAGE_SIZE = 200
const TIMEOUT_MS = 15_000
function tableId(event: H3Event, table: Table): string {
const config = useRuntimeConfig(event)
const id = { reviews: config.baserowReviewsTableId, notes: config.baserowNotesTableId }[table]
if (!id) {
throw createError({ statusCode: 500, statusMessage: `NUXT_BASEROW_${table.toUpperCase()}_TABLE_ID is not set` })
}
return id
}
async function request<T>(
event: H3Event,
path: string,
options: { method?: 'GET' | 'POST', query?: Fields, body?: Fields } = {}
options: { method?: 'GET' | 'POST' | 'PATCH', query?: Fields, body?: Fields } = {}
): Promise<T> {
const { baserowUrl, baserowToken } = useRuntimeConfig(event)
if (!baserowUrl || !baserowToken) {
@@ -48,8 +38,8 @@ async function request<T>(
}
}
export async function listRows<Row>(event: H3Event, table: Table): Promise<Row[]> {
const path = `rows/table/${tableId(event, table)}/`
export async function listRows<Row>(event: H3Event, tableId: string): Promise<Row[]> {
const path = `rows/table/${tableId}/`
const rows: Row[] = []
for (let page = 1; ; page++) {
const { count, results } = await request<RowPage<Row>>(event, path, {
@@ -60,14 +50,22 @@ export async function listRows<Row>(event: H3Event, table: Table): Promise<Row[]
}
}
export function createRow<Row>(event: H3Event, table: Table, fields: Fields): Promise<Row> {
return request<Row>(event, `rows/table/${tableId(event, table)}/`, {
export function createRow<Row>(event: H3Event, tableId: string, fields: Fields): Promise<Row> {
return request<Row>(event, `rows/table/${tableId}/`, {
method: 'POST',
query: { user_field_names: true },
body: fields
})
}
export function listFields<Field>(event: H3Event, table: Table): Promise<Field[]> {
return request<Field[]>(event, `fields/table/${tableId(event, table)}/`)
export function updateRow<Row>(event: H3Event, tableId: string, rowId: number, fields: Fields): Promise<Row> {
return request<Row>(event, `rows/table/${tableId}/${rowId}/`, {
method: 'PATCH',
query: { user_field_names: true },
body: fields
})
}
export function listFields<Field>(event: H3Event, tableId: string): Promise<Field[]> {
return request<Field[]>(event, `fields/table/${tableId}/`)
}