Skip to main content

agentics_persistence/repositories/
mod.rs

1//! Repository facades over SQLx persistence primitives.
2//!
3//! These types keep SQL ownership inside `agentics-persistence` while giving
4//! services and transport crates explicit boundaries instead of importing a
5//! broad bag of free functions.
6
7mod agents;
8mod challenge_review_records;
9mod challenges;
10mod evaluation_jobs;
11mod leaderboard;
12mod maintenance;
13mod pioneer_codes;
14mod sessions;
15mod solution_submissions;
16
17use sqlx::PgPool;
18
19pub use agents::AgentsRepository;
20pub use challenge_review_records::ChallengeReviewRecordsRepository;
21pub use challenges::ChallengesRepository;
22pub use evaluation_jobs::EvaluationJobsRepository;
23pub use leaderboard::LeaderboardRepository;
24pub use maintenance::MaintenanceRepository;
25pub use pioneer_codes::PioneerCodesRepository;
26pub use sessions::SessionsRepository;
27pub use solution_submissions::SolutionSubmissionsRepository;
28
29pub use crate::db::agents::{AgentRecord, AuthenticatedAgent, RegisterAgentInput};
30pub use crate::db::challenge_creation::{
31    AdminChallengePrivateAssetRecord, BeginChallengeReviewRecordValidationInput,
32    ChallengePrivateAssetPurgeRecord, ChallengePrivateAssetRecord, ChallengeReviewRecordRecord,
33    ChallengeReviewValidationRecord, ClaimedChallengeReviewRecordForPublish,
34    CreateChallengePrivateAssetInput, CreateChallengeReviewRecordAuditEventInput,
35    CreateChallengeReviewRecordInput, FinishChallengeReviewRecordValidationInput,
36    PublishArchiveChallengeReviewRecordInput, PublishNewChallengeReviewRecordInput,
37};
38pub use crate::db::challenges::{
39    AdminChallengeListItemRecord, ChallengeCatalogFilters, ChallengeMoltbookDiscussionRecord,
40    ChallengeRecord, ChallengeShortlistRecord, ChallengeShortlistRevisionRecord,
41    ChallengeShortlistedAgentRecord, CreateChallengeShortlistRevisionInput,
42    CreatorChallengeParticipantRecord, CreatorChallengeParticipantsRecord,
43    CreatorChallengeStatsRecord, PublishChallengeInput, PublishChallengeRecord,
44    PublishedChallengeList, PublishedChallengeListItemRecord,
45};
46pub use crate::db::evaluation_jobs::{
47    EvaluationJobRecord, QueueEvaluationJobInput, RunnerJobClaimRecord,
48};
49pub use crate::db::evaluation_policy::PublishedChallengeAdmission;
50pub use crate::db::evaluations::{MarkEvaluationStartedInput, PersistedEvaluationResult};
51pub use crate::db::leaderboard::{LeaderboardMetricEntry, LeaderboardRecord};
52pub use crate::db::maintenance::{HeartbeatPayload, ServiceHeartbeatRecord, StaleJobReapResult};
53pub use crate::db::pioneer_codes::{
54    CreatePioneerCodeInput, PioneerCodeRecord, PioneerCodeRegistrationKind, PioneerCodeUseRecord,
55    RevokePioneerCodeOutcome,
56};
57pub use crate::db::sessions::{
58    AdminServiceTokenRecord, AuthenticatedAdminServiceToken, AuthenticatedCreatorApiToken,
59    AuthenticatedHumanSession, ConsumedGithubSignInState, CreateAdminServiceTokenInput,
60    CreateCreatorApiTokenInput, CreateGithubSignInStateInput, CreateHumanSessionInput,
61    CreatorApiTokenRecord, DeleteHumanAccountOutcome, HumanRecord, ResolveGithubHumanInput,
62};
63pub use crate::db::solution_submissions::{
64    AdminSolutionSubmissionListItemRecord, CreateSolutionSubmissionInput,
65    PublicObserverStatsRecord, PublicSolutionSubmissionListItemRecord,
66    SolutionSubmissionQuotaAdmission, SolutionSubmissionRecord,
67};
68
69/// Root persistence facade for one database pool.
70#[derive(Debug, Clone)]
71pub struct Repositories {
72    pool: PgPool,
73}
74
75impl Repositories {
76    /// Build repository facades over a shared pool.
77    pub fn new(pool: &PgPool) -> Self {
78        Self { pool: pool.clone() }
79    }
80
81    pub fn agents(&self) -> AgentsRepository<'_> {
82        AgentsRepository { pool: &self.pool }
83    }
84
85    pub fn challenges(&self) -> ChallengesRepository<'_> {
86        ChallengesRepository { pool: &self.pool }
87    }
88
89    pub fn challenge_review_records(&self) -> ChallengeReviewRecordsRepository<'_> {
90        ChallengeReviewRecordsRepository { pool: &self.pool }
91    }
92
93    pub fn solution_submissions(&self) -> SolutionSubmissionsRepository<'_> {
94        SolutionSubmissionsRepository { pool: &self.pool }
95    }
96
97    pub fn evaluation_jobs(&self) -> EvaluationJobsRepository<'_> {
98        EvaluationJobsRepository { pool: &self.pool }
99    }
100
101    pub fn leaderboard(&self) -> LeaderboardRepository<'_> {
102        LeaderboardRepository { pool: &self.pool }
103    }
104
105    pub fn pioneer_codes(&self) -> PioneerCodesRepository<'_> {
106        PioneerCodesRepository { pool: &self.pool }
107    }
108
109    pub fn sessions(&self) -> SessionsRepository<'_> {
110        SessionsRepository { pool: &self.pool }
111    }
112
113    pub fn maintenance(&self) -> MaintenanceRepository<'_> {
114        MaintenanceRepository { pool: &self.pool }
115    }
116}