- PHP 79.6%
- TypeScript 7.6%
- HTML 6%
- CSS 3.9%
- Blade 2%
- Other 0.9%
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> |
||
|---|---|---|
| .forgejo/workflows | ||
| api | ||
| deploy | ||
| docs | ||
| legacy | ||
| scripts | ||
| web | ||
| .gitignore | ||
| docker-compose.yml | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
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
- Nahrajte kód, v
api/zkopírujte.env.example→.env - Nastavte oprávnění:
chmod -R 775 api/storage api/bootstrap/cache - Spusťte API (
php artisan servenebo nginx + php-fpm) - Sestavte / naservírujte frontend (
npm run build) - 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.example → api/.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 |
choosen → is_chosen |
send_pending |
pending_invitations |
send (int) → is_sent (bool) |
send_queue |
notification_queues |
send (int) → is_sent, date → sent_at |
vyplaty_tarify |
payment_rates |
vedouci → is_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