57 lines
1.7 KiB
TypeScript
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))
|
|
}
|