# Historia cen — dokumentacja

## Cron dzienny: zapisywanie historii cen

### Co robi

Raz na dobę WP Cron uruchamia zadanie `apartamenty_record_prices`, które:

1. Pobiera wszystkie opublikowane posty typu `apartamenty`
2. Odczytuje aktualne ceny z pól ACF:
   - `information_price` — cena brutto (np. `"677 920"`)
   - `information_price_m2` — cena za m² (np. `"19 000"`)
   - `information_floor_space` — metraż (np. `"35,68"`)
3. Zapisuje jeden rekord dziennie do tabeli `wp_price_history`
4. Używa `INSERT IGNORE` — jeśli rekord dla danego apartamentu i daty już istnieje, pomija (bez duplikatów)

### Tabela bazy danych

**Nazwa:** `wp_price_history`

| Kolumna | Typ | Opis |
|---------|-----|------|
| `id` | BIGINT UNSIGNED AUTO_INCREMENT | Klucz główny |
| `post_id` | BIGINT UNSIGNED | ID posta apartamentu |
| `price` | VARCHAR(50) | Cena brutto jako string, np. `"677 920"` |
| `price_m2` | VARCHAR(50) | Cena za m² jako string, np. `"19 000"` |
| `floor_space` | VARCHAR(50) | Metraż jako string, np. `"35,68"` |
| `recorded_at` | DATE | Data zapisu, np. `"2026-03-12"` |

Unikalny klucz: `(post_id, recorded_at)` — jeden wpis na apartament na dzień.

### Harmonogram

- **Częstotliwość:** raz dziennie (`daily`)
- **Hook WP Cron:** `apartamenty_record_prices`
- **Rejestracja:** przy każdym żądaniu strony (`wp` action), jeśli zadanie nie jest jeszcze zaplanowane

### Kod źródłowy

Plik: `wp-content/plugins/elementor-addon/elementor-addon.php`

- `elementor_addon_schedule_cron()` — rejestruje zadanie w WP Cron
- `elementor_addon_record_prices()` — wykonuje zapis cen

### Ważne: WP Cron wymaga ruchu na stronie

WP Cron nie jest prawdziwym cronem systemowym — uruchamia się przy odwiedzeniu strony przez użytkownika. Jeśli strona ma mały ruch, zadanie może się nie wykonać o dokładnej porze.

**Rozwiązanie: prawdziwy cron systemowy (zalecane na produkcji)**

Wyłącz WP Cron w `wp-config.php`:

```php
define( 'DISABLE_WP_CRON', true );
```

Dodaj zadanie w cPanel → Cron Jobs (lub przez SSH):

```
0 6 * * * wget -q -O /dev/null "https://wyszynskiego12.pagedev.pl/wp-cron.php?doing_wp_cron" >/dev/null 2>&1
```

lub z curl:

```
0 6 * * * curl -s "https://wyszynskiego12.pagedev.pl/wp-cron.php?doing_wp_cron" > /dev/null 2>&1
```

Powyższe uruchamia cron codziennie o 6:00.

### Ręczne uruchomienie (debugowanie)

Aby wymusić zapis raz ręcznie bez czekania na cron, wklej w przeglądarce (zalogowany jako admin):

```
https://wyszynskiego12.pagedev.pl/wp-cron.php?doing_wp_cron
```

Lub przez WP-CLI (SSH):

```bash
wp cron event run apartamenty_record_prices
```

### Sprawdzenie następnego uruchomienia (WP-CLI)

```bash
wp cron event list
```

### Weryfikacja zapisanych danych (SQL)

```sql
SELECT * FROM wp_price_history ORDER BY recorded_at DESC LIMIT 20;
```

Liczba rekordów per apartament:

```sql
SELECT post_id, COUNT(*) as wpisy, MIN(recorded_at) as od, MAX(recorded_at) as do
FROM wp_price_history
GROUP BY post_id;
```
