feat: Základ generování QR kódů
This commit is contained in:
@@ -13,6 +13,8 @@ import foodRoutes, { refreshMetoda } from "./routes/foodRoutes";
|
||||
import votingRoutes from "./routes/votingRoutes";
|
||||
import easterEggRoutes from "./routes/easterEggRoutes";
|
||||
import statsRoutes from "./routes/statsRoutes";
|
||||
import debugRoutes from "./routes/debugRoutes";
|
||||
import qrRoutes from "./routes/qrRoutes";
|
||||
|
||||
const ENVIRONMENT = process.env.NODE_ENV ?? 'production';
|
||||
dotenv.config({ path: path.resolve(__dirname, `../.env.${ENVIRONMENT}`) });
|
||||
@@ -99,6 +101,8 @@ app.get("/api/qr", (req, res) => {
|
||||
// Přeskočení auth pro refresh dat xd
|
||||
app.use("/api/food/refresh", refreshMetoda);
|
||||
|
||||
app.use("/api/debug", debugRoutes);
|
||||
|
||||
/** Middleware ověřující JWT token */
|
||||
app.use("/api/", (req, res, next) => {
|
||||
if (HTTP_REMOTE_USER_ENABLED) {
|
||||
@@ -143,6 +147,7 @@ app.use("/api/food", foodRoutes);
|
||||
app.use("/api/voting", votingRoutes);
|
||||
app.use("/api/easterEggs", easterEggRoutes);
|
||||
app.use("/api/stats", statsRoutes);
|
||||
app.use("/api/qr", qrRoutes);
|
||||
|
||||
app.use('/stats', express.static('public'));
|
||||
app.use(express.static('public'));
|
||||
|
||||
@@ -517,6 +517,24 @@ const MOCK_DATA = {
|
||||
name: "Pečené vepřové koleno, křen, hořčice, chléb",
|
||||
price: "320\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Slovácké strapačky s uzenou slaninou, zelím, mletým pepřem & sekanou petrželkou",
|
||||
price: "140\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Hovězí guláš s vejcem, zeleninovou garniturkou & žemlovými knedlíky",
|
||||
price: "145\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Kuřecí roláda s kaštanovou nádivkou, demi-glace & smetanovou bramborovou kaší",
|
||||
price: "150\xA0Kč",
|
||||
isSoup: false,
|
||||
}
|
||||
],
|
||||
[
|
||||
@@ -531,6 +549,24 @@ const MOCK_DATA = {
|
||||
name: "Poutine (trhané vepřové, hranolky, sýr, čalamáda, pikantní omáčka)",
|
||||
price: "190\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Slovácké strapačky s uzenou slaninou, zelím, mletým pepřem & sekanou petrželkou",
|
||||
price: "140\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Hovězí guláš s vejcem, zeleninovou garniturkou & žemlovými knedlíky",
|
||||
price: "145\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Kuřecí roláda s kaštanovou nádivkou, demi-glace & smetanovou bramborovou kaší",
|
||||
price: "150\xA0Kč",
|
||||
isSoup: false,
|
||||
}
|
||||
],
|
||||
[
|
||||
@@ -545,6 +581,24 @@ const MOCK_DATA = {
|
||||
name: "Vepřový řízek z kotlety, domácí bramborový salát",
|
||||
price: "170\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Slovácké strapačky s uzenou slaninou, zelím, mletým pepřem & sekanou petrželkou",
|
||||
price: "140\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Hovězí guláš s vejcem, zeleninovou garniturkou & žemlovými knedlíky",
|
||||
price: "145\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Kuřecí roláda s kaštanovou nádivkou, demi-glace & smetanovou bramborovou kaší",
|
||||
price: "150\xA0Kč",
|
||||
isSoup: false,
|
||||
}
|
||||
],
|
||||
[
|
||||
@@ -559,6 +613,24 @@ const MOCK_DATA = {
|
||||
name: "Burger z Chuck rollu, hranolky, tatarská omáčka",
|
||||
price: "200\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Slovácké strapačky s uzenou slaninou, zelím, mletým pepřem & sekanou petrželkou",
|
||||
price: "140\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Hovězí guláš s vejcem, zeleninovou garniturkou & žemlovými knedlíky",
|
||||
price: "145\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Kuřecí roláda s kaštanovou nádivkou, demi-glace & smetanovou bramborovou kaší",
|
||||
price: "150\xA0Kč",
|
||||
isSoup: false,
|
||||
}
|
||||
],
|
||||
],
|
||||
@@ -601,6 +673,18 @@ const MOCK_DATA = {
|
||||
name: "Hovězí po Burgundsku, bramborová kaše",
|
||||
price: "155\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Špagety s kuřecím masem, špenátem a smetanou",
|
||||
price: "145\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Medailonky z vepřové panenky s fazolkami se slaninou, šťouchané brambory",
|
||||
price: "185\xA0Kč",
|
||||
isSoup: false,
|
||||
}
|
||||
],
|
||||
[
|
||||
@@ -615,6 +699,18 @@ const MOCK_DATA = {
|
||||
name: "Kuřecí plátky na sušených rajčatech, bylinkách a česneku, bramborová kaše",
|
||||
price: "155\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Špagety s kuřecím masem, špenátem a smetanou",
|
||||
price: "145\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Medailonky z vepřové panenky s fazolkami se slaninou, šťouchané brambory",
|
||||
price: "185\xA0Kč",
|
||||
isSoup: false,
|
||||
}
|
||||
],
|
||||
[
|
||||
@@ -629,6 +725,18 @@ const MOCK_DATA = {
|
||||
name: "Rajská s plněnou paprikou, knedlík",
|
||||
price: "170\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Špagety s kuřecím masem, špenátem a smetanou",
|
||||
price: "145\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Medailonky z vepřové panenky s fazolkami se slaninou, šťouchané brambory",
|
||||
price: "185\xA0Kč",
|
||||
isSoup: false,
|
||||
}
|
||||
],
|
||||
[
|
||||
@@ -643,6 +751,18 @@ const MOCK_DATA = {
|
||||
name: "Ragú z trhané kachny, onsen vejce, soté ze špenátu a ředkvičky, bramborové pyré, lanýžová sůl, zelený olej",
|
||||
price: "189\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Špagety s kuřecím masem, špenátem a smetanou",
|
||||
price: "145\xA0Kč",
|
||||
isSoup: false,
|
||||
},
|
||||
{
|
||||
amount: "-",
|
||||
name: "Medailonky z vepřové panenky s fazolkami se slaninou, šťouchané brambory",
|
||||
price: "185\xA0Kč",
|
||||
isSoup: false,
|
||||
}
|
||||
],
|
||||
],
|
||||
@@ -1402,7 +1522,7 @@ const MOCK_PIZZA_LIST = [
|
||||
* Funkce vrací mock datu ve formátu YYYY-MM-DD
|
||||
*/
|
||||
export const getTodayMock = (): Date => {
|
||||
return new Date('2025-01-10'); // pátek
|
||||
return new Date('2025-01-08'); // středa
|
||||
}
|
||||
|
||||
export const getMenuSladovnickaMock = () => {
|
||||
|
||||
45
server/src/routes/debugRoutes.ts
Normal file
45
server/src/routes/debugRoutes.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import express, { Request } from "express";
|
||||
import { addChoice, getData, removeChoices } from "../service";
|
||||
import { ClientData, LunchChoice } from "../../../types";
|
||||
|
||||
const NAMES = ["alice", "bob", "carol", "dave", "eve", "frank", "grace", "heidi", "ivan", "judy"];
|
||||
const DATES = ["2025-01-06", "2025-01-07", "2025-01-08", "2025-01-09", "2025-01-10"];
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
router.get("/createUsers", async (req: Request<{}, any, any>, res) => {
|
||||
for (const element of NAMES) {
|
||||
for (const dateStr of DATES) {
|
||||
// Se šancí 50 % přidat pro tohoto uživatele tento den náhodnou volbu
|
||||
if (Math.random() > 0.5) {
|
||||
const foodIndex = Math.floor(Math.random() * 3); // Předpokládáme, že jsou 3 možnosti jídla
|
||||
const date = new Date(dateStr);
|
||||
// Náhodná volba z LunchChoice
|
||||
const lunchChoices = [
|
||||
"SLADOVNICKA",
|
||||
"TECHTOWER",
|
||||
"ZASTAVKAUMICHALA",
|
||||
"SENKSERIKOVA",
|
||||
];
|
||||
const randomLunchChoice = lunchChoices[Math.floor(Math.random() * lunchChoices.length)];
|
||||
await addChoice(element, true, randomLunchChoice as LunchChoice, foodIndex, date);
|
||||
}
|
||||
}
|
||||
}
|
||||
res.status(200).json({});
|
||||
});
|
||||
|
||||
router.get("/clearUsers", async (req: Request<{}, any, any>, res) => {
|
||||
for (const dateStr of DATES) {
|
||||
const date = new Date(dateStr);
|
||||
const data: ClientData = await getData(date);
|
||||
for (const user of NAMES) {
|
||||
for (const locationKey in data.choices) {
|
||||
await removeChoices(user, true, locationKey as keyof ClientData["choices"], date);
|
||||
}
|
||||
}
|
||||
}
|
||||
res.status(200).json({});
|
||||
});
|
||||
|
||||
export default router;
|
||||
15
server/src/routes/qrRoutes.ts
Normal file
15
server/src/routes/qrRoutes.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import express, { Request, Response } from "express";
|
||||
import { getLogin } from "../auth";
|
||||
import { parseToken } from "../utils";
|
||||
import { GenerateQrData } from "../../../types";
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
router.post("/generate", async (req: Request<{}, any, GenerateQrData["body"]>, res: Response<any>) => {
|
||||
getLogin(parseToken(req));
|
||||
console.log("Bank account for QR codes:", req.body.bankAccount);
|
||||
console.log("Bank account holder for QR codes:", req.body.bankAccountHolder);
|
||||
console.log("Requested QR codes for users:", req.body.qrCodes);
|
||||
});
|
||||
|
||||
export default router;
|
||||
Reference in New Issue
Block a user