Files
adsPRO/docs/memory.md
Jacek Pyziak 38082c5bac feat: Implement campaign synchronization feature with dropdown UI
- 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.
2026-02-19 12:33:14 +01:00

3.2 KiB

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