Files
hfb_jysh/frontend/src/features/listings/collectionsApi.ts
T

57 lines
1.7 KiB
TypeScript

import { apiClient, unwrapData } from '@/shared/api/client'
import type { ApiResponse, Listing } from '@/shared/api/types'
export type CollectionKind = 'history' | 'favorite'
export interface RemoteCollectionItem {
listing: Listing
occurred_at: string
}
export interface RemoteCollectionCounts {
history: number
favorite: number
}
export interface RemoteCollectionList {
items: RemoteCollectionItem[]
counts: RemoteCollectionCounts
}
export function fetchRemoteCollections(kind: CollectionKind) {
return unwrapData<RemoteCollectionList>(
apiClient.get<ApiResponse<RemoteCollectionList>>('/me/listing-collections', {
params: { kind },
})
).then(data => ({
items: data.items ?? [],
counts: data.counts ?? { history: 0, favorite: 0 },
}))
}
export async function recordRemoteView(listingID: number) {
await apiClient.post('/me/listing-collections/view', { listing_id: listingID })
}
export async function addRemoteFavorite(listingID: number) {
await apiClient.post('/me/listing-collections/favorites', { listing_id: listingID })
}
export async function removeRemoteFavorite(listingID: number) {
await apiClient.delete(`/me/listing-collections/favorites/${listingID}`)
}
export async function removeRemoteHistory(listingID: number) {
await apiClient.delete(`/me/listing-collections/history/${listingID}`)
}
export async function clearRemoteHistory() {
await apiClient.delete('/me/listing-collections/history')
}
/** 收藏状态下拉用:只取收藏列表的 id 集合。 */
export async function fetchFavoriteIDs() {
const data = await fetchRemoteCollections('favorite')
return new Set(data.items.map(item => item.listing.id))
}