feat: connect explore datasets to backend
This commit is contained in:
105
apps/web_v1/src/api/dataset.ts
Normal file
105
apps/web_v1/src/api/dataset.ts
Normal file
@@ -0,0 +1,105 @@
|
||||
import { apiRequest, type ApiSession } from './client'
|
||||
|
||||
export type DatasetSourceKind = 'manual' | 'link' | 'rss'
|
||||
|
||||
export type DatasetSourceDTO = {
|
||||
id: string
|
||||
name: string
|
||||
kind: DatasetSourceKind
|
||||
url: string
|
||||
description: string
|
||||
enabled: boolean
|
||||
lastSyncedAt: string | null
|
||||
itemCount: number
|
||||
createdAt: string
|
||||
updatedAt: string
|
||||
}
|
||||
|
||||
export type DatasetItemDTO = {
|
||||
id: string
|
||||
sourceId: string
|
||||
title: string
|
||||
summary: string
|
||||
content: string
|
||||
url: string
|
||||
status: 'unread' | 'read' | 'archived'
|
||||
starred: boolean
|
||||
publishedAt: string | null
|
||||
createdAt: string
|
||||
updatedAt: string
|
||||
}
|
||||
|
||||
export type DatasetCronDTO = {
|
||||
id: string
|
||||
sourceId: string
|
||||
schedule: string
|
||||
status: string
|
||||
enabled: boolean
|
||||
nextRunAt: string | null
|
||||
lastRunAt: string | null
|
||||
lastResult: string
|
||||
createdAt: string
|
||||
updatedAt: string
|
||||
}
|
||||
|
||||
export type DatasetSourceInput = {
|
||||
name: string
|
||||
kind: DatasetSourceKind
|
||||
url: string
|
||||
description: string
|
||||
enabled: boolean
|
||||
}
|
||||
|
||||
export type DatasetItemUpdate = {
|
||||
status: DatasetItemDTO['status']
|
||||
starred: boolean
|
||||
}
|
||||
|
||||
export function listDatasetSources(session: ApiSession, signal?: AbortSignal) {
|
||||
return apiRequest<DatasetSourceDTO[]>('/api/v1/dataset-sources', { token: session.token, signal })
|
||||
}
|
||||
|
||||
export function createDatasetSource(session: ApiSession, input: DatasetSourceInput) {
|
||||
return apiRequest<DatasetSourceDTO>('/api/v1/dataset-sources', {
|
||||
method: 'POST',
|
||||
token: session.token,
|
||||
body: input,
|
||||
})
|
||||
}
|
||||
|
||||
export function updateDatasetSource(session: ApiSession, sourceId: string, input: DatasetSourceInput) {
|
||||
return apiRequest<DatasetSourceDTO>(`/api/v1/dataset-sources/${sourceId}`, {
|
||||
method: 'PATCH',
|
||||
token: session.token,
|
||||
body: input,
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteDatasetSource(session: ApiSession, sourceId: string) {
|
||||
return apiRequest<void>(`/api/v1/dataset-sources/${sourceId}`, {
|
||||
method: 'DELETE',
|
||||
token: session.token,
|
||||
responseType: 'void',
|
||||
})
|
||||
}
|
||||
|
||||
export function listDatasetItems(session: ApiSession, sourceId?: string, signal?: AbortSignal) {
|
||||
const query = sourceId ? `?sourceId=${encodeURIComponent(sourceId)}` : ''
|
||||
return apiRequest<DatasetItemDTO[]>(`/api/v1/dataset-items${query}`, { token: session.token, signal })
|
||||
}
|
||||
|
||||
export function updateDatasetItem(session: ApiSession, itemId: string, input: DatasetItemUpdate) {
|
||||
return apiRequest<DatasetItemDTO>(`/api/v1/dataset-items/${itemId}`, {
|
||||
method: 'PATCH',
|
||||
token: session.token,
|
||||
body: input,
|
||||
})
|
||||
}
|
||||
|
||||
export function queueDatasetSync(session: ApiSession) {
|
||||
return apiRequest<DatasetCronDTO[]>('/api/v1/dataset-crons/sync', {
|
||||
method: 'POST',
|
||||
token: session.token,
|
||||
body: {},
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user