feat: add wishlist
This commit is contained in:
+15
-17
@@ -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}/`)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user