location.ts 1.76 KB
import type {
  AccountLocationDto,
  LocationGetListQuery,
  LocationUpsertInput,
} from './account-types';
import type { FlPagedResult } from './types';

import { requestClient } from '#/api/request';

const PATH = '/location';

function trimOrNullHours(v: string | null | undefined): string | null {
  const t = (v ?? '').trim();
  return t || null;
}

function buildLocationBody(input: LocationUpsertInput) {
  return {
    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,
    operatingHours: trimOrNullHours(input.operatingHours ?? undefined),
  };
}

export function locationCrudList(params?: LocationGetListQuery) {
  return requestClient.get<FlPagedResult<AccountLocationDto>>(PATH, {
    params,
    errorMessageMode: 'message',
  });
}

export function locationCrudInfo(id: string) {
  return requestClient.get<AccountLocationDto>(
    `${PATH}/${encodeURIComponent(id)}`,
    { errorMessageMode: 'message' },
  );
}

export function locationCrudAdd(data: LocationUpsertInput) {
  return requestClient.postWithMsg<AccountLocationDto>(
    PATH,
    buildLocationBody(data),
  );
}

export function locationCrudUpdate(id: string, data: LocationUpsertInput) {
  return requestClient.putWithMsg<AccountLocationDto>(
    `${PATH}/${encodeURIComponent(id)}`,
    buildLocationBody(data),
  );
}

export function locationCrudRemove(id: string) {
  return requestClient.deleteWithMsg<void>(
    `${PATH}/${encodeURIComponent(id)}`,
  );
}