import { ApiError, createApiClient } from "../lib/apiClient"; import type { LocationSupportCreateInput, LocationSupportDto, LocationSupportUpdateInput, } from "../types/locationSupport"; const api = createApiClient({ getToken: () => { try { return localStorage.getItem("access_token") ?? localStorage.getItem("token") ?? null; } catch { return null; } }, }); function normalizeSupportGetPayload(raw: unknown): LocationSupportDto | null { if (raw == null) return null; if (typeof raw !== "object") return null; const o = raw as Record; const id = o.id != null ? String(o.id).trim() : ""; const supportPhone = String(o.supportPhone ?? "").trim(); const supportEmail = String(o.supportEmail ?? "").trim(); if (!id && !supportPhone && !supportEmail) return null; return { id, locationId: o.locationId != null ? String(o.locationId) : null, locationName: o.locationName != null ? String(o.locationName) : null, supportPhone, supportEmail, }; } export async function getLocationSupportByLocationId( locationId: string, signal?: AbortSignal, ): Promise { const id = (locationId ?? "").trim(); if (!id) return null; return api.requestJson({ path: "/location-support/by-location-id", method: "GET", query: { locationId: id }, signal, }); } function normalizeFirstSupportRecord(raw: unknown): LocationSupportDto | null { if (!raw) return null; if (Array.isArray(raw)) { const first = raw[0] as LocationSupportDto | undefined; return first ?? null; } if (typeof raw === "object") { const o = raw as Record; if (Array.isArray(o.items)) { const first = o.items[0] as LocationSupportDto | undefined; return first ?? null; } if ("supportPhone" in o || "supportEmail" in o) { return o as LocationSupportDto; } } return null; } /** 兼容旧分页列表拉首条(若后端仍提供列表接口) */ export async function getGlobalLocationSupportFromList(signal?: AbortSignal): Promise { const raw = await api.requestJson({ path: "/location-support", method: "GET", query: { SkipCount: 1, MaxResultCount: 1, }, signal, }); return normalizeFirstSupportRecord(raw); } /** * 接口 6:全局 Support(GET `/api/app/location-support/support`) * 若路由未部署(404),回退到列表首条。 */ export async function getGlobalLocationSupport(signal?: AbortSignal): Promise { try { const raw = await api.requestJson({ path: "/location-support/support", method: "GET", signal, }); return normalizeSupportGetPayload(raw); } catch (e) { if (e instanceof ApiError && e.status === 404) { try { return await getGlobalLocationSupportFromList(signal); } catch (e2) { if (e2 instanceof ApiError && e2.status === 404) return null; throw e2; } } throw e; } } export async function createLocationSupport(input: LocationSupportCreateInput): Promise { const saved = await api.requestJson({ path: "/location-support", method: "POST", body: { supportPhone: input.supportPhone, supportEmail: input.supportEmail, }, }); const normalized = normalizeSupportGetPayload(saved); if (normalized) return normalized; return saved as LocationSupportDto; } export async function updateLocationSupport( id: string, input: LocationSupportUpdateInput, ): Promise { const saved = await api.requestJson({ path: `/location-support/${encodeURIComponent(id)}`, method: "PUT", body: { supportPhone: input.supportPhone, supportEmail: input.supportEmail, }, }); const normalized = normalizeSupportGetPayload(saved); if (normalized) return normalized; return saved as LocationSupportDto; }