/ src / api / residences.ts
residences.ts
 1  import type * as definitions from "~/definitions";
 2  import { deserialize } from "desero";
 3  import { HttpRequest, send } from "schwi";
 4  import { BASE_URL } from "~/core/constants";
 5  import { Residence } from "~/models";
 6  
 7  /**
 8   * Get all {@link Residence|residences} for a given identifier.
 9   *
10   * @param identifier - Where we should look for residences.
11   * @returns A list of all {@link Residence|residences} for a given identifier.
12   *
13   * @example
14   * const residences = await getResidencesFrom("bordeaux");
15   *
16   * for (const home of residences) {
17   *   console.log(`[${home.area}]: ${home.title}`);
18   * }
19   *
20   * @example
21   * const feeds = await getFeeds();
22   * const residences = await getResidencesFrom(feeds[0].identifier);
23   * // ...
24   */
25  export async function getResidencesFrom(identifier: string): Promise<Array<Residence>> {
26    const request = new HttpRequest.Builder(BASE_URL + `${identifier}/${identifier}-logement.xml`).build();
27    const response = await send(request);
28  
29    const xml = await response.toXML<{
30      root: {
31        residence: Array<definitions.residence>;
32      };
33    }>();
34  
35    return xml.root.residence.map((residence) => deserialize(Residence, residence));
36  };