locationService.ts 3.19 KB
import { createApiClient } from "../lib/apiClient";
import type {
  LocationCreateInput,
  LocationDto,
  LocationGetListInput,
  LocationUpdateInput,
  PagedResultDto,
} from "../types/location";

const api = createApiClient({
  // 如果项目后续接入登录,可在这里加 token 获取逻辑
  getToken: () => {
    try {
      return localStorage.getItem("access_token") ?? localStorage.getItem("token") ?? null;
    } catch {
      return null;
    }
  },
});

/**
 * ABP Conventional Controller 默认路由通常为:
 * - GET /api/app/location
 * - POST /api/app/location
 * 这里按该约定实现;如果后端实际路由不同,以 Swagger 为准调整 path。
 */
export async function getLocations(input: LocationGetListInput, signal?: AbortSignal): Promise<PagedResultDto<LocationDto>> {
  // 先按 ABP 常见 GET + query 调用;若后端只支持 POST,会在页面侧提示错误(便于联调时调整)。
  return api.requestJson<PagedResultDto<LocationDto>>({
    path: "/location",
    method: "GET",
    query: {
      SkipCount: input.skipCount,
      MaxResultCount: input.maxResultCount,
      Sorting: input.sorting,
      Keyword: input.keyword,
      Partner: input.partner,
      GroupName: input.groupName,
      State: input.state,
    },
    signal,
  });
}

export async function createLocation(input: LocationCreateInput): Promise<LocationDto> {
  return api.requestJson<LocationDto>({
    path: "/location",
    method: "POST",
    body: {
      // Swagger 示例为 camelCase(ABP 默认 JSON 命名策略)
      partner: input.partner,
      groupName: input.groupName,
      locationCode: input.locationCode,
      locationName: input.locationName,
      street: input.street,
      city: input.city,
      stateCode: input.stateCode,
      country: input.country,
      zipCode: input.zipCode,
      phone: input.phone,
      email: input.email,
      latitude: input.latitude,
      longitude: input.longitude,
      state: input.state ?? true,
    },
  });
}

/**
 * ABP Conventional Controller 的 UpdateAsync 常见路由为:
 * - PUT /api/app/location/{id}
 * 以 Swagger 为准;若后端使用其它形式(如 /location?id=xxx),在此调整即可。
 */
export async function updateLocation(id: string, input: LocationUpdateInput): Promise<LocationDto> {
  return api.requestJson<LocationDto>({
    path: `/location/${encodeURIComponent(id)}`,
    method: "PUT",
    body: {
      partner: input.partner,
      groupName: input.groupName,
      locationCode: input.locationCode,
      locationName: input.locationName,
      street: input.street,
      city: input.city,
      stateCode: input.stateCode,
      country: input.country,
      zipCode: input.zipCode,
      phone: input.phone,
      email: input.email,
      latitude: input.latitude,
      longitude: input.longitude,
      state: input.state ?? true,
    },
  });
}

/**
 * ABP Conventional Controller 的 DeleteAsync 常见路由为:
 * - DELETE /api/app/location/{id}
 * 以 Swagger 为准;若后端路由不同,在此调整 path。
 */
export async function deleteLocation(id: string): Promise<void> {
  await api.requestJson<unknown>({
    path: `/location/${encodeURIComponent(id)}`,
    method: "DELETE",
  });
}