agentics_persistence/repositories/
leaderboard.rs1use 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}