Skip to main content

agentics_persistence/repositories/
leaderboard.rs

1use sqlx::PgPool;
2
3use crate::db;
4use crate::repositories::{LeaderboardMetricEntry, LeaderboardRecord};
5use agentics_domain::models::challenge::ChallengeBundleSpec;
6use agentics_domain::models::names::ChallengeName;
7use agentics_domain::models::names::TargetName;
8use agentics_error::Result;
9
10#[derive(Debug, Clone, Copy)]
11pub struct LeaderboardRepository<'a> {
12    pub(super) pool: &'a PgPool,
13}
14
15impl LeaderboardRepository<'_> {
16    pub async fn list_entries(
17        &self,
18        challenge_name: &ChallengeName,
19        target: &TargetName,
20        limit: i64,
21        spec: &ChallengeBundleSpec,
22    ) -> Result<Vec<LeaderboardRecord>> {
23        db::leaderboard::list_leaderboard_entries(self.pool, challenge_name, target, limit, spec)
24            .await
25    }
26
27    pub async fn list_entries_with_metric_payloads(
28        &self,
29        challenge_name: &ChallengeName,
30        target: &TargetName,
31        limit: i64,
32        spec: &ChallengeBundleSpec,
33    ) -> Result<Vec<LeaderboardMetricEntry>> {
34        db::leaderboard::list_leaderboard_entries_with_metric_payloads(
35            self.pool,
36            challenge_name,
37            target,
38            limit,
39            spec,
40        )
41        .await
42    }
43}