Compare commits

..

No commits in common. "4aadb346ee72be85727435aa4c699a435921290f" and "08febd4af237a0c44db6dedb83630afb6d088a77" have entirely different histories.

12 changed files with 46 additions and 83 deletions

View File

@ -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
View File

@ -0,0 +1 @@
PUBLIC_URL=http://192.168.1.106:3005

View File

@ -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

1
client/.gitignore vendored
View File

@ -1,2 +1 @@
build build
.env.production

View File

@ -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

View File

@ -125,7 +125,7 @@ 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) {
@ -147,7 +147,7 @@ function App() {
// } // }
// // 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 -&gt; Uzamčeno -&gt; Objednáno -&gt; 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
View File

@ -0,0 +1 @@
MOCK_DATA=true

1
server/.env.production Normal file
View File

@ -0,0 +1 @@
FOOD_API_URL=http://nginx/api/food

View File

@ -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

2
server/.gitignore vendored
View File

@ -1,5 +1,3 @@
/node_modules /node_modules
/dist /dist
data.json data.json
.env.production
.env.development

View File

@ -1,4 +1,4 @@
FROM node:18-alpine3.18 FROM node:alpine
ENV LANG cs_CZ.UTF-8 ENV LANG cs_CZ.UTF-8

View File

@ -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}`;
} }