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.
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.
- 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)
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
changed title from WIP: feat: večeře — extra meal slot pro pozdní objednávky to feat: /objednani – skupinové objednávky s QR platbou2026-05-07 07:22:47 +02:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Co přibývá
Nová stránka
/objednaninahrazuje 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
open→locked→orderedopen: kdokoliv se může připojit/odejít, každý člen edituje svou částku a poznámkulocked: jen zakladatel přidává/odebírá členy a edituje hodnotyordered: vše zmrazeno; zakladatel generuje QR kódy platbySpráva obchodů (admin)
ADMIN_PASSWORDenv var)QR platba za skupinu
PayForGroupModal— volné částky bez menu (každý člen zadá svůj základ)orderedVylepšení „Zaplatit za všechny" (oběd)
API
Nové endpointy:
POST /api/groups/createPOST /api/groups/deletePOST /api/groups/addMemberPOST /api/groups/removeMemberPOST /api/groups/updateMemberPOST /api/groups/setStateGET /api/storesPOST /api/stores/addPOST /api/stores/deleteData extra slotu (
YYYY-MM-DD_extra) nyní obsahujígroups[]astores[]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)Konfigurace
Nová env proměnná
ADMIN_PASSWORDv.env.template— bez ní nelze přidávat obchody.65a3f5c661toaa7e2772a7aa7e2772a7to774be3df6dWIP: Podpora extra obědů po oběděto feat: večeře — extra meal slot pro pozdní objednávkykde merge od mága
ok, rozhodl jsem se to trochu upravit

WIP: feat: večeře — extra meal slot pro pozdní objednávkyto feat: /objednani – skupinové objednávky s QR platbouumí gitea gif test