Compare commits
No commits in common. "4aadb346ee72be85727435aa4c699a435921290f" and "08febd4af237a0c44db6dedb83630afb6d088a77" have entirely different histories.
4aadb346ee
...
08febd4af2
47
README.md
47
README.md
@ -1,38 +1,12 @@
|
|||||||
# Luncher
|
# Luncher
|
||||||
Aplikace pro profesionální management obědů.
|
|
||||||
|
|
||||||
Aplikace sestává ze tří (čtyř) modulů.
|
Zatím to nemá dokumentaci.
|
||||||
- food_api
|
Server je v adresáři /server, client v adresáři /client obojí lze spustit pomocí:
|
||||||
- Python scraper/parser pro zpracování obědových menu restaurací
|
|
||||||
- server
|
|
||||||
- backend psaný v [node.js](https://nodejs.dev)
|
|
||||||
- client
|
|
||||||
- frontend psaný v [React.js](https://react.dev)
|
|
||||||
- [nginx](https://nginx.org)
|
|
||||||
- proxy pro snadné propojení Docker kontejnerů pod jednou URL
|
|
||||||
|
|
||||||
## Spuštění pro vývoj
|
### `yarn`
|
||||||
### Závislosti
|
### `yarn start`
|
||||||
#### Food API
|
|
||||||
- [Python 3](https://www.python.org)
|
|
||||||
- [pip](https://pypi.org/project/pip)
|
|
||||||
#### Klient/server
|
|
||||||
- [Node.js 18.x](https://nodejs.dev)
|
|
||||||
- [Yarn 1.22.x (Classic)](https://classic.yarnpkg.com)
|
|
||||||
|
|
||||||
### Spuštění na *nix platformách
|
V *nix prostředích lze po instalaci základních závislostí (python, pip, venv) použít `./run_dev.sh`
|
||||||
- Nainstalovat závislosti viz předchozí bod
|
|
||||||
- Zkopírovat `client/.env.template` do `client/.env.development` a upravit dle potřeby
|
|
||||||
- Zkopírovat `server/.env.template` do `server/.env.development` a upravit dle potřeby
|
|
||||||
- Spustit `./run_dev.sh`. Na jiných platformách se lze inspirovat jeho obsahem, postup by měl být víceméně stejný.
|
|
||||||
|
|
||||||
## Sestavení a spuštění produkční verze v Docker
|
|
||||||
### Závislosti
|
|
||||||
- [Docker](https://www.docker.com)
|
|
||||||
- [Docker Compose](https://docs.docker.com/compose)
|
|
||||||
|
|
||||||
### Spuštění
|
|
||||||
- `docker compose up --build -d`
|
|
||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
- [x] Umožnit smazání aktuální volby "popelnicí", místo nutnosti vybrat prázdnou položku v selectu
|
- [x] Umožnit smazání aktuální volby "popelnicí", místo nutnosti vybrat prázdnou položku v selectu
|
||||||
@ -41,23 +15,22 @@ Aplikace sestává ze tří (čtyř) modulů.
|
|||||||
- [x] Vyndat URL na Food API do .env
|
- [x] Vyndat URL na Food API do .env
|
||||||
- [x] Neselhat při nedostupnosti nebo chybě z Food API
|
- [x] Neselhat při nedostupnosti nebo chybě z Food API
|
||||||
- [x] Dokončit docker-compose pro kompletní funkčnost
|
- [x] Dokončit docker-compose pro kompletní funkčnost
|
||||||
- [x] Implementovat Pizza day
|
- [x] Implementovat základ pro pizza day
|
||||||
- [x] Umožnit uzamčení objednávek zakladatelem
|
- [x] Umožnit uzamčení objednávek zakladatelem
|
||||||
- [x] Možnost uložení čísla účtu
|
- [x] Možnost uložení čísla účtu
|
||||||
- [ ] Automatické generování a zobrazení QR kódů
|
- [ ] Automatické generování a zobrazení QR kódů
|
||||||
- [ ] https://qr-platba.cz/pro-vyvojare/restful-api/
|
- [ ] https://qr-platba.cz/pro-vyvojare/restful-api/
|
||||||
- [ ] Zobrazovat celkovou cenu objednávky pod tabulkou objednávek
|
- [ ] Zobrazovat celkovou cenu objednávky pod tabulkou objednávek
|
||||||
- [ ] Zobrazit upozornění před smazáním/zamknutím/odemknutím pizza day
|
- [ ] Zobrazit upozornění před smazáním/zamknutím/odemknutím pizza day
|
||||||
- [ ] Umožnit přidat k objednávce poznámku (např. "bez oliv")
|
|
||||||
- [ ] Předvyplnění poslední vybrané hodnoty občas nefunguje, viz komentář
|
- [ ] Předvyplnění poslední vybrané hodnoty občas nefunguje, viz komentář
|
||||||
- [ ] Nasazení nové verze v Docker smaže veškerá data (protože data.json není venku)
|
- [ ] Nasazení nové verze v Docker smaže veškerá data (protože data.json není venku)
|
||||||
- [ ] Vylepšit dokumentaci projektu
|
- [ ] Vylepšit dokumentaci projektu
|
||||||
- [ ] Popsat Food API, nginx
|
- [ ] Popsat Food API, nginx
|
||||||
- [x] Popsat závislosti, co je nutné provést před vývojem a postup spuštění pro vývoj
|
- [ ] Popsat závislosti, co je nutné provést před vývojem a postup spuštění pro vývoj
|
||||||
- [x] Popsat dostupné env
|
- [ ] Popsat dostupné env
|
||||||
- [ ] Pizzy se samy budou při naklikání přidávat do košíku
|
- [ ] Pizzy se samy budou při naklikání přidávat do košíku
|
||||||
- [ ] Nutno nejprve vyřešit předávání PHPSESSIONID cookie na pizzachefie.cz pomocí fetch()
|
- [ ] Nutno nejprve vyřešit předávání PHPSESSIONID cookie na pizzachefie.cz pomocí fetch()
|
||||||
- [ ] Přesunout autentizaci na server (JWT?)
|
- [ ] Přesunout autentizaci na server (JWT?)
|
||||||
- [x] Zavést .env.template a přidat .env do .gitignore
|
- [ ] Zavést .env.template a přidat .env do .gitignore
|
||||||
- [ ] Zkrášlit dialog pro vyplnění čísla účtu, vypadá mizerně
|
- [ ] Zkrášlit dialog pro vyplnění čísla účtu, vypadá mizerně
|
||||||
- [ ] Podpora pro notifikace v externích systémech (Gotify, Discord, MS Teams)
|
- [ ] Podpora pro notifikace v externích systémech (Gotify, Discord, MS Teams)
|
1
client/.env.production
Normal file
1
client/.env.production
Normal file
@ -0,0 +1 @@
|
|||||||
|
PUBLIC_URL=http://192.168.1.106:3005
|
@ -1,3 +0,0 @@
|
|||||||
# Veřejná URL, na které bude dostupný klient (typicky přes proxy).
|
|
||||||
# Pro vývoj není potřeba, bude použita výchozí hodnota http://localhost:3001
|
|
||||||
# PUBLIC_URL=http://example:3001
|
|
3
client/.gitignore
vendored
3
client/.gitignore
vendored
@ -1,2 +1 @@
|
|||||||
build
|
build
|
||||||
.env.production
|
|
@ -1,4 +1,4 @@
|
|||||||
FROM node:18-alpine3.18 AS builder
|
FROM node:alpine AS builder
|
||||||
|
|
||||||
COPY package.json .
|
COPY package.json .
|
||||||
COPY yarn.lock .
|
COPY yarn.lock .
|
||||||
@ -12,7 +12,7 @@ COPY ./public ./public
|
|||||||
|
|
||||||
RUN yarn build
|
RUN yarn build
|
||||||
|
|
||||||
FROM node:18-alpine3.18
|
FROM node:alpine
|
||||||
ENV NODE_ENV production
|
ENV NODE_ENV production
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
@ -125,29 +125,29 @@ function App() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// const addToCart = async () => {
|
const addToCart = async () => {
|
||||||
// TODO aktuálně nefunkční - nedokážeme poslat PHPSESSIONID cookie
|
// TODO aktuálně nefunkční - nedokážeme poslat PHPSESSIONID cookie
|
||||||
// if (data?.pizzaDay?.orders) {
|
// if (data?.pizzaDay?.orders) {
|
||||||
// for (const order of data?.pizzaDay?.orders) {
|
// for (const order of data?.pizzaDay?.orders) {
|
||||||
// for (const pizzaOrder of order.pizzaList) {
|
// for (const pizzaOrder of order.pizzaList) {
|
||||||
// const url = 'https://www.pizzachefie.cz/pridat.html';
|
// const url = 'https://www.pizzachefie.cz/pridat.html';
|
||||||
// const payload = new URLSearchParams();
|
// const payload = new URLSearchParams();
|
||||||
// payload.append('varId', pizzaOrder.varId.toString());
|
// payload.append('varId', pizzaOrder.varId.toString());
|
||||||
// await fetch(url, {
|
// await fetch(url, {
|
||||||
// method: "POST",
|
// method: "POST",
|
||||||
// mode: "no-cors",
|
// mode: "no-cors",
|
||||||
// cache: "no-cache",
|
// cache: "no-cache",
|
||||||
// credentials: "same-origin",
|
// credentials: "same-origin",
|
||||||
// headers: {
|
// headers: {
|
||||||
// 'Content-Type': 'application/x-www-form-urlencoded',
|
// 'Content-Type': 'application/x-www-form-urlencoded',
|
||||||
// },
|
// },
|
||||||
// body: payload,
|
// body: payload,
|
||||||
// })
|
// })
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// // TODO otevřít košík v nové záložce
|
// // TODO otevřít košík v nové záložce
|
||||||
// }
|
// }
|
||||||
// }
|
}
|
||||||
|
|
||||||
const renderFoodTable = (name, food) => {
|
const renderFoodTable = (name, food) => {
|
||||||
return <Col md={12} lg={4}>
|
return <Col md={12} lg={4}>
|
||||||
@ -174,7 +174,7 @@ function App() {
|
|||||||
return <div>Načítám data...</div>
|
return <div>Načítám data...</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
const noOrders = data?.pizzaDay?.orders?.length === 0;
|
const noOrders = data?.pizzaDay?.orders?.length == 0;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@ -184,9 +184,7 @@ function App() {
|
|||||||
<Alert variant={'primary'}>
|
<Alert variant={'primary'}>
|
||||||
Poslední změny:
|
Poslední změny:
|
||||||
<ul>
|
<ul>
|
||||||
<li>Podpora Gotify</li>
|
<li>Přechody mezi stavy Pizza Day: Vytvořeno -> Uzamčeno -> Objednáno -> Doručeno</li>
|
||||||
<li>Vylepšení dokumentace pro vývojáře</li>
|
|
||||||
<li>Potíže usnout i v pozdních nočních hodinách</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</Alert>
|
</Alert>
|
||||||
<h1 className='title'>Dnes je {data.date}</h1>
|
<h1 className='title'>Dnes je {data.date}</h1>
|
||||||
|
1
server/.env.development
Normal file
1
server/.env.development
Normal file
@ -0,0 +1 @@
|
|||||||
|
MOCK_DATA=true
|
1
server/.env.production
Normal file
1
server/.env.production
Normal file
@ -0,0 +1 @@
|
|||||||
|
FOOD_API_URL=http://nginx/api/food
|
@ -1,8 +0,0 @@
|
|||||||
# URL na kterém je dostupný Food API parser.
|
|
||||||
# Pro vývoj není potřeba, bude použita výchozí hodnota http://localhost:3002
|
|
||||||
# FOOD_API_URL=http://nginx/api/food
|
|
||||||
|
|
||||||
# Zapne režim mockování jídelních lístků.
|
|
||||||
# Vhodné pro vývoj o víkendech, svátcích a dalších dnech, pro které podniky nenabízejí obědové menu.
|
|
||||||
# V tomto režimu vrací server vždy falešné datum (pracovní den) a Food API pevně nadefinovanou, smyšlenou nabídku jídel.
|
|
||||||
# MOCK_DATA=true
|
|
4
server/.gitignore
vendored
4
server/.gitignore
vendored
@ -1,5 +1,3 @@
|
|||||||
/node_modules
|
/node_modules
|
||||||
/dist
|
/dist
|
||||||
data.json
|
data.json
|
||||||
.env.production
|
|
||||||
.env.development
|
|
@ -1,4 +1,4 @@
|
|||||||
FROM node:18-alpine3.18
|
FROM node:alpine
|
||||||
|
|
||||||
ENV LANG cs_CZ.UTF-8
|
ENV LANG cs_CZ.UTF-8
|
||||||
|
|
||||||
|
@ -22,6 +22,9 @@ type Pizza = {
|
|||||||
const baseUrl = 'https://www.pizzachefie.cz';
|
const baseUrl = 'https://www.pizzachefie.cz';
|
||||||
const pizzyUrl = `${baseUrl}/pizzy.html?pobocka=plzen`;
|
const pizzyUrl = `${baseUrl}/pizzy.html?pobocka=plzen`;
|
||||||
|
|
||||||
|
// URL na Food API - získání jídelních lístků restaurací
|
||||||
|
const foodUrl = process.env.FOOD_API_URL || 'http://localhost:3002';
|
||||||
|
|
||||||
const buildPizzaUrl = (pizzaUrl: string) => {
|
const buildPizzaUrl = (pizzaUrl: string) => {
|
||||||
return `${baseUrl}/${pizzaUrl}`;
|
return `${baseUrl}/${pizzaUrl}`;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user