Implementation Plan - Phase 1: Views and Downloads Tracking (Dataset Page)

Implement daily tracking of dataset views (from Google Analytics) and downloads (first-party), and display total counts on dataset pages.

Proposed Changes

Database

[MODIFY] schema.prisma

  • Add the SiteStat model for daily aggregate tracking:
model SiteStat {
  id            String   @id @default(cuid())
  siteId        String
  date          DateTime
  views         Int      @default(0)
  downloads     Int      @default(0)
  site          Site     @relation(fields: [siteId], references: [id], onDelete: Cascade)

  @@unique([siteId, date])
  @@index([siteId])
  @@index([date])
}

Tracking Logic

[MODIFY] route.tsx

  • Add upsert logic to increment downloads in SiteStat for the current date whenever a file is requested.

[NEW] ga.ts

  • Utility to fetch page view data from GA4 Reporting API.

[MODIFY] functions.ts

  • Add Inngest function syncGAStats (cron) to fetch previous day's views and update SiteStat.

Frontend (Dataset Page Only)

[MODIFY] datapackage.tsx

  • Aggregate views and downloads from SiteStat for the given site and display them in the header area.

Verification Plan

Automated Tests

  • e2e/api.spec.ts: Verify SiteStat increment on download.

Manual Verification

  • Check dataset page for aggregated view/download counts.