feat: /objednani – skupinové objednávky s QR platbou #55

Merged
mates merged 2 commits from feat/vecerexd into master 2026-05-07 11:15:09 +02:00
Member

Co přibývá

Nová stránka /objednani nahrazuje původní /vecere. Umožňuje vytvářet více skupin objednávajících najednou — každá skupina objednává z jiného obchodu nebo restaurace.

Skupiny objednávek

  • Libovolný počet skupin za den, každá s vlastním názvem (vybraným ze spravovaného seznamu obchodů)
  • Stavový automat: openlockedordered
    • open: kdokoliv se může připojit/odejít, každý člen edituje svou částku a poznámku
    • locked: jen zakladatel přidává/odebírá členy a edituje hodnoty
    • ordered: vše zmrazeno; zakladatel generuje QR kódy platby
  • Zakladatel skupiny může skupinu smazat nebo uzamknout/odemknout

Správa obchodů (admin)

  • Seznam povolených obchodů je spravován přes modal „Správa obchodů" (ikona ozubeného kola)
  • Přidávání/odebírání obchodů vyžaduje admin heslo (ADMIN_PASSWORD env var)
  • Bez nastaveného hesla je seznam uzavřený — ochrana před nevhodným obsahem

QR platba za skupinu

  • Nový PayForGroupModal — volné částky bez menu (každý člen zadá svůj základ)
  • Zakladatel generuje QR kódy pro ostatní členy po přechodu do stavu ordered
  • Poplatky (dýško, doručení…) se zadávají jako celková částka a dělí rovnoměrně mezi všechny včetně plátce
  • Plátce vidí vlastní podíl jako informační řádek (bez generování QR pro sebe)

Vylepšení „Zaplatit za všechny" (oběd)

  • Plátce nyní vidí vlastní podíl v tabulce jako informační řádek
  • Poplatky děleny počtem všech účastníků včetně plátce (bylo: jen ostatní)
  • Přejmenování „Dýško" → „Poplatek"

API

Nové endpointy:

Endpoint Popis
POST /api/groups/create Vytvoří skupinu (název musí být v seznamu obchodů)
POST /api/groups/delete Smaže skupinu (jen zakladatel)
POST /api/groups/addMember Přidá člena (sebe nebo jiného jako zakladatel)
POST /api/groups/removeMember Odebere člena
POST /api/groups/updateMember Upraví částku/poznámku člena
POST /api/groups/setState Změní stav skupiny (jen zakladatel)
GET /api/stores Seznam povolených obchodů
POST /api/stores/add Přidá obchod (admin heslo)
POST /api/stores/delete Odebere obchod (admin heslo)

Data extra slotu (YYYY-MM-DD_extra) nyní obsahují groups[] a stores[] místo food choices.

Testy

  • server/src/tests/groups.test.ts — 26 testů (vytvoření, přidání/odebrání členů, úpravy, stavový automat, oprávnění)
  • server/src/tests/stores.test.ts — 10 testů (seznam, přidání, duplikát, odebrání, admin heslo)
  • Celkem 206 testů, vše zelené

Konfigurace

Nová env proměnná ADMIN_PASSWORD v .env.template — bez ní nelze přidávat obchody.

## Co přibývá Nová stránka `/objednani` nahrazuje původní `/vecere`. Umožňuje vytvářet **více skupin** objednávajících najednou — každá skupina objednává z jiného obchodu nebo restaurace. ### Skupiny objednávek - Libovolný počet skupin za den, každá s vlastním názvem (vybraným ze spravovaného seznamu obchodů) - **Stavový automat:** `open` → `locked` → `ordered` - `open`: kdokoliv se může připojit/odejít, každý člen edituje svou částku a poznámku - `locked`: jen zakladatel přidává/odebírá členy a edituje hodnoty - `ordered`: vše zmrazeno; zakladatel generuje QR kódy platby - Zakladatel skupiny může skupinu smazat nebo uzamknout/odemknout ### Správa obchodů (admin) - Seznam povolených obchodů je spravován přes modal „Správa obchodů" (ikona ozubeného kola) - Přidávání/odebírání obchodů vyžaduje admin heslo (`ADMIN_PASSWORD` env var) - Bez nastaveného hesla je seznam uzavřený — ochrana před nevhodným obsahem ### QR platba za skupinu - Nový `PayForGroupModal` — volné částky bez menu (každý člen zadá svůj základ) - Zakladatel generuje QR kódy pro ostatní členy po přechodu do stavu `ordered` - Poplatky (dýško, doručení…) se zadávají jako celková částka a dělí rovnoměrně **mezi všechny včetně plátce** - Plátce vidí vlastní podíl jako informační řádek (bez generování QR pro sebe) ### Vylepšení „Zaplatit za všechny" (oběd) - Plátce nyní vidí vlastní podíl v tabulce jako informační řádek - Poplatky děleny počtem všech účastníků včetně plátce (bylo: jen ostatní) - Přejmenování „Dýško" → „Poplatek" ## API Nové endpointy: | Endpoint | Popis | |---|---| | `POST /api/groups/create` | Vytvoří skupinu (název musí být v seznamu obchodů) | | `POST /api/groups/delete` | Smaže skupinu (jen zakladatel) | | `POST /api/groups/addMember` | Přidá člena (sebe nebo jiného jako zakladatel) | | `POST /api/groups/removeMember` | Odebere člena | | `POST /api/groups/updateMember` | Upraví částku/poznámku člena | | `POST /api/groups/setState` | Změní stav skupiny (jen zakladatel) | | `GET /api/stores` | Seznam povolených obchodů | | `POST /api/stores/add` | Přidá obchod (admin heslo) | | `POST /api/stores/delete` | Odebere obchod (admin heslo) | Data extra slotu (`YYYY-MM-DD_extra`) nyní obsahují `groups[]` a `stores[]` místo food choices. ## Testy - `server/src/tests/groups.test.ts` — 26 testů (vytvoření, přidání/odebrání členů, úpravy, stavový automat, oprávnění) - `server/src/tests/stores.test.ts` — 10 testů (seznam, přidání, duplikát, odebrání, admin heslo) - Celkem 206 testů, vše zelené ## Konfigurace Nová env proměnná `ADMIN_PASSWORD` v `.env.template` — bez ní nelze přidávat obchody.
batmanisko force-pushed feat/vecerexd from 65a3f5c661 to aa7e2772a7 2026-05-06 20:38:00 +02:00 Compare
batmanisko added 1 commit 2026-05-06 21:06:36 +02:00
feat: večeře (extra meal slot)
CI / Generate TypeScript types (pull_request) Successful in 11s
CI / Generate TypeScript types (push) Successful in 36s
CI / Server unit tests (pull_request) Successful in 25s
CI / Build client (pull_request) Successful in 37s
CI / Server unit tests (push) Successful in 22s
CI / Build server (push) Successful in 1m0s
CI / Build client (push) Successful in 37s
CI / Build server (pull_request) Successful in 3m14s
CI / Playwright E2E tests (push) Successful in 1m18s
CI / Build and push Docker image (push) Has been skipped
CI / Notify (push) Successful in 2s
CI / Playwright E2E tests (pull_request) Successful in 10m34s
CI / Build and push Docker image (pull_request) Has been skipped
CI / Notify (pull_request) Has been skipped
774be3df6d
- Nová stránka /vecere pro evidenci extra jídla (večeře/pozdní oběd)
- MealSlot enum (obed/extra), oddělený storage namespace YYYY-MM-DD_extra
- slot parametr na všech food endpointech a GET /api/data
- Push reminder: přechod na 60min cooldown, login v payloadu místo endpointu
- server: slot?: string → slot?: MealSlot, enum konstanty místo literálů
- Jest testy izolace extra/obed storage namespace
- Aktualizace changelogů (saláty, SINGLE_PAYMENT, večeře)
batmanisko force-pushed feat/vecerexd from aa7e2772a7 to 774be3df6d 2026-05-06 21:06:36 +02:00 Compare
batmanisko changed title from WIP: Podpora extra obědů po obědě to feat: večeře — extra meal slot pro pozdní objednávky 2026-05-06 21:13:25 +02:00
Author
Member

kde merge od mága

kde merge od mága
Author
Member

obrazek.png

![obrazek.png](/attachments/bb7cd844-9caf-469a-b2b9-04990446ded2)
Author
Member

obrazek.png

![obrazek.png](/attachments/07e44b87-574a-4d80-b8af-6158dbdbbffd)
batmanisko marked the pull request as work in progress 2026-05-06 22:17:26 +02:00
batmanisko added 1 commit 2026-05-07 07:05:47 +02:00
feat: /objednani – skupinové objednávky s QR platbou
CI / Generate TypeScript types (push) Successful in 18s
CI / Generate TypeScript types (pull_request) Successful in 9s
CI / Server unit tests (push) Successful in 21s
CI / Build client (push) Successful in 40s
CI / Server unit tests (pull_request) Successful in 21s
CI / Build server (pull_request) Successful in 24s
CI / Build server (push) Has been cancelled
CI / Playwright E2E tests (push) Has been cancelled
CI / Build and push Docker image (push) Has been cancelled
CI / Notify (push) Has been cancelled
CI / Build client (pull_request) Has been cancelled
CI / Playwright E2E tests (pull_request) Has been cancelled
CI / Build and push Docker image (pull_request) Has been cancelled
CI / Notify (pull_request) Has been cancelled
936b33cc80
Nahrazuje /vecere novou stránkou /objednani. Místo jednoho
OBJEDNAVAM bucketu umožňuje vytvářet více skupin, kde každá
objednává z jiného obchodu.

