import { axios } from "@/api/index"; import { Edition } from "@/data/edition"; import { prepare } from "@/routing"; import { EditionDTO, editionDtoTransformer, EditionTeaserDTO, editionTeaserDtoTransformer, programEntryDtoTransformer } from "@/api/dto/edition"; import { Subset } from "@/helpers"; import { InternshipProgramEntry } from "@/data"; const EDITIONS_ENDPOINT = "/editions"; const EDITION_INFO_ENDPOINT = "/editions/:key"; const EDITION_CURRENT_ENDPOINT = "/editions/current"; const EDITION_REGISTER_ENDPOINT = "/register"; const EDITION_LOGIN_ENDPOINT = "/access/loginEdition"; export async function available() { try { const response = await axios.get(EDITIONS_ENDPOINT); return (response.data || []).map(editionTeaserDtoTransformer.transform); } catch (e) { return []; } } export async function join(key: string): Promise { try { await axios.post(EDITION_REGISTER_ENDPOINT, JSON.stringify(key), { headers: { "Content-Type": "application/json" } }); return true; } catch (error) { console.error(error); return false; } } export async function get(key: string): Promise | null> { if (!key) { return null; } const response = await axios.get(prepare(EDITION_INFO_ENDPOINT, { key })); const dto = response.data; return editionTeaserDtoTransformer.transform(dto); } export async function current(): Promise<{ edition: Edition, program: InternshipProgramEntry[], }> { const response = await axios.get(EDITION_CURRENT_ENDPOINT); const dto = response.data; return { edition: editionDtoTransformer.transform(dto), program: dto.availableSubjects.map(programEntryDtoTransformer.transform as any), }; } export async function login(key: string): Promise { const response = await axios.post(EDITION_LOGIN_ENDPOINT, JSON.stringify(key), { headers: { "Content-Type": "application/json" } }) return response.data; }