Commit Graph

71 Commits

Author SHA1 Message Date
batmanisko 936b33cc80 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
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ů)
2026-05-07 07:05:01 +02:00
batmanisko 774be3df6d 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
- 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)
2026-05-06 21:06:25 +02:00
batmanisko fe6bb3290e feat: přidání testů – Jest unit testy + Playwright E2E + CI pipeline
ci/woodpecker/push/workflow Pipeline was canceled
ci/woodpecker/pr/workflow Pipeline failed
Server:
- Jest unit testy (88 testů): auth, utils, restaurants, service, voting, pizza
- in-memory storage mock pro izolaci testů
- oprava race condition při inicializaci Redis (storageReady promise)
- dev route dostupná i pro NODE_ENV=test
- getStatsMock deterministický (nahrazení Math.random)
- exporty interních helperů pro testovatelnost
- /api/health endpoint pro Playwright readiness check
- tsconfig vylučuje test soubory z produkčního buildu

E2E (e2e/):
- Playwright s Firefoxem + Chromiem
- testy: login, menu, výběr jídla, pizza day životní cyklus, QR/nastavení
- trusted-header auth bypass pro testy, video + trace při selhání

CI (Woodpecker):
- pipeline spouštěna na všech větvích a PR (nejen master)
- redis-stack-server service pro E2E – čistý Redis per větev automaticky
- kroky: unit testy, build, E2E testy (parallel kde možné)
- Docker build zůstává pouze pro master

Co-Authored-By: Claude Opus (extra usage) 4.7 <noreply@anthropic.com>
2026-04-29 00:25:22 +02:00
batmanisko 1e1e23df80 feat: úhrada za všechny jednou osobou (issue #29, SINGLE_PAYMENT)
ci/woodpecker/push/workflow Pipeline was canceled
Přidává možnost, aby jeden strávník zaplatil celý účet v restauraci a ostatní
obdrželi QR kód pro refundaci.

Prerekvizita — podpora více QR kódů na (příjemce, den):
- PendingQr.id (UUID) nahrazuje deduplikaci podle data; každý QR má vlastní klíč
- QR obrázky uloženy do Redis/storage (base64) místo tmpdir — přežijí redeploy
- GET /api/qr vyžaduje ?id= parametr; dismissQr přijímá {id} místo {date}

Feature:
- Ikona 'Zaplatit za všechny' v choices-table pro každou LunchChoice (kromě
  PIZZA/NEOBEDVAM/ROZHODUJI); viditelná jen při ≥2 strávnících a vyplněném účtu
- PayForAllModal: tabulka strávníků s prefillovanými cenami z menu, příplatky
  per-diner, celkové dýško rozpočtené rovnoměrně, generování QR přes POST /api/qr/generate
- parsePriceCzk() helper pro parsing 'N Kč' → number

Co se nemění: POST /api/qr/generate API kontrakt, PizzaOrder.hasQr boolean

Co se mění v OpenAPI: PendingQr.id (required), getPizzaQr ?id param, dismissQr body

Co-Authored-By: opmrdkazkrtkaus <opmrdkazkrtkaus@melancholik.eu>
2026-04-28 22:44:32 +02:00
mates 44cf749bc9 feat: nový způsob zobrazování novinek
ci/woodpecker/push/workflow Pipeline is pending
fix: oprava kopírování changelogů do Docker image

fix: oprava kopírování changelogů do Docker image

fix: oprava
2026-03-08 10:55:50 +01:00
batmanisko d62f6c1f5a feat: push notifikace pro připomínku výběru oběda
ci/woodpecker/push/workflow Pipeline was successful
2026-03-04 13:33:58 +01:00
mates cc98c2be0d feat: podpora ručního generování QR kódů pro platby
ci/woodpecker/push/workflow Pipeline was successful
2026-02-20 14:17:39 +01:00
mates ac6727efa5 feat: vylepšení Pizza day
ci/woodpecker/push/workflow Pipeline was successful
2026-02-10 23:59:58 +01:00
batmanisko b8629afef2 feat: trvalé zobrazení QR kódu do ručního zavření (#31)
QR kódy pro platbu za pizza day jsou nyní zobrazeny persistentně
i po následující dny, dokud uživatel nepotvrdí platbu tlačítkem
"Zaplatil jsem". Nevyřízené QR kódy jsou uloženy per-user v storage
a zobrazeny v sekci "Nevyřízené platby".
2026-02-04 17:34:05 +01:00
batmanisko d366ac39d4 feat: podpora per-user notifikací s Discord, ntfy a Teams (#39)
Uživatelé mohou v nastavení konfigurovat vlastní webhook URL/topic
pro Discord, MS Teams a ntfy, a zvolit události k odběru.
Notifikace jsou odesílány pouze uživatelům se stejnou zvolenou lokalitou.
2026-02-04 17:33:53 +01:00
batmanisko fdd42dc46a feat: zobrazení minulého týdne o víkendu místo "Užívejte víkend" (#30)
Na víkendu se nyní zobrazuje páteční menu s možností procházet celý týden.
Editační ovládací prvky jsou automaticky skryté díky existující logice canChangeChoice.
2026-02-04 14:56:24 +01:00
mates 0d90453c38 Oprava chybného čtení .env souborů 2025-08-07 13:02:41 +02:00
batmanisko cfffd2b31d pro refresh endpoint nevyzadovat authtoken 2025-07-31 23:45:47 +02:00
batmanisko 58bb5f4e7d pro refresh endpoint nevyzadovat authtoken 2025-07-31 23:41:51 +02:00
batmanisko 49b8ab5c13 Update server/src/index.ts
ci/woodpecker/push/workflow Pipeline was successful
delete req.headers["cookie"]
2025-04-11 12:06:52 +02:00
batmanisko 9a05ef1fe6 Update server/src/index.ts
ci/woodpecker/push/workflow Pipeline was successful
vic logov
2025-04-11 12:01:58 +02:00
batmanisko 0bfea3765f properta pro logovani headeru
ci/woodpecker/push/workflow Pipeline was successful
2025-04-11 10:42:27 +02:00
batmanisko 962fbe2947 fix hardcoded header name xd
ci/woodpecker/push/workflow Pipeline was successful
2025-04-11 10:06:35 +02:00
mates e55ee7c11e Refaktor: Nálezy SonarQube
ci/woodpecker/push/workflow Pipeline is running
2025-03-05 21:48:02 +01:00
mates d69e09afee Migrace na OpenAPI - TypeScript typy 2025-03-05 21:05:21 +01:00
mates 68bafa808c Oprava #8
ci/woodpecker/push/workflow Pipeline was successful
2025-02-27 21:46:50 +01:00
mates ca400638d1 Přidání základních statistik
ci/woodpecker/push/workflow Pipeline failed
2025-02-27 00:22:34 +01:00
batmanisko f8aa293413 fix
ci/woodpecker/push/workflow Pipeline is running
2025-02-17 09:26:03 +01:00
batmanisko cafcd0a467 Log username a email pri kazdem dotazu pouze pro neproduction env
ci/woodpecker/push/workflow Pipeline was successful
2025-02-17 09:19:28 +01:00
mates 7e4fa236b1 Podpora easter eggů 2024-12-11 20:09:45 +01:00
batmanisko 9b7abb0703 throw error 2024-11-19 12:10:02 +01:00
batmanisko 5678e4a606 Snad fix timeout 2024-11-19 12:01:59 +01:00
mates 44187bc316 Oprava vyhodnocení nastavení trusted headers 2024-03-04 23:33:22 +01:00
mates 4991b813bf Umožnit zadání trusted IPs s bílými znaky 2023-12-02 20:54:39 +01:00
mates 515d4bb47e Opravy překlepů 2023-12-02 20:50:19 +01:00
mates b9b2492cb4 Odstranění zbytečné proměnné 2023-12-02 20:47:38 +01:00
batmanisko 4ff5d70331 tohle prepsalo muj list ip adres 2023-12-02 19:09:12 +01:00
batmanisko 44de01f6eb doufam ze jsem to hodne rozjebal lol 2023-12-02 17:45:56 +01:00
mates 74893c38eb Refaktor, rozdělení api, zpřehlednění kódu 2023-10-03 22:52:09 +02:00
mates 8e285e9197 Možnost hlasování o nových funkcích 2023-09-27 18:35:18 +02:00
mates eb27591727 Možnost příplatků u Pizza day objednávek 2023-09-24 20:15:04 +02:00
mates e4451e299a Serverová validace času odchodu 2023-09-24 08:38:40 +02:00
mates 862614ae9d Refaktor, oddělení Pizza Day do vlastní servisky 2023-09-24 08:08:41 +02:00
mates bc181defa8 Zpracování chyb z API 2023-09-18 22:38:04 +02:00
batmanisko 8a67325c85 tmp fix pondelku (mozna) 2023-09-11 09:32:05 +02:00
mates 832d3089ec Možnost náhledu a výběru na další dny v týdnu 2023-09-06 19:22:19 +02:00
mates 45bd84f96f Oprava stahování pizz pro Pizza day 2023-08-10 21:47:56 +02:00
mates e78f9cfd3a Začištění kódu 2023-08-08 21:45:21 +02:00
mates fd2e460a82 Dekódování jména uživatele z trusted headers 2023-08-08 20:05:41 +02:00
mates 0b8f00fa49 Oprava chybného zpracování env proměnné MOCK_DATA 2023-08-07 09:38:36 +02:00
mates c4b14bdf6b Ukládání dat výhradně do DB 2023-08-06 21:45:27 +02:00
mates 18cb172e06 Ukládání pizz do DB místo dočasného souboru 2023-08-06 18:52:18 +02:00
mates 3f303ea5ea Možnost zadání preferovaného času odchodu 2023-08-06 18:13:54 +02:00
mates 37542499a9 Zavedení podpory pro Redis, agnostické úložiště dat 2023-08-06 17:46:51 +02:00
mates 8a75c98c9a Základ zobrazování ověřených uživatelů 2023-07-30 23:36:18 +02:00