diff --git a/internal/growthreport/repository.go b/internal/growthreport/repository.go index fd15140..b135b5d 100644 --- a/internal/growthreport/repository.go +++ b/internal/growthreport/repository.go @@ -204,7 +204,8 @@ func scanRecord(row rowScanner) (Record, error) { var evidence []byte var ai []byte var terminalSource *string - err := row.Scan(&r.ReportID, &r.Revision, &r.MerchantID, &r.TerminalDBID, &terminalSource, &r.Fingerprint, &status, &r.HorizonDays, &r.ForecastStartDate, &r.DatasetWatermark, &r.CatalogVersion, &r.AnalyticsVersion, &r.PromptVersion, &r.SchemaVersion, &r.Model, &evidence, &ai, &r.FailureCode, &r.Usage.InputTokens, &r.Usage.OutputTokens, &r.Usage.LatencyMS, &r.Usage.ProviderRequestID, &r.Usage.EstimatedCost, &r.ManualRefresh, &r.TehranRefreshDay, &r.CreatedAt, &r.UpdatedAt) + var providerRequestID, estimatedCost *string + err := row.Scan(&r.ReportID, &r.Revision, &r.MerchantID, &r.TerminalDBID, &terminalSource, &r.Fingerprint, &status, &r.HorizonDays, &r.ForecastStartDate, &r.DatasetWatermark, &r.CatalogVersion, &r.AnalyticsVersion, &r.PromptVersion, &r.SchemaVersion, &r.Model, &evidence, &ai, &r.FailureCode, &r.Usage.InputTokens, &r.Usage.OutputTokens, &r.Usage.LatencyMS, &providerRequestID, &estimatedCost, &r.ManualRefresh, &r.TehranRefreshDay, &r.CreatedAt, &r.UpdatedAt) if errors.Is(err, pgx.ErrNoRows) { return Record{}, ErrNotFound } @@ -212,6 +213,12 @@ func scanRecord(row rowScanner) (Record, error) { return Record{}, fmt.Errorf("scanning growth report: %w", err) } r.Status = Status(status) + if providerRequestID != nil { + r.Usage.ProviderRequestID = *providerRequestID + } + if estimatedCost != nil { + r.Usage.EstimatedCost = *estimatedCost + } if terminalSource != nil { r.Scope.TerminalID = terminalSource } diff --git a/migrations/000002_growth_analyst.sql b/migrations/000002_growth_analyst.sql index 813691d..6ea5c94 100644 --- a/migrations/000002_growth_analyst.sql +++ b/migrations/000002_growth_analyst.sql @@ -29,6 +29,12 @@ CREATE TABLE IF NOT EXISTS growth_reports ( completed_at timestamptz ); -- statement-break +ALTER TABLE growth_reports ADD COLUMN IF NOT EXISTS provider_request_id text; +-- statement-break +ALTER TABLE growth_reports ADD COLUMN IF NOT EXISTS estimated_cost text; +-- statement-break +ALTER TABLE growth_reports ALTER COLUMN deterministic_evidence DROP NOT NULL; +-- statement-break CREATE UNIQUE INDEX IF NOT EXISTS growth_reports_current_fingerprint_idx ON growth_reports (merchant_id, fingerprint) WHERE manual_refresh = false AND status IN ('QUEUED','ANALYZING','GENERATING','READY','PARTIAL');