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 };