MASOX eshop - submodule of multica-mac
  • TypeScript 98.8%
  • JavaScript 1.1%
Find a file
2026-05-17 06:04:20 +00:00
be [PK-65] BE: serialize checkout route v process-local queue 2026-05-17 06:53:37 +02:00
data INFRA-1 (PK-21): Docker + monorepo skeleton (be/, fe/, SQLite volume) 2026-05-16 18:08:49 +02:00
fe [PK-48] FE-8 Admin UI: CRUD + orders + mark paid + inbox 2026-05-17 02:04:25 +02:00
.env.example [PK-57] BE: pridanie CORS middleware pre /api/* 2026-05-17 02:28:37 +02:00
.gitignore [PK-37] FE-1: Layout shell — header, footer, nav, login link 2026-05-16 19:47:29 +02:00
CONTRIBUTING.md INFRA-3 (PK-52): README, CONTRIBUTING, .gitignore pre PR-ready repo 2026-05-16 18:29:57 +02:00
docker-compose.yml [PK-61] INFRA: fix invalid YAML v docker-compose.yml command (block scalar) 2026-05-17 05:40:41 +02:00
README.md [PK-58] INFRA: predať PAYMENT_IBAN/RECIPIENT_NAME/SS do BE v docker-compose 2026-05-17 05:07:45 +02:00

MASOX eshop

B2C eshop pre mäsokombinát MASOX. Monorepo s oddeleným backendom (be/) a frontendom (fe/) postavenými na Next.js 14, SQLite databázou a behom v Dockeri.

Zadávateľ: Peter Kramárik, Wolkrova 31 Bratislava. Plátca DPH, B2C, kuriérske doručenie, pay-by-square QR platba.

Quickstart

git clone <repo-url> masox-eshop
cd masox-eshop
docker compose up --build

Po nábehu:

Služba URL
Frontend http://localhost:3000
Backend http://localhost:3001/api
Health http://localhost:3001/api/health

Pri prvom behu sa stiahnu image-y, nainštalujú závislosti, vygeneruje sa Prisma client a aplikujú sa všetky migrácie. Pri ďalších behoch je štart rýchly.

Demo dáta

Pri prvom docker compose up (keď ./data/masox.db ešte neexistuje) sa po prisma migrate deploy automaticky spustí aj npm run seed, takže QA aj dev majú okamžite naplnené testovacie dáta. Pri ďalších štartoch sa seed preskočí (DB súbor už existuje).

Re-seed (alebo manuálne spustenie):

docker compose exec be npm run seed

Reset DB do čistého stavu vrátane re-seedu (rýchla cesta cez prisma migrate):

docker compose exec be npm run migrate:reset
# alebo úplne natvrdo (zmaže ./data/masox.db, ďalší `up` ho vytvorí + seedne):
docker compose down
rm -f data/masox.db
docker compose up

Seed je idempotentný — opakované spustenie nezduplikuje záznamy (upsert podľa slug / email / stable UUID).

Prihlasovacie údaje vytvorené seedom (len dev/QA, žiadne reálne osobné údaje):

Rola Email Heslo
customer demo@masox.sk demo1234
admin admin@masox.sk admin1234

Obsah seedu: 5 kategórií (Bravčové, Hovädzie, Hydina, Údeniny a klobásy, Špeciality), 30 produktov mix unit ∈ {piece, kg}, 7 aktívnych akcií (percent + fixed, per-produkt aj per-kategória), 4 historické objednávky pre demo@masox.sk (pending, paid, shipped, cancelled) a 30 placeholder SVG obrázkov v fe/public/products/.

Štruktúra

.
├── be/                 # Backend — Next.js API only, Prisma + SQLite
│   ├── app/api/        # API routes (health, …)
│   ├── lib/db.ts       # Prisma client singleton
│   ├── prisma/         # schema.prisma, migrácie, seed
│   ├── .env.example
│   └── Dockerfile
├── fe/                 # Frontend — Next.js (App Router) + Tailwind
│   ├── src/app/        # App Router stránky
│   ├── src/components/ # brand + UI primitívy
│   ├── tailwind.config.ts
│   └── Dockerfile
├── data/               # SQLite súbor (./data/masox.db) — bind mount, persistuje
├── docker-compose.yml
├── .env.example
├── .gitignore
├── CONTRIBUTING.md
└── README.md

Stack

Vrstva Voľba
Backend Next.js 14 (App Router), TypeScript strict
Frontend Next.js 14 (App Router), Tailwind 3, Inter
Databáza SQLite (Prisma 5 driver)
Migrácie prisma migrate deploy z prisma/migrations/
Beh Docker Compose, dva kontajnery, SQLite na bind mounte
Platba pay-by-square QR (BE-6), overenie admin manuálne
Doručenie kuriér

Konfigurácia

V koreňovom adresári skopíruj .env.example na .env (alebo nech) — defaulty stačia. Per-app premenné sú v be/.env.example a fe/.env.example. Žiadne URL/porty nie sú hardkódované v kóde.

Premenná Default Význam
BE_PORT 3001 Host port pre BE
FE_PORT 3000 Host port pre FE
NEXT_PUBLIC_BE_URL http://localhost:3001 URL BE v prehliadači (client-side fetch)
BE_INTERNAL_URL http://be:3001 URL BE vo vnútri docker siete (server-side)
DATABASE_URL file:/data/masox.db SQLite súbor cez bind mount
SEED_ADMIN_PASSWORD change-me Heslo seed-nutého admina
PAYMENT_IBAN DEV placeholder IBAN IBAN pre pay-by-square QR (BE-6). Prod musí prepísať vlastným IBAN cez .env — nikdy necommitnúť.
PAYMENT_RECIPIENT_NAME MASOX s.r.o. Príjemca v QR. V produkcii prepíš podľa skutočnej firmy.
PAYMENT_SS (prázdne) Voliteľný špecifický symbol pre QR.

Branching a PR

  • main je chránený — žiadne priame commit-y, len cez Merge Request / Pull Request.
  • Feature práca cez vetvu feature/<issue-id>-<slug> (napr. feature/pk-19-checkout-qr).
  • 1 sub-issue = 1 vetva = 1 MR/PR. Po odsúhlasení tech-lead-om sa MR mergne do main.
  • Detaily konvencií viď CONTRIBUTING.md.

Backup SQLite

Bind mount ./data/masox.db je obyčajný súbor na hoste. Záloha:

docker compose stop be              # voliteľné, kvôli konzistentnosti
cp data/masox.db data/masox.db.bak  # alebo presunúť do iného úložiska
docker compose start be

Restore: prepíš data/masox.db zálohou pri zastavenom BE kontajneri.

Užitočné príkazy

# spustenie
docker compose up --build

# spustenie na pozadí
docker compose up -d

# logy konkrétnej služby
docker compose logs -f be
docker compose logs -f fe

# zastavenie
docker compose down

# vytvorenie novej migrácie (BE-2 a vyššie)
docker compose exec be npx prisma migrate dev --name <nazov>

# spustenie seedu
docker compose exec be npm run seed

Sub-issues a referencie

Master issue: MASOX eshop — masokombinát eshop (Next.js BE+FE, SQLite, Docker).

Sub-issues sú trasované v Multica workspace MASOX eshop. Každá nová sub-issue ide cez vlastnú feature branch + MR.