feat: Enhance user settings with cron URL plan display

- Added a new field to display the cron URL plan in user settings.
- Updated JavaScript to handle the new plan data.

refactor: Unify product model and migrate data

- Migrated product data from `products_data` to `products` table.
- Added new columns to `products` for better data organization.
- Created `products_aggregate` table for storing aggregated product metrics.

chore: Drop deprecated products_data table

- Removed `products_data` table as data is now stored in `products`.

feat: Add merchant URL flags to products

- Introduced flags for tracking merchant URL status in `products` table.
- Normalized product URLs to handle empty or invalid values.

feat: Link campaign alerts to specific products

- Added `product_id` column to `campaign_alerts` table for better tracking.
- Created an index for efficient querying of alerts by product.

chore: Add debug scripts for client data inspection

- Created debug scripts to inspect client data from local and remote databases.
- Included error handling and output formatting for better readability.
This commit is contained in:
2026-02-20 17:50:14 +01:00
parent 0024a25bfb
commit 167ced3573
31 changed files with 5697 additions and 1227 deletions

View File

@@ -1856,6 +1856,44 @@ table {
flex: 1 1 260px;
}
&.filter-group-ad-group {
.ad-group-filter-actions {
display: flex;
gap: 8px;
align-items: center;
.form-control {
flex: 1 1 auto;
min-width: 0;
}
}
#delete-products-ad-group {
min-width: 38px;
height: 38px;
border-radius: 6px;
margin: 0;
background: #dc3545;
border: 1px solid #dc3545;
color: #fff;
cursor: pointer;
&:hover:not(:disabled) {
background: #bb2d3b;
border-color: #bb2d3b;
color: #fff;
}
&:disabled {
opacity: 0.45;
cursor: default;
background: #dc3545;
border-color: #dc3545;
color: #fff;
}
}
}
&.filter-group-roas {
flex: 0 0 200px;
}
@@ -1866,6 +1904,73 @@ table {
}
}
.products-scope-alerts {
margin-bottom: 12px;
border: 1px solid #FECACA;
background: #FEF2F2;
border-radius: 8px;
overflow: hidden;
summary {
cursor: pointer;
list-style: none;
padding: 10px 12px;
font-size: 13px;
font-weight: 600;
color: #991B1B;
display: flex;
align-items: center;
gap: 8px;
&::-webkit-details-marker {
display: none;
}
}
.products-scope-alerts-list {
border-top: 1px solid #FECACA;
background: #FFF;
max-height: 260px;
overflow: auto;
}
.products-scope-alert-item {
padding: 10px 12px;
border-bottom: 1px solid #F1F5F9;
&:last-child {
border-bottom: none;
}
}
.products-scope-alert-meta {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 4px;
font-size: 11px;
color: #64748B;
}
.products-scope-alert-type {
display: inline-flex;
align-items: center;
padding: 2px 6px;
border-radius: 999px;
background: #EEF2FF;
color: #4338CA;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.3px;
}
.products-scope-alert-message {
font-size: 13px;
color: $cTextDark;
line-height: 1.45;
}
}
.products-actions {
margin-bottom: 12px;
@@ -2458,6 +2563,37 @@ table#products {
margin-bottom: 20px;
}
.cron-schedule-list {
margin-bottom: 20px;
}
.cron-schedule-item {
border: 1px solid #DFE7F0;
background: #F4F8FD;
border-radius: 8px;
padding: 9px 12px;
margin-bottom: 8px;
&:last-child {
margin-bottom: 0;
}
strong {
display: block;
color: $cTextDark;
font-size: 13px;
font-weight: 700;
margin-bottom: 2px;
}
small {
display: block;
color: #667788;
font-size: 12px;
line-height: 1.35;
}
}
.cron-progress-item {
margin-bottom: 14px;
@@ -2553,6 +2689,13 @@ table#products {
font-size: 12px;
overflow-x: auto;
}
.cron-url-plan {
display: block;
color: #6C7B8A;
font-size: 11px;
margin-bottom: 6px;
}
}
@media (max-width: 1200px) {