Přenos změn

This commit is contained in:
2023-06-20 08:52:05 +02:00
parent 47fbe4173d
commit e8d7e3fd9e
6 changed files with 165 additions and 42 deletions

View File

@@ -3,7 +3,7 @@ import { Server } from "socket.io";
import bodyParser from "body-parser";
import { fetchPizzy } from "./chefie";
import cors from 'cors';
import { addPizzaOrder, createPizzaDay, deletePizzaDay, finishPizzaDelivery, finishPizzaOrder, getData, lockPizzaDay, removePizzaOrder, unlockPizzaDay, updateChoice, updateNote } from "./service";
import { addPizzaOrder, createPizzaDay, deletePizzaDay, finishPizzaDelivery, finishPizzaOrder, getData, lockPizzaDay, removePizzaOrder, unlockPizzaDay, updateChoice, updateFoodChoice, updateNote } from "./service";
import dotenv from 'dotenv';
import path from 'path';
import { getMenuSladovnicka, getMenuTechTower, getMenuUMotliku } from "./restaurants";
@@ -179,6 +179,18 @@ app.post("/api/updateNote", (req, res) => {
res.status(200).json(data);
});
app.post("/api/updateFoodChoice", (req, res) => {
if (!req.body.login) {
throw Error("Nebyl předán login");
}
if (!req.body.choice) {
throw Error("Nebyla předána vybraná restaurace");
}
const data = updateFoodChoice(req.body.login, req.body.choice, req.body.food);
io.emit("message", data);
res.status(200).json(data);
});
io.on("connection", (socket) => {
console.log(`New client connected: ${socket.id}`);

View File

@@ -240,11 +240,13 @@ export function initIfNeeded() {
export function removeChoice(login: string, data: ClientData) {
for (let key of Object.keys(data.choices)) {
if (data.choices[key] && data.choices[key].includes(login)) {
const index = data.choices[key].indexOf(login);
data.choices[key].splice(index, 1);
if (data.choices[key].length == 0) {
delete data.choices[key];
if (data.choices[key]) {
const index = data.choices[key].findIndex(choice => choice.login === login);
if (index >= 0) {
data.choices[key].splice(index, 1);
if (data.choices[key].length == 0) {
delete data.choices[key];
}
}
}
}
@@ -256,11 +258,11 @@ export function updateChoice(login: string, choice: Locations | null) {
const today = formatDate(getToday());
let data: ClientData = db.get(today);
data = removeChoice(login, data);
if (choice !== null) {
if (choice) {
if (!data.choices?.[choice]) {
data.choices[choice] = [];
}
data.choices[choice].push(login);
data.choices[choice].push({ login });
}
db.set(today, data);
return data;
@@ -282,4 +284,24 @@ export function updateNote(login: string, note?: string) {
myOrder.note = note;
db.set(today, clientData);
return clientData;
}
export function updateFoodChoice(login: string, location: Locations, foodName?: string) {
const today = formatDate(getToday());
let clientData: ClientData = db.get(today);
// TODO smazat
console.log("Location", location);
console.log("Choices", clientData.choices);
const myChoice = clientData.choices[location].find(o => o.login === login);
if (!myChoice) {
throw Error("V datech nebyla nalezena volba pro uživatele " + login);
}
if (foodName) {
myChoice.foodName = foodName;
} else {
delete myChoice.foodName;
}
db.set(today, clientData);
return clientData;
}

View File

@@ -1,7 +1,13 @@
import exp from "constants";
/** Výběr jídla z restaurace jednoho uživatele. */
export interface FoodChoice {
login: string, // jméno uživatele
foodName?: string, // název vybraného jídla
}
export interface Choices {
[location: string]: string[],
[location: string]: FoodChoice[],
}
/** Velikost konkrétní pizzy */
@@ -77,13 +83,13 @@ export enum Restaurants {
}
export enum Locations {
SLADOVNICKA = 'Sladovnická',
UMOTLIKU = 'U Motlíků',
TECHTOWER = 'TechTower',
SPSE = 'SPŠE',
PIZZA = 'Pizza day',
OBJEDNAVAM = 'Budu objednávat',
NEOBEDVAM = 'Mám vlastní/neobědvám',
SLADOVNICKA = 'SLADOVNICKA',
UMOTLIKU = 'UMOTLIKU',
TECHTOWER = 'TECHTOWER',
SPSE = 'SPSE',
PIZZA = 'PIZZA',
OBJEDNAVAM = 'OBJEDNAVAM',
NEOBEDVAM = 'NEOBEDVAM',
}
export enum UdalostEnum {