th-app-auth.ts 2.54 KB
export interface ThAppBoundLocationDto {
  id: string;
  locationCode: string;
  locationName: string;
  fullAddress: string;
  state: boolean;
}

export interface ThAppLoginInput {
  tenantId: string;
  email: string;
  password: string;
  uuid?: string;
  code?: string;
}

export interface ThAppLoginOutputDto {
  token: string;
  refreshToken: string;
  tenantId: string;
  tenantName: string;
  locations: ThAppBoundLocationDto[];
}

function normalizeLocation(raw: Record<string, unknown>): ThAppBoundLocationDto {
  return {
    id: String(raw.id ?? raw.Id ?? ''),
    locationCode: String(raw.locationCode ?? raw.LocationCode ?? ''),
    locationName: String(raw.locationName ?? raw.LocationName ?? ''),
    fullAddress: String(raw.fullAddress ?? raw.FullAddress ?? ''),
    state: raw.state !== false && raw.State !== false,
  };
}

function normalizeAppLoginOutput(raw: unknown): ThAppLoginOutputDto {
  const o =
    raw && typeof raw === 'object' ? (raw as Record<string, unknown>) : {};
  const locs = o.locations ?? o.Locations;
  const arr = Array.isArray(locs) ? locs : [];
  return {
    token: String(o.token ?? o.Token ?? ''),
    refreshToken: String(o.refreshToken ?? o.RefreshToken ?? ''),
    tenantId: String(o.tenantId ?? o.TenantId ?? ''),
    tenantName: String(o.tenantName ?? o.TenantName ?? ''),
    locations: arr.map((x) => normalizeLocation(x as Record<string, unknown>)),
  };
}

function normalizeLocationList(raw: unknown): ThAppBoundLocationDto[] {
  const arr = Array.isArray(raw) ? raw : [];
  return arr.map((x) => normalizeLocation(x as Record<string, unknown>));
}

/** POST /api/app/th-app-auth/login */
export async function thAppLogin(
  input: ThAppLoginInput,
): Promise<ThAppLoginOutputDto> {
  const { requestClient } = await import('#/api/request');
  const raw = await requestClient.post<unknown>(
    'th-app-auth/login',
    {
      tenantId: input.tenantId,
      email: input.email.trim(),
      password: input.password,
      ...(input.uuid ? { uuid: input.uuid } : {}),
      ...(input.code != null && input.code !== '' ? { code: input.code } : {}),
    },
    {
      errorMessageMode: 'none',
      headers: {
        __tenant: input.tenantId,
      },
      successMessageMode: 'none',
    },
  );
  return normalizeAppLoginOutput(raw);
}

/** GET /api/app/th-app-auth/my-locations */
export async function thAppMyLocations(): Promise<ThAppBoundLocationDto[]> {
  const { requestClient } = await import('#/api/request');
  const raw = await requestClient.get<unknown>('th-app-auth/my-locations');
  return normalizeLocationList(raw);
}