import { createApiClient } from "../lib/apiClient"; import type { ProductLocationByStoreDto, ProductLocationCreateInput, ProductLocationGetListInput, ProductLocationLinkDto, ProductLocationUpdateInput, PagedResultDto, } from "../types/productLocation"; const api = createApiClient({ getToken: () => { try { return localStorage.getItem("access_token") ?? localStorage.getItem("token") ?? null; } catch { return null; } }, }); const PATH = "/product-location"; function normalizeLink(raw: unknown): ProductLocationLinkDto { const r = raw as Record; return { id: (r?.id ?? r?.Id) as string | undefined, locationId: (r?.locationId ?? r?.LocationId) as string | null | undefined, productId: (r?.productId ?? r?.ProductId) as string | null | undefined, }; } export async function getProductLocations( input: ProductLocationGetListInput, signal?: AbortSignal, ): Promise> { const res = await api.requestJson>({ path: PATH, method: "GET", query: { SkipCount: input.skipCount, MaxResultCount: input.maxResultCount, Sorting: input.sorting, LocationId: input.locationId, ProductId: input.productId, }, signal, }); return { ...res, items: (res.items ?? []).map((x) => normalizeLink(x)), }; } /** 门店下已关联的产品(文档 7.2) */ export async function getProductIdsByLocation(locationId: string, signal?: AbortSignal): Promise { const raw = await api.requestJson({ path: `${PATH}/${encodeURIComponent(locationId)}`, method: "GET", signal, }); if (Array.isArray(raw?.productIds)) return raw.productIds.map(String); if (Array.isArray(raw?.items)) { return (raw.items ?? []) .map((x) => x?.productId) .filter((x): x is string => typeof x === "string" && x.length > 0); } return []; } export async function createProductLocation(input: ProductLocationCreateInput): Promise { return api.requestJson({ path: PATH, method: "POST", body: { locationId: input.locationId, productIds: input.productIds, }, }); } export async function updateProductLocation(locationId: string, input: ProductLocationUpdateInput): Promise { return api.requestJson({ path: `${PATH}/${encodeURIComponent(locationId)}`, method: "PUT", body: { productIds: input.productIds, }, }); } export async function deleteProductLocation(locationId: string): Promise { await api.requestJson({ path: `${PATH}/${encodeURIComponent(locationId)}`, method: "DELETE", }); }