Základ zobrazování ověřených uživatelů

This commit is contained in:
2023-07-30 23:36:18 +02:00
parent 028186c8ea
commit 8a75c98c9a
6 changed files with 79 additions and 22 deletions

View File

@@ -249,6 +249,7 @@ export function initIfNeeded() {
export function removeChoices(login: string, location: Locations) {
const today = formatDate(getToday());
let data: ClientData = db.get(today);
// TODO zajistit, že neověřený uživatel se stejným loginem nemůže mazat volby ověřeného
if (location in data.choices) {
if (login in data.choices[location]) {
delete data.choices[location][login]
@@ -273,11 +274,12 @@ export function removeChoices(login: string, location: Locations) {
export function removeChoice(login: string, location: Locations, foodIndex: number) {
const today = formatDate(getToday());
let data: ClientData = db.get(today);
// TODO řešit ověření uživatele
if (location in data.choices) {
if (login in data.choices[location]) {
const index = data.choices[location][login].indexOf(foodIndex);
const index = data.choices[location][login].options.indexOf(foodIndex);
if (index > -1) {
data.choices[location][login].splice(index, 1)
data.choices[location][login].options.splice(index, 1)
db.set(today, data);
}
}
@@ -309,24 +311,41 @@ function removeChoiceIfPresent(login: string) {
* @param login login uživatele
* @param location vybrané "umístění"
* @param foodIndex volitelný index jídla v daném umístění
* @param trusted příznak, zda se jedná o ověřeného uživatele
* @returns aktuální data
*/
export function addChoice(login: string, location: Locations, foodIndex?: number) {
export function addChoice(login: string, trusted: boolean, location: Locations, foodIndex?: number) {
initIfNeeded();
const today = formatDate(getToday());
let data: ClientData = db.get(today);
// Ověření, že se neověřený užívatel nepokouší přepsat údaje ověřeného
const locations = Object.values(data?.choices);
let found = false;
if (!trusted) {
for (const location of locations) {
if (Object.keys(location).includes(login) && location[login].trusted) {
found = true;
}
}
}
if (!trusted && found) {
throw Error("Nelze změnit volbu ověřeného uživatele");
}
// Pokud měníme pouze lokaci, mažeme případné předchozí
if (foodIndex == null) {
removeChoiceIfPresent(login);
}
const today = formatDate(getToday());
let data: ClientData = db.get(today);
if (!(location in data.choices)) {
data.choices[location] = {};
}
if (!(login in data.choices[location])) {
data.choices[location][login] = [];
data.choices[location][login] = {
trusted,
options: []
};
}
if (foodIndex != null && !data.choices[location][login].includes(foodIndex)) {
data.choices[location][login].push(foodIndex);
if (foodIndex != null && !data.choices[location][login].options.includes(foodIndex)) {
data.choices[location][login].options.push(foodIndex);
}
db.set(today, data);
return data;