Skip to main content

systemprompt_api/repository/
gateway.rs

1//! AI-domain repositories owned by the gateway, constructed once at router
2//! build and threaded through dispatch.
3//!
4//! Copyright (c) systemprompt.io — Business Source License 1.1.
5//! See <https://systemprompt.io> for licensing details.
6
7use std::sync::Arc;
8
9use systemprompt_ai::repository::{
10    AiGatewayPolicyRepository, AiQuotaBucketRepository, AiRequestPayloadRepository,
11    AiRequestRepository, AiSafetyFindingRepository,
12};
13use systemprompt_database::DbPool;
14use systemprompt_traits::DynContextMaterializer;
15
16#[derive(Clone)]
17pub struct GatewayRepositories {
18    pub quota_buckets: AiQuotaBucketRepository,
19    pub requests: Arc<AiRequestRepository>,
20    pub payloads: Arc<AiRequestPayloadRepository>,
21    pub safety_findings: AiSafetyFindingRepository,
22    pub gateway_policies: AiGatewayPolicyRepository,
23    pub context_materializer: DynContextMaterializer,
24}
25
26impl std::fmt::Debug for GatewayRepositories {
27    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
28        f.debug_struct("GatewayRepositories")
29            .finish_non_exhaustive()
30    }
31}
32
33impl GatewayRepositories {
34    pub fn new(
35        db: &DbPool,
36        context_materializer: DynContextMaterializer,
37    ) -> Result<Self, systemprompt_ai::error::RepositoryError> {
38        Ok(Self {
39            quota_buckets: AiQuotaBucketRepository::new(db)?,
40            requests: Arc::new(AiRequestRepository::new(db)?),
41            payloads: Arc::new(AiRequestPayloadRepository::new(db)?),
42            safety_findings: AiSafetyFindingRepository::new(db)?,
43            gateway_policies: AiGatewayPolicyRepository::new(db)?,
44            context_materializer,
45        })
46    }
47}