No description
  • PHP 79.6%
  • TypeScript 7.6%
  • HTML 6%
  • CSS 3.9%
  • Blade 2%
  • Other 0.9%
Find a file
Lukáš Prokorát 7c6d2776a0
All checks were successful
CI/CD Pipeline (IIS FTP) / deploy-frontend (push) Successful in 1m6s
CI/CD Pipeline (IIS FTP) / deploy-backend (push) Successful in 31s
Oprava odesílání pozvánek: SMTP z nastavení a lepší chybové hlášky.
Načte mail konfiguraci z admin nastavení, spolehlivěji páruje frontu a zobrazí konkrétní důvod selhání místo obecné 422.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-03 01:24:23 +02:00
.forgejo/workflows Oprava API URL pro oddělený FE/API host a deploy patch meta tagu. 2026-07-02 11:11:36 +02:00
api Oprava odesílání pozvánek: SMTP z nastavení a lepší chybové hlášky. 2026-07-03 01:24:23 +02:00
deploy Modernizace UI, systémová nastavení, legacy import a Forgejo deploy pipeline. 2026-07-02 10:48:48 +02:00
docs Honorář a fakturace iDoklad: zjednodušení výplat, popup flow a integrace brány. 2026-07-03 00:18:39 +02:00
legacy Ikona aplikace iF.png a značka iFerman místo dekorativního //iFERMAN\\. 2026-07-02 12:52:44 +02:00
scripts Honorář a fakturace iDoklad: zjednodušení výplat, popup flow a integrace brány. 2026-07-03 00:18:39 +02:00
web Oprava odesílání pozvánek: SMTP z nastavení a lepší chybové hlášky. 2026-07-03 01:24:23 +02:00
.gitignore Initial commit: iFerman theatre management application. 2026-07-02 00:29:27 +02:00
docker-compose.yml Initial commit: iFerman theatre management application. 2026-07-02 00:29:27 +02:00
package-lock.json Modernizace UI, systémová nastavení, legacy import a Forgejo deploy pipeline. 2026-07-02 10:48:48 +02:00
package.json Honorář a fakturace iDoklad: zjednodušení výplat, popup flow a integrace brány. 2026-07-03 00:18:39 +02:00
README.md Honorář a fakturace iDoklad: zjednodušení výplat, popup flow a integrace brány. 2026-07-03 00:18:39 +02:00

iFerman — React + Tabler + Laravel REST API

Moderní náhrada legacy PHP systému pro správu divadelního souboru.

Struktura

iFerman/
├── legacy/     # Původní PHP monolit (referenční)
├── api/        # Laravel 13 REST API
├── web/        # React 19 + Vite + Tabler UI
└── docker-compose.yml

Požadavky

  • PHP 8.2+, Composer
  • Node.js 20+, npm
  • Docker (MySQL, Redis, Mailpit)

Instalace nové instance (instalační průvodce)

Po nasazení na server otevřete frontend — automaticky se spustí průvodce na /install.

Postup na serveru

  1. Nahrajte kód, v api/ zkopírujte .env.example.env
  2. Nastavte oprávnění: chmod -R 775 api/storage api/bootstrap/cache
  3. Spusťte API (php artisan serve nebo nginx + php-fpm)
  4. Sestavte / naservírujte frontend (npm run build)
  5. Otevřete URL frontendu v prohlížeči

Kroky průvodce

Krok Co se děje
1. Úvod Kontrola PHP 8.2+, rozšíření, zapisovatelnost .env a storage/
2. Databáze Připojení k MySQL, test, uložení do .env
3. Migrace Spuštění php artisan migrate
4. Systém Název, URL API, URL frontendu, e-mail odesílatele
5. Administrátor Vytvoření prvního admin účtu
6. Hotovo Označení instalace, přesměrování na /login

API endpointy instalace

GET  /api/v1/install/status      — stav instalace (vždy dostupné)
GET  /api/v1/install/requirements
POST /api/v1/install/database/test
POST /api/v1/install/database
POST /api/v1/install/migrate
POST /api/v1/install/settings
POST /api/v1/install/admin
POST /api/v1/install/finish

Po dokončení instalace se vytvoří api/storage/app/installed.json a v .env se nastaví APP_INSTALLED=true. Instalační endpointy jsou poté nedostupné.

Spuštění (vývoj)

Chyba ECONNREFUSED / ETIMEDOUT u /api/... znamená problém s Laravel API na portu 8000.
Viz docs/INSTALACE.md — lokální vývoj proti produkční DB, řešení problémů.

npm install    # jednorázově
.\scripts\dev-setup.ps1   # kontrola .env + DB (Windows)
npm run dev    # počká na API (/up), pak spustí Vite

Produkční DB lokálně: api/.env.local.exampleapi/.env, APP_INSTALLED=true, Mailpit pro e-maily.

1. Infrastruktura

docker compose up -d

2. API (Laravel)

cd api
cp .env.example .env   # nebo použijte existující .env
php artisan key:generate
php artisan migrate --seed
php artisan serve

API běží na http://localhost:8000
Dokumentace OpenAPI: http://localhost:8000/docs/api

3. Frontend (React)

cd web
npm install
npm run dev

Frontend běží na http://localhost:5173

Výchozí účty (po seed)

Login Heslo Role
admin password Administrátor
herec password Herec

Import z legacy DB

Schéma původní databáze: legacy/old_schema.sql
Data k migraci: legacy/data.sql

Legacy tabulka Nový model / tabulka Poznámky
uzivatele users MD5 heslo → legacy_password_md5, re-hash při loginu
hry plays včetně sloupce token
role roles včetně sloupce token
alternace alternations včetně sloupce token
predstaveni performances autor, spojeno, typ, koncept, status
predstaveni_sign invitations choosenis_chosen
send_pending pending_invitations send (int) → is_sent (bool)
send_queue notification_queues send (int) → is_sent, datesent_at
vyplaty_tarify payment_rates vedouciis_leader, částky z textu
log audit_logs ukon, kdo, komu, modul, target
heslo_token password_reset_tokens včetně e-mailu

Jednorázová migrace ze SQL dumpu (doporučeno)

Dump se načte do dočasné databáze na stejném MySQL serveru jako cílová aplikace, data se přemapují do nového schématu a dočasná DB se smaže.

cd api
php artisan migrate --force
php artisan legacy:import --fresh
php artisan legacy:validate

Volitelné parametry:

php artisan legacy:import --table=users          # jen jedna tabulka
php artisan legacy:import --file=../legacy/data.sql
php artisan legacy:import --keep-temp-db         # ponechat dočasnou legacy DB pro ladění

Import z běžící legacy databáze

Alternativa, pokud máte přístup k původní databázi přes síť:

# Nastavte LEGACY_DB_* v .env
php artisan legacy:import --from-db
php artisan legacy:validate --from-db
php artisan legacy:cleanup          # po migraci: smaže legacy tabulky ze sdílené DB

Plánované úlohy (cron)

php artisan schedule:work
# nebo
php artisan iferman:process-notifications
php artisan iferman:send-reminders

API endpointy

Base URL: /api/v1

  • Auth: login, logout, me, password reset, invitation token login
  • Performances: CRUD termínů, feasibility
  • Invitations: RSVP, potvrzení obsazení, fronta pozvánek
  • Plays: repertoár, role, alternace
  • Users: správa herců, impersonace, upomínky
  • Payments: honoráře, fakturace
  • Calendar: FullCalendar events, iCal export
  • Notifications: log, tracking pixel

Paralelní nasazení

  • Legacy: https://kulturniportal.iferman.cz/
  • Nový systém: doporučeno https://app.iferman.cz/
  • Reverse proxy: /api/* → Laravel, /* → React SPA