- 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.
3.2 KiB
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 wschema_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_termsi 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 wproducts_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
/clientsroznia sie miedzy klientami. cron_productsiteruje po datach per klient (dates_per_runz parametruclients_per_run), domyslnie10(max100); fazaaggregate_30wywolujerebuild_products_tempRAZ per klientcron_campaignsiteruje po datach per klient (dates_per_runz parametruclients_per_run), domyslnie2(max20)- 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 wsettings(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 przezensure_sync_rowsw nastepnym cyklu CRON) - Nowy klient/usuniety klient obslugiwany naturalnie:
ensure_sync_rowsdodaje brakujace, JOIN zclientspomija 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