Serverová validace času odchodu
This commit is contained in:
parent
c286bd1778
commit
e4451e299a
@ -21,23 +21,6 @@ import Loader from './components/Loader';
|
|||||||
|
|
||||||
const EVENT_CONNECT = "connect"
|
const EVENT_CONNECT = "connect"
|
||||||
|
|
||||||
// TODO tohle má být kvůli bezpečnosti na serveru
|
|
||||||
const DEPARTURE_TIMES = [
|
|
||||||
"10:00",
|
|
||||||
"10:15",
|
|
||||||
"10:30",
|
|
||||||
"10:45",
|
|
||||||
"11:00",
|
|
||||||
"11:15",
|
|
||||||
"11:30",
|
|
||||||
"11:45",
|
|
||||||
"12:00",
|
|
||||||
"12:15",
|
|
||||||
"12:30",
|
|
||||||
"12:45",
|
|
||||||
"13:00",
|
|
||||||
]
|
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
const auth = useAuth();
|
const auth = useAuth();
|
||||||
const bank = useBank();
|
const bank = useBank();
|
||||||
@ -369,6 +352,7 @@ function App() {
|
|||||||
Poslední změny:
|
Poslední změny:
|
||||||
<ul>
|
<ul>
|
||||||
<li>Oprava generování QR kódů pro Pizza day</li>
|
<li>Oprava generování QR kódů pro Pizza day</li>
|
||||||
|
<li>Serverová validace času odchodu</li>
|
||||||
</ul>
|
</ul>
|
||||||
</Alert>
|
</Alert>
|
||||||
{dayIndex != null &&
|
{dayIndex != null &&
|
||||||
@ -413,7 +397,7 @@ function App() {
|
|||||||
<p style={{ marginTop: "10px" }}>V kolik hodin preferuješ odchod?</p>
|
<p style={{ marginTop: "10px" }}>V kolik hodin preferuješ odchod?</p>
|
||||||
<Form.Select ref={departureChoiceRef} onChange={handleChangeDepartureTime}>
|
<Form.Select ref={departureChoiceRef} onChange={handleChangeDepartureTime}>
|
||||||
<option></option>
|
<option></option>
|
||||||
{DEPARTURE_TIMES.map(time => <option key={time} value={time}>{time}</option>)}
|
{data.departureTimes.map(time => <option key={time} value={time}>{time}</option>)}
|
||||||
</Form.Select>
|
</Form.Select>
|
||||||
</>}
|
</>}
|
||||||
</>}
|
</>}
|
||||||
|
@ -293,7 +293,7 @@ app.post("/api/updatePizzaDayNote", async (req, res) => {
|
|||||||
res.status(200).json(data);
|
res.status(200).json(data);
|
||||||
});
|
});
|
||||||
|
|
||||||
app.post("/api/changeDepartureTime", async (req, res) => {
|
app.post("/api/changeDepartureTime", async (req, res, next) => {
|
||||||
const login = getLogin(parseToken(req));
|
const login = getLogin(parseToken(req));
|
||||||
let date = undefined;
|
let date = undefined;
|
||||||
if (req.body.dayIndex != null) {
|
if (req.body.dayIndex != null) {
|
||||||
@ -305,9 +305,11 @@ app.post("/api/changeDepartureTime", async (req, res) => {
|
|||||||
}
|
}
|
||||||
date = getDateForWeekIndex(dayIndex);
|
date = getDateForWeekIndex(dayIndex);
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
const data = await updateDepartureTime(login, req.body?.time, date);
|
const data = await updateDepartureTime(login, req.body?.time, date);
|
||||||
io.emit("message", data);
|
io.emit("message", data);
|
||||||
res.status(200).json(data);
|
res.status(200).json(data);
|
||||||
|
} catch (e: any) { next(e) }
|
||||||
});
|
});
|
||||||
|
|
||||||
// Middleware pro zpracování chyb
|
// Middleware pro zpracování chyb
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { InsufficientPermissions, formatDate, getDayOfWeekIndex, getHumanDate, getHumanTime, getIsWeekend } from "./utils";
|
import { InsufficientPermissions, formatDate, getDayOfWeekIndex, getHumanDate, getHumanTime, getIsWeekend } from "./utils";
|
||||||
import { ClientData, Locations, Restaurants, Menu } from "../../types";
|
import { ClientData, Locations, Restaurants, Menu, DepartureTime } from "../../types";
|
||||||
import getStorage from "./storage";
|
import getStorage from "./storage";
|
||||||
import { getMenuSladovnicka, getMenuTechTower, getMenuUMotliku } from "./restaurants";
|
import { getMenuSladovnicka, getMenuTechTower, getMenuUMotliku } from "./restaurants";
|
||||||
import { getTodayMock } from "./mock";
|
import { getTodayMock } from "./mock";
|
||||||
@ -29,7 +29,14 @@ export const getDateForWeekIndex = (index: number) => {
|
|||||||
/** Vrátí "prázdná" (implicitní) data pro předaný den. */
|
/** Vrátí "prázdná" (implicitní) data pro předaný den. */
|
||||||
function getEmptyData(date?: Date): ClientData {
|
function getEmptyData(date?: Date): ClientData {
|
||||||
const usedDate = date || getToday();
|
const usedDate = date || getToday();
|
||||||
return { date: getHumanDate(usedDate), isWeekend: getIsWeekend(usedDate), weekIndex: getDayOfWeekIndex(usedDate), todayWeekIndex: getDayOfWeekIndex(getToday()), choices: {} };
|
return {
|
||||||
|
date: getHumanDate(usedDate),
|
||||||
|
isWeekend: getIsWeekend(usedDate),
|
||||||
|
weekIndex: getDayOfWeekIndex(usedDate),
|
||||||
|
todayWeekIndex: getDayOfWeekIndex(getToday()),
|
||||||
|
choices: {},
|
||||||
|
departureTimes: Object.values(DepartureTime),
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -246,6 +253,9 @@ export async function updateDepartureTime(login: string, time?: string, date?: D
|
|||||||
if (!time?.length) {
|
if (!time?.length) {
|
||||||
delete found[login].departureTime;
|
delete found[login].departureTime;
|
||||||
} else {
|
} else {
|
||||||
|
if (!Object.values<string>(DepartureTime).includes(time)) {
|
||||||
|
throw Error(`Neplatný čas odchodu ${time}`);
|
||||||
|
}
|
||||||
found[login].departureTime = time;
|
found[login].departureTime = time;
|
||||||
}
|
}
|
||||||
await storage.setData(selectedDate, clientData);
|
await storage.setData(selectedDate, clientData);
|
||||||
|
@ -73,6 +73,7 @@ export interface ClientData {
|
|||||||
weekIndex: number, // index zvoleného dne v týdnu (0-6)
|
weekIndex: number, // index zvoleného dne v týdnu (0-6)
|
||||||
todayWeekIndex: number, // index dnešního dne v týdnu (0-6)
|
todayWeekIndex: number, // index dnešního dne v týdnu (0-6)
|
||||||
choices: Choices, // seznam voleb
|
choices: Choices, // seznam voleb
|
||||||
|
departureTimes: DepartureTime[], // seznam možných časů odchodu
|
||||||
menus?: { [restaurant in Restaurants]?: Menu }, // menu jednotlivých restaurací
|
menus?: { [restaurant in Restaurants]?: Menu }, // menu jednotlivých restaurací
|
||||||
pizzaDay?: PizzaDay, // pizza day pro dnešní den, pokud existuje
|
pizzaDay?: PizzaDay, // pizza day pro dnešní den, pokud existuje
|
||||||
pizzaList?: Pizza[], // seznam dostupných pizz pro dnešní den
|
pizzaList?: Pizza[], // seznam dostupných pizz pro dnešní den
|
||||||
@ -125,3 +126,20 @@ export interface GotifyServer {
|
|||||||
server: string;
|
server: string;
|
||||||
api_keys: string[];
|
api_keys: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Čas preferovaného odchodu na oběd. */
|
||||||
|
export enum DepartureTime {
|
||||||
|
T10_00 = "10:00",
|
||||||
|
T10_15 = "10:15",
|
||||||
|
T10_30 = "10:30",
|
||||||
|
T10_45 = "10:45",
|
||||||
|
T11_00 = "11:00",
|
||||||
|
T11_15 = "11:15",
|
||||||
|
T11_30 = "11:30",
|
||||||
|
T11_45 = "11:45",
|
||||||
|
T12_00 = "12:00",
|
||||||
|
T12_15 = "12:15",
|
||||||
|
T12_30 = "12:30",
|
||||||
|
T12_45 = "12:45",
|
||||||
|
T13_00 = "13:00",
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user