Zpracování chyb z API
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { formatDate, getDayOfWeekIndex, getHumanDate, getHumanTime, getIsWeekend } from "./utils";
|
||||
import { InsufficientPermissions, formatDate, getDayOfWeekIndex, getHumanDate, getHumanTime, getIsWeekend } from "./utils";
|
||||
import { callNotifikace } from "./notifikace";
|
||||
import { generateQr } from "./qr";
|
||||
import { ClientData, PizzaDayState, UdalostEnum, Pizza, PizzaSize, Order, PizzaOrder, Locations, Restaurants, Food, Menu } from "../../types";
|
||||
import { ClientData, PizzaDayState, UdalostEnum, Pizza, PizzaSize, Order, PizzaOrder, Locations, Restaurants, Menu } from "../../types";
|
||||
import getStorage from "./storage";
|
||||
import { getMenuSladovnicka, getMenuTechTower, getMenuUMotliku } from "./restaurants";
|
||||
import { downloadPizzy } from "./chefie";
|
||||
@@ -345,14 +345,15 @@ export async function initIfNeeded(date?: Date) {
|
||||
* Odstraní kompletně volbu uživatele (včetně případných podřízených jídel).
|
||||
*
|
||||
* @param login login uživatele
|
||||
* @param trusted příznak, zda se jedná o ověřeného uživatele
|
||||
* @param location vybrané "umístění"
|
||||
* @param date datum, ke kterému se volba vztahuje
|
||||
* @returns
|
||||
*/
|
||||
export async function removeChoices(login: string, location: Locations, date?: Date) {
|
||||
export async function removeChoices(login: string, trusted: boolean, location: Locations, date?: Date) {
|
||||
const selectedDay = formatDate(date ?? getToday());
|
||||
let data: ClientData = await storage.getData(selectedDay);
|
||||
// TODO zajistit, že neověřený uživatel se stejným loginem nemůže mazat volby ověřeného
|
||||
validateTrusted(data, login, trusted);
|
||||
if (location in data.choices) {
|
||||
if (login in data.choices[location]) {
|
||||
delete data.choices[location][login]
|
||||
@@ -370,15 +371,16 @@ export async function removeChoices(login: string, location: Locations, date?: D
|
||||
* Neodstraňuje volbu samotnou, k tomu slouží {@link removeChoices}.
|
||||
*
|
||||
* @param login login uživatele
|
||||
* @param trusted příznak, zda se jedná o ověřeného uživatele
|
||||
* @param location vybrané "umístění"
|
||||
* @param foodIndex index jídla v jídelním lístku daného umístění, pokud existuje
|
||||
* @param date datum, ke kterému se volba vztahuje
|
||||
* @returns
|
||||
*/
|
||||
export async function removeChoice(login: string, location: Locations, foodIndex: number, date?: Date) {
|
||||
export async function removeChoice(login: string, trusted: boolean, location: Locations, foodIndex: number, date?: Date) {
|
||||
const selectedDay = formatDate(date ?? getToday());
|
||||
let data: ClientData = await storage.getData(selectedDay);
|
||||
// TODO řešit ověření uživatele
|
||||
validateTrusted(data, login, trusted);
|
||||
if (location in data.choices) {
|
||||
if (login in data.choices[location]) {
|
||||
const index = data.choices[location][login].options.indexOf(foodIndex);
|
||||
@@ -411,20 +413,13 @@ async function removeChoiceIfPresent(login: string, date: string) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Přidá volbu uživatele.
|
||||
* Ověří, zda se neověřený uživatel nepokouší přepsat údaje ověřeného a případně vyhodí chybu.
|
||||
*
|
||||
* @param login login uživatele
|
||||
* @param location vybrané "umístění"
|
||||
* @param foodIndex volitelný index jídla v daném umístění
|
||||
* @param data aktuální klientská data
|
||||
* @param login přihlašovací jméno uživatele
|
||||
* @param trusted příznak, zda se jedná o ověřeného uživatele
|
||||
* @param date datum, ke kterému se volba vztahuje
|
||||
* @returns aktuální data
|
||||
*/
|
||||
export async function addChoice(login: string, trusted: boolean, location: Locations, foodIndex?: number, date?: Date) {
|
||||
await initIfNeeded();
|
||||
const selectedDate = formatDate(date ?? getToday());
|
||||
let data: ClientData = await storage.getData(selectedDate);
|
||||
// Ověření, že se neověřený užívatel nepokouší přepsat údaje ověřeného
|
||||
function validateTrusted(data: ClientData, login: string, trusted: boolean) {
|
||||
const locations = Object.values(data?.choices);
|
||||
let found = false;
|
||||
if (!trusted) {
|
||||
@@ -435,8 +430,26 @@ export async function addChoice(login: string, trusted: boolean, location: Locat
|
||||
}
|
||||
}
|
||||
if (!trusted && found) {
|
||||
throw Error("Nelze změnit volbu ověřeného uživatele");
|
||||
throw new InsufficientPermissions("Nelze změnit volbu ověřeného uživatele");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Přidá volbu uživatele.
|
||||
*
|
||||
* @param login login uživatele
|
||||
* @param trusted příznak, zda se jedná o ověřeného 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
|
||||
* @param date datum, ke kterému se volba vztahuje
|
||||
* @returns aktuální data
|
||||
*/
|
||||
export async function addChoice(login: string, trusted: boolean, location: Locations, foodIndex?: number, date?: Date) {
|
||||
await initIfNeeded();
|
||||
const selectedDate = formatDate(date ?? getToday());
|
||||
let data: ClientData = await storage.getData(selectedDate);
|
||||
validateTrusted(data, login, trusted);
|
||||
// Pokud měníme pouze lokaci, mažeme případné předchozí
|
||||
if (foodIndex == null) {
|
||||
data = await removeChoiceIfPresent(login, selectedDate);
|
||||
|
||||
Reference in New Issue
Block a user