- Skupiny mají stavový automat: open → locked → ordered
- Obchody spravuje admin heslem (ADMIN_PASSWORD env var)
  přes modal „Správa obchodů"
- Při stavu ordered zakladatel generuje QR kódy platby
  (nový PayForGroupModal – volné částky bez menu)
- PayForAllModal (oběd) upraven: plátce nyní vidí svůj
  vlastní díl jako informační řádek
- Nové testy: stores.test.ts + groups.test.ts (36 testů)
batmanisko added 1 commit 2026-05-07 07:09:18 +02:00
chore: run_dev.ps1 + VS Code tasks
CI / Generate TypeScript types (push) Successful in 16s
CI / Generate TypeScript types (pull_request) Successful in 12s
CI / Build server (push) Successful in 29s
CI / Build client (push) Successful in 35s
CI / Server unit tests (pull_request) Successful in 20s
CI / Server unit tests (push) Successful in 1m45s
CI / Build server (pull_request) Successful in 28s
CI / Playwright E2E tests (push) Successful in 1m17s
CI / Build and push Docker image (push) Has been skipped
CI / Notify (push) Successful in 2s
CI / Build client (pull_request) Successful in 5m36s
CI / Playwright E2E tests (pull_request) Has been cancelled
CI / Build and push Docker image (pull_request) Has been cancelled
CI / Notify (pull_request) Has been cancelled
d2f45be2d3
Windows Terminal dev runner a VS Code tasks pro spuštění
server+client z editoru.
Author
Member

ok, rozhodl jsem se to trochu upravit
obrazek.png

ok, rozhodl jsem se to trochu upravit ![obrazek.png](/attachments/15050813-bd4f-4b1a-9e01-460ba7078b8b)
batmanisko added 1 commit 2026-05-07 07:20:18 +02:00
fix: poplatky děleny všemi (včetně plátce), přejmenování Dýško → Poplatek
CI / Generate TypeScript types (push) Successful in 11s
CI / Generate TypeScript types (pull_request) Successful in 10s
CI / Build server (push) Successful in 46s
CI / Build client (push) Successful in 39s
CI / Server unit tests (pull_request) Successful in 21s
CI / Playwright E2E tests (push) Successful in 1m17s
CI / Server unit tests (push) Has been cancelled
CI / Build and push Docker image (push) Has been cancelled
CI / Notify (push) Has been cancelled
CI / Build server (pull_request) Has been cancelled
CI / Build client (pull_request) Has been cancelled
CI / Playwright E2E tests (pull_request) Has been cancelled
CI / Build and push Docker image (pull_request) Has been cancelled
CI / Notify (pull_request) Has been cancelled
cca751752d
batmanisko changed title from WIP: feat: večeře — extra meal slot pro pozdní objednávky to feat: /objednani – skupinové objednávky s QR platbou 2026-05-07 07:22:47 +02:00
batmanisko added 1 commit 2026-05-07 07:25:31 +02:00
feat: novinka /objednani, odebrání z hlasování (CUSTOM_QR implementováno)
CI / Generate TypeScript types (push) Successful in 10s
CI / Server unit tests (push) Successful in 20s
CI / Generate TypeScript types (pull_request) Successful in 35s
CI / Build server (push) Successful in 28s
CI / Build client (push) Has been cancelled
CI / Playwright E2E tests (push) Has been cancelled
CI / Build and push Docker image (push) Has been cancelled
CI / Notify (push) Has been cancelled
CI / Server unit tests (pull_request) Has been cancelled
CI / Build server (pull_request) Has been cancelled
CI / Build client (pull_request) Has been cancelled
CI / Playwright E2E tests (pull_request) Has been cancelled
CI / Build and push Docker image (pull_request) Has been cancelled
CI / Notify (pull_request) Has been cancelled
abc3d070cc
batmanisko added 1 commit 2026-05-07 07:26:43 +02:00
Zbytečný changelog
CI / Generate TypeScript types (push) Successful in 19s
CI / Generate TypeScript types (pull_request) Successful in 14s
CI / Build server (push) Successful in 53s
CI / Server unit tests (pull_request) Has been cancelled
CI / Build server (pull_request) Has been cancelled
CI / Build client (pull_request) Has been cancelled
CI / Playwright E2E tests (pull_request) Has been cancelled
CI / Build and push Docker image (pull_request) Has been cancelled
CI / Notify (pull_request) Has been cancelled
CI / Build client (push) Successful in 54s
CI / Playwright E2E tests (push) Successful in 1m19s
CI / Server unit tests (push) Successful in 3m53s
CI / Build and push Docker image (push) Has been skipped
CI / Notify (push) Successful in 12s
21d7224fb4
batmanisko requested review from mates 2026-05-07 07:27:31 +02:00
Author
Member

umí gitea gif test

umí gitea gif test
mates added 1 commit 2026-05-07 08:56:53 +02:00
fix: opravy po review
CI / Generate TypeScript types (push) Successful in 10s
CI / Server unit tests (push) Successful in 21s
CI / Generate TypeScript types (pull_request) Successful in 47s
CI / Build server (push) Successful in 27s
CI / Server unit tests (pull_request) Successful in 20s
CI / Build server (pull_request) Successful in 27s
CI / Build client (pull_request) Successful in 40s
CI / Playwright E2E tests (pull_request) Successful in 1m20s
CI / Build and push Docker image (pull_request) Has been skipped
CI / Notify (pull_request) Has been skipped
CI / Build client (push) Successful in 4m13s
CI / Playwright E2E tests (push) Successful in 6m7s
CI / Build and push Docker image (push) Has been skipped
CI / Notify (push) Successful in 6s
5f03471541
mates added 1 commit 2026-05-07 09:09:50 +02:00
feat: potvrzení o úhradě objednávky
CI / Generate TypeScript types (push) Successful in 9s
CI / Generate TypeScript types (pull_request) Successful in 9s
CI / Server unit tests (push) Successful in 21s
CI / Build client (push) Successful in 33s
CI / Server unit tests (pull_request) Successful in 20s
CI / Build server (pull_request) Successful in 35s
CI / Build client (pull_request) Successful in 47s
CI / Build server (push) Successful in 3m9s
CI / Playwright E2E tests (pull_request) Successful in 1m18s
CI / Build and push Docker image (pull_request) Has been skipped
CI / Notify (pull_request) Has been skipped
CI / Playwright E2E tests (push) Successful in 6m51s
CI / Build and push Docker image (push) Has been skipped
CI / Notify (push) Successful in 16s
1efe2b8f7d
mates added 1 commit 2026-05-07 09:50:54 +02:00
feat: vylepšení objednávek
CI / Generate TypeScript types (pull_request) Successful in 20s
CI / Server unit tests (pull_request) Failing after 20s
CI / Build client (pull_request) Failing after 30s
CI / Build server (pull_request) Successful in 3m13s
CI / Playwright E2E tests (pull_request) Has been skipped
CI / Build and push Docker image (pull_request) Has been skipped
CI / Notify (pull_request) Has been skipped
CI / Build client (push) Failing after 10m5s
CI / Generate TypeScript types (push) Successful in 10s
CI / Server unit tests (push) Failing after 22s
CI / Build server (push) Successful in 41s
CI / Playwright E2E tests (push) Has been skipped
CI / Build and push Docker image (push) Has been skipped
CI / Notify (push) Successful in 4s
c7f78cf2c9
mates added 1 commit 2026-05-07 10:50:46 +02:00
fix: oprava buildu
CI / Generate TypeScript types (push) Successful in 11s
CI / Generate TypeScript types (pull_request) Successful in 23s
CI / Server unit tests (push) Successful in 21s
CI / Build client (push) Successful in 34s
CI / Server unit tests (pull_request) Successful in 21s
CI / Build server (push) Successful in 1m4s
CI / Build server (pull_request) Successful in 25s
CI / Build client (pull_request) Successful in 1m40s
CI / Playwright E2E tests (push) Successful in 1m19s
CI / Build and push Docker image (push) Has been skipped
CI / Notify (push) Successful in 10s
CI / Playwright E2E tests (pull_request) Successful in 1m18s
CI / Build and push Docker image (pull_request) Has been skipped
CI / Notify (pull_request) Has been skipped
d8714b2086
mates added 1 commit 2026-05-07 11:04:40 +02:00
fix: revert yarn
CI / Generate TypeScript types (pull_request) Successful in 18s
CI / Server unit tests (pull_request) Successful in 23s
CI / Build server (pull_request) Successful in 26s
CI / Build client (pull_request) Successful in 5m10s
CI / Generate TypeScript types (push) Successful in 11s
CI / Server unit tests (push) Successful in 20s
CI / Build server (push) Successful in 59s
CI / Build client (push) Successful in 38s
CI / Playwright E2E tests (push) Successful in 1m19s
CI / Playwright E2E tests (pull_request) Successful in 7m24s
CI / Build and push Docker image (pull_request) Has been skipped
CI / Notify (pull_request) Has been skipped
CI / Build and push Docker image (push) Successful in 1m52s
CI / Notify (push) Successful in 2s
d91c8db49c
mates merged commit d91c8db49c into master 2026-05-07 11:15:09 +02:00
batmanisko deleted branch feat/vecerexd 2026-05-07 11:46:04 +02:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Marbes/Luncher#55