Skip to content
eStasickiPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Pizzeria — SvelteKit + Tailwind + shadcn-svelte + Supabase

Strona pizzerii z zamówieniami online i panelem dla obsługi.

Start

bun install
cp .env.example .env
bun dev

Domyślnie (PUBLIC_DEV_MODE=true) aplikacja jedzie na danych w pamięci — bez Supabase, bez konfiguracji. Konta obsługi z .env:

Konto Hasło Rola
admin@admin.pl admin admin — kolejka, menu, ustawienia
kucharz@kucharz.pl kucharz kucharz — tylko kolejka

Zamówienia w tym trybie znikają po restarcie serwera. To celowe.

Testy

bun run test        # jednorazowo
bun run test:watch

Uwaga: bun run test uruchamia Vitest (nasz skonfigurowany runner). Samo bun test odpala wbudowany runner buna, który ignoruje vite.config.ts — dziś przechodzi tak samo, ale to inna ścieżka. Trzymaj się bun run test.

Testy pokrywają src/lib/price.ts — jedyne miejsce, gdzie liczą się pieniądze i w które klient może celować spreparowanym koszykiem.

Przejście na Supabase

  1. Załóż projekt na supabase.com.
  2. Wykonaj po kolei supabase/migrations/0001_init.sql, supabase/migrations/0002_product_addons.sql, potem supabase/seed.sql (SQL Editor).
  3. Uzupełnij w .env: PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY.
  4. Ustaw PUBLIC_DEV_MODE=false.
  5. Załóż konta przez /register, a potem nadaj im role — komendy są na końcu seed.sql.

Jak to jest poskładane

  • src/lib/price.ts — wycena pozycji koszyka. Ta sama funkcja liczy cenę poglądową w konfiguratorze i cenę wiążącą na serwerze. Cena z przeglądarki nigdy nie trafia do zamówienia — serwer liczy ją od nowa z aktualnego cennika.
  • src/lib/server/db.ts — jedyne wejście do danych. Każda funkcja ma gałąź mockową i supabase'ową, więc przełącznik PUBLIC_DEV_MODE działa w całej aplikacji.
  • src/lib/cart.svelte.ts — koszyk w localStorage, trzyma wyłącznie identyfikatory wyborów.
  • Ceny wszędzie w groszach (*_gr). Liczby zmiennoprzecinkowe gubią grosze przy sumowaniu.
  • src/lib/components/ui/ — komponenty shadcn-svelte. To nasz kod, nie zależność: wolno go edytować. Warianty brand, brand-outline, brand-dark, success i rozmiary pill, pill-lg w button.svelte to dodatki projektu.
  • Paleta z Figmy siedzi w zmiennych shadcn w src/routes/layout.css, więc komponenty są markowe bez nadpisywania klas w miejscach użycia.

Dodatki przypisane do produktu

Produkt ma flagę allows_addons (czy w ogóle przyjmuje dodatki) i listę addon_ids (które konkretnie). Pusta lista = wszystkie dostępne dodatki — dzięki temu menu bez ustawionych list działa jak wcześniej. Listę zawęża się w /admin/menu. Serwer sprawdza ją przy wycenie, więc dodatek spoza listy zostanie odrzucony niezależnie od tego, co przyśle przeglądarka.

Trasy

Ścieżka Kto
/, /menu, /cart wszyscy
/order/[token], /payment/[token] kto ma link (token = losowy UUID)
/account zalogowany
/admin kucharz + admin
/admin/menu, /admin/settings admin

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages