diff --git a/server/src/service.ts b/server/src/service.ts index 244c9e5..f201446 100644 --- a/server/src/service.ts +++ b/server/src/service.ts @@ -268,14 +268,19 @@ export async function removeChoice(login: string, trusted: boolean, locationKey: } /** - * Odstraní kompletně volbu uživatele. + * Odstraní kompletně volbu uživatele, vyjma ignoredLocationKey (pokud byla předána a existuje). * * @param login login uživatele + * @param date datum, ke kterému se volby vztahují + * @param ignoredLocationKey volba, která nebude odstraněna, pokud existuje */ -async function removeChoiceIfPresent(login: string, date: string) { +async function removeChoiceIfPresent(login: string, date: string, ignoredLocationKey?: LocationKey) { let data: DayData = await storage.getData(date); for (const key of Object.keys(data.choices)) { const locationKey = key as LocationKey; + if (ignoredLocationKey != null && ignoredLocationKey == locationKey) { + continue; + } if (data.choices[locationKey] && login in data.choices[locationKey]) { delete data.choices[locationKey][login]; if (Object.keys(data.choices[locationKey]).length === 0) { @@ -329,6 +334,9 @@ export async function addChoice(login: string, trusted: boolean, locationKey: Lo // Pokud měníme pouze lokaci, mažeme případné předchozí if (foodIndex == null) { data = await removeChoiceIfPresent(login, selectedDate); + } else { + // Mažeme případné ostatní volby (měla by být maximálně jedna) + removeChoiceIfPresent(login, selectedDate, locationKey); } // TODO vytáhnout inicializaci "prázdné struktury" do vlastní funkce if (!(data.choices[locationKey])) {