agentics-persistence 0.3.0

Database persistence layer for the Agentics challenge platform.
Documentation
use sqlx::PgPool;

use crate::db;
use crate::repositories::{LeaderboardMetricEntry, LeaderboardRecord};
use agentics_domain::models::challenge::ChallengeBundleSpec;
use agentics_domain::models::names::ChallengeName;
use agentics_domain::models::names::TargetName;
use agentics_error::Result;

#[derive(Debug, Clone, Copy)]
pub struct LeaderboardRepository<'a> {
    pub(super) pool: &'a PgPool,
}

impl LeaderboardRepository<'_> {
    pub async fn list_entries(
        &self,
        challenge_name: &ChallengeName,
        target: &TargetName,
        limit: i64,
        spec: &ChallengeBundleSpec,
    ) -> Result<Vec<LeaderboardRecord>> {
        db::leaderboard::list_leaderboard_entries(self.pool, challenge_name, target, limit, spec)
            .await
    }

    pub async fn list_entries_with_metric_payloads(
        &self,
        challenge_name: &ChallengeName,
        target: &TargetName,
        limit: i64,
        spec: &ChallengeBundleSpec,
    ) -> Result<Vec<LeaderboardMetricEntry>> {
        db::leaderboard::list_leaderboard_entries_with_metric_payloads(
            self.pool,
            challenge_name,
            target,
            limit,
            spec,
        )
        .await
    }
}