- Updated SCSS styles for new campaign sync buttons and dropdowns. - Refactored main_view.php to replace the single select for campaigns with a multi-select dropdown. - Added JavaScript functions to handle dropdown interactions and sync status updates. - Introduced sync status bars for clients in main_view.php. - Created new database migrations for client sync flags and cron sync status tracking.
56 lines
3.2 KiB
Markdown
56 lines
3.2 KiB
Markdown
# adsPRO - Pamiec projektu
|
|
|
|
Ten plik sluzy jako trwala pamiec dla Claude Code. Zapisuj tu wzorce, decyzje i ustalenia potwierdzone w trakcie pracy nad projektem.
|
|
|
|
## Architektura
|
|
|
|
- Custom MVC: Controllers (`\controls`) -> Factories (`\factory`) -> Medoo ORM (`$mdb`)
|
|
- Autoload PSR-0: `\controls\Foo` -> `autoload/controls/class.Foo.php`
|
|
- Routing w `index.php`: URL `/module/action/` -> `\controls\Module::action()`
|
|
- Szablony w `templates/`, zmienne przez `$this->varName`
|
|
- Serwisy API: `\services\GoogleAdsApi`, `\services\ClaudeApi`, `\services\OpenAiApi`
|
|
|
|
## Styl kodu
|
|
|
|
- Spacje w nawiasach: `if ( $x )`, `function( $a, $b )`
|
|
- Klamry w nowej linii
|
|
- Wszystkie metody kontrolerow i fabryk: `static public function`
|
|
- Endpointy JSON: `echo json_encode([...]); exit;`
|
|
- Commity po polsku z prefixem: `feat:`, `fix:`, `update:`
|
|
|
|
## Frontend
|
|
|
|
- jQuery 3.6, DataTables 2.1, Bootstrap 4, Select2 4.1, Highcharts
|
|
- jquery-confirm do modali/dialogow
|
|
- Font Awesome 6.5 do ikon
|
|
- SASS: `layout/style.scss` -> auto-kompilacja przez Live Sass Compiler
|
|
|
|
## Deployment
|
|
|
|
- FTP auto-upload przez VS Code FTP-Kr
|
|
- Brak kroku budowania - pliki laduja bezposrednio na serwer
|
|
- Migracje: `php install.php` (idempotentne, sledzenie w `schema_migrations`)
|
|
|
|
## Decyzje projektowe
|
|
|
|
- Frazy wyszukiwane dodane do wykluczonych oznaczane czerwonym kolorem (klasa CSS `term-is-negative`)
|
|
- Negatywne slowa kluczowe dodawane przez Google Ads API i zapisywane lokalnie w `campaign_negative_keywords`
|
|
- Klucze API przechowywane w tabeli `settings` (key-value)
|
|
- Frazy z Google Ads Keyword Planner dla URL produktu sa cachowane w `products_keyword_planner_terms` i ponownie uzywane przy generowaniu tytulu AI
|
|
- Zmiany produktowe (`title`, `description`, `google_product_category`, `custom_label_4`) sa synchronizowane bezposrednio do Merchant API i logowane per pole w `products_merchant_sync_log`
|
|
- CRON dziala w trybie **klient po kliencie** (client-first): konczy WSZYSTKIE daty jednego klienta, potem przechodzi do nastepnego. Dzieki temu paski postepu na `/clients` roznia sie miedzy klientami.
|
|
- `cron_products` iteruje po datach per klient (`dates_per_run` z parametru `clients_per_run`), domyslnie `10` (max `100`); faza `aggregate_30` wywoluje `rebuild_products_temp` RAZ per klient
|
|
- `cron_campaigns` iteruje po datach per klient (`dates_per_run` z parametru `clients_per_run`), domyslnie `2` (max `20`)
|
|
- Helpery: `get_active_client($pipeline)` -> pierwszy klient z niezakonczona praca; `get_pending_dates_for_client()` -> daty do przetworzenia; `determine_client_products_phase()` -> faza per klient
|
|
- Stan CRON przechowywany w tabeli `cron_sync_status` (wiersz = klient + pipeline + data + phase), zamiast JSON w `settings` (migracja 012)
|
|
- Fazy produktow w `cron_sync_status`: pending -> fetch -> aggregate_30 -> done; kampanie: pending -> done
|
|
- Force sync klienta = DELETE z `cron_sync_status` (wiersze odtwarzane przez `ensure_sync_rows` w nastepnym cyklu CRON)
|
|
- Nowy klient/usuniety klient obslugiwany naturalnie: `ensure_sync_rows` dodaje brakujace, JOIN z `clients` pomija usunietych
|
|
- `cleanup_old_sync_rows(30)` czysci zakonczone wiersze starsze niz 30 dni i wiersze usunietych klientow
|
|
|
|
## Preferencje uzytkownika
|
|
|
|
- Komunikacja po polsku
|
|
- Zwiezle commity po polsku
|
|
- Git push tylko na wyrazna prosbe
|