feat: předělání historie a profilu

This commit is contained in:
Ondřej Anděl committed 2026-10-07 14:48:21 +02:00
1 parent 9e72f431a1
commit 8fa7f601f2
97 files changed
+7502 -1034

No files matched your search

+7 -2
View File
@@ -1,7 +1,7 @@
import ExcelJS from 'exceljs';
import { randomUUID } from 'crypto';
import { ImportMode, ImportResult, MealEntry, MealType } from "../../types/gen/types.gen";
import { addEntries, findMealsForDays, isMealType } from "./meals";
import { addEntries, createNutritionFiller, findAllMeals, findMealsForDays, isMealType } from "./meals";
import { BadRequestError, isValidIsoDate } from "./utils";
/** Označení zdroje, kterým se importované záznamy značí. */
@@ -376,6 +376,10 @@ const isImportMode = (value: unknown): value is ImportMode =>
* dřívější import dotčených dnů odebere a založí ho znovu — hodí se, když se
* v Luncheru něco opravilo. Ručně zadaná jídla zůstávají v obou režimech.
*
* Luncher kalorie nezná, takže se importovaným jídlům doplní energie a živiny
* z historie — z posledního jídla stejného názvu, které je má (viz
* `createNutritionFiller`).
*
* Náhled vrací všechny řádky, které jde založit, a k nim jídla, která už
* v dotčených dnech jsou. Uživatel si v něm odškrtne, co nechce, a ostrý
* import pak dostane jen vybrané klíče.
@@ -423,6 +427,7 @@ export async function importLuncherExport(
const dates = Array.from(new Set(parsed.rows.map(row => row.date)));
const existing = await findMealsForDays(login, dates);
const fillNutrition = createNutritionFiller(await findAllMeals(login));
// Při nahrazení se dřívější import založí znovu, duplicitou tedy není
const existingKeys = new Set(replace
? []
@@ -439,7 +444,7 @@ export async function importLuncherExport(
skipped++;
continue;
}
candidates.push(toMealEntry(row, mealType, importKey));
candidates.push(fillNutrition(toMealEntry(row, mealType, importKey)));
}
const selectedKeyList = selectedKeys == null ? undefined : new Set(selectedKeys.map(String));