mirror of
https://github.com/Dvorinka/Bookra.git
synced 2026-10-29 07:54:44 +00:00
feat(metrics): new-clients KPI and scheduled reminder dispatch
The dashboard promised a new-clients card the API never produced; the metric now counts distinct customer emails whose earliest-ever booking lands in the window, joining the other four KPIs with the same trend comparison. The card grid rebalances for five items. Reminder dispatch also had no trigger — the endpoint existed but nothing called it. A scheduled GitHub Actions workflow now posts to it every 15 minutes using the job-runner key, so reminders actually fire once the two secrets are configured. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
cdad7875e1
commit
c7172544b8
8 files changed
+93
-20
No files matched your search
@@ -181,7 +181,16 @@ func (r *PGRepository) GetDashboardMetrics(ctx context.Context, tenantID string,
|
||||
),
|
||||
0
|
||||
)::integer AS utilization_percent,
|
||||
COUNT(*) FILTER (WHERE starts_at >= $2 AND starts_at < $3 AND status = 'confirmed' AND ends_at < now()) AS completed_count
|
||||
COUNT(*) FILTER (WHERE starts_at >= $2 AND starts_at < $3 AND status = 'confirmed' AND ends_at < now()) AS completed_count,
|
||||
COUNT(DISTINCT customer_email) FILTER (
|
||||
WHERE starts_at >= $2 AND starts_at < $3
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM bookings earlier
|
||||
WHERE earlier.tenant_id = bookings.tenant_id
|
||||
AND earlier.customer_email = bookings.customer_email
|
||||
AND earlier.starts_at < $2
|
||||
)
|
||||
) AS new_clients_count
|
||||
FROM bookings
|
||||
WHERE tenant_id = $1
|
||||
`, tenantID, startsAt, endsAt).Scan(
|
||||
@@ -189,6 +198,7 @@ func (r *PGRepository) GetDashboardMetrics(ctx context.Context, tenantID string,
|
||||
&metrics.CancellationsCount,
|
||||
&metrics.UtilizationPercent,
|
||||
&metrics.CompletedCount,
|
||||
&metrics.NewClientsCount,
|
||||
)
|
||||
return metrics, err
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user