Files
jachty.pkmp.com.pl/CLAUDE.md
2026-05-06 00:18:37 +02:00

65 lines
2.2 KiB
Markdown

# Projektowe zasady dla jachty3.pagedev.pl
## Stack
- **Język:** PHP 7.4+
- **CMS:** WordPress 6.x
- **Page Builder:** Elementor Pro
- **Frontend:** FullCalendar.js v6 (CDN), jQuery
- **Baza danych:** MySQL — WordPress CPT + custom tabela `wp_yacht_availability`
- **Integracja:** Google Calendar API v3 (OAuth 2.0, natywna implementacja)
- **Deployment:** FTP via ftp-kr (VS Code extension)
## Główny plugin
`wp-content/plugins/yacht-booking-system/` — namespace `YachtBooking\`
## Zasady kodu PHP
- WordPress Coding Standards (nie PSR-12)
- Nazewnictwo: PascalCase dla klas, snake_case dla metod i zmiennych
- Singleton pattern dla głównych klas
- Security: nonce verification + sanitize + escape na wyjściu
- Każda operacja DB przez `$wpdb->prepare()` — bez surowych zapytań SQL
## Baza danych
- Custom tabela: `wp_yacht_availability` (yacht_id, date, status, booking_id)
- CPT: `yacht` (meta: capacity, price_per_day, gcal_id, features)
- CPT: `yacht_booking` (meta: yacht_id, start_date, end_date, status, customer_*, total_price, gcal_event_id)
- Schemat dokumentowany w `.paul/codebase/db_schema.md`
- Zmiany schematu przez klasę `Installer` (incremental upgrades)
## REST API
Namespace: `/wp-json/yacht-booking/v1/`
- `GET /yachts`, `GET /yachts/{id}` — publiczne
- `GET /availability/{yacht_id}` — publiczne
- `POST /bookings` — publiczne (wymaga X-WP-Nonce)
- `GET /bookings`, `PUT /bookings/{id}/status` — admin only
## Testy
- Brak automatycznych testów — testy manualne przez pliki `test-*.php` w root projektu
- Po każdej zmianie weryfikuj: `php -l <plik>` (syntax check)
## Deployment
1. Edytuj pliki lokalnie w VS Code
2. Deploy przez FTP (ftp-kr) — automatyczny przy zapisie lub ręczny
3. Konfiguracja FTP: `.vscode/ftp-kr.json`
## Frontend
- Elementor widget: `frontend/class-calendar-widget.php`
- Shortcode: `[yacht_calendar yacht_id="X"]`
- JavaScript: IIFE pattern `(function($) {...})(jQuery)`
- CSS: mobile-first, BEM-like nazewnictwo klas
- Nie używaj npm/webpack — zasoby statyczne lub CDN
## Wdrażanie zmian Google Calendar
- OAuth tokens w `wp_options` (klucze: `yacht_booking_*`)
- Auto-refresh tokenów w `class-oauth-handler.php`
- Sync: `class-sync-controller.php` (hooks + cron)