// Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.31.1 // source: recommendation_metrics.sql package dbq import ( "context" "github.com/jackc/pgx/v5/pgtype" ) const recommendationSourceMetricsForUser = `-- name: RecommendationSourceMetricsForUser :many SELECT pe.source, count(*)::bigint AS plays, count(*) FILTER (WHERE pe.was_skipped)::bigint AS skips, COALESCE( avg(pe.completion_ratio) FILTER (WHERE pe.completion_ratio IS NOT NULL), 0)::float8 AS avg_completion FROM play_events pe WHERE pe.user_id = $1 AND pe.source IS NOT NULL AND pe.started_at > now() - ($2::float8 * INTERVAL '1 day') GROUP BY pe.source ORDER BY plays DESC ` type RecommendationSourceMetricsForUserParams struct { UserID pgtype.UUID Column2 float64 } type RecommendationSourceMetricsForUserRow struct { Source *string Plays int64 Skips int64 AvgCompletion float64 } // Recommendation observability (#796 phase 4). Per-source play outcomes so the // operator can see whether each recommendation surface is landing and tune the // taste weights. Source is stamped on play_events when a play is launched from // a system-playlist surface ('for_you' | 'discover' | the discovery mixes); // NULL for library / radio / user-playlist plays, which are excluded here. // $1 user_id, $2 window_days. plays/skips are counts; avg_completion is the // mean completion ratio over plays that recorded one (0 when none did). func (q *Queries) RecommendationSourceMetricsForUser(ctx context.Context, arg RecommendationSourceMetricsForUserParams) ([]RecommendationSourceMetricsForUserRow, error) { rows, err := q.db.Query(ctx, recommendationSourceMetricsForUser, arg.UserID, arg.Column2) if err != nil { return nil, err } defer rows.Close() var items []RecommendationSourceMetricsForUserRow for rows.Next() { var i RecommendationSourceMetricsForUserRow if err := rows.Scan( &i.Source, &i.Plays, &i.Skips, &i.AvgCompletion, ); err != nil { return nil, err } items = append(items, i) } if err := rows.Err(); err != nil { return nil, err } return items, nil }