systemprompt_api/repository/
gateway.rs1use std::sync::Arc;
8
9use systemprompt_ai::repository::{
10 AiGatewayPolicyRepository, AiQuotaBucketRepository, AiRequestPayloadRepository,
11 AiRequestRepository, AiSafetyFindingRepository, AiThoughtSignatureRepository,
12};
13use systemprompt_database::DbPool;
14use systemprompt_traits::DynContextMaterializer;
15
16use crate::services::gateway::signature_cache::{TTL, ThoughtSignatureCache};
17
18#[derive(Clone)]
19pub struct GatewayRepositories {
20 pub quota_buckets: AiQuotaBucketRepository,
21 pub requests: Arc<AiRequestRepository>,
22 pub payloads: Arc<AiRequestPayloadRepository>,
23 pub safety_findings: AiSafetyFindingRepository,
24 pub gateway_policies: AiGatewayPolicyRepository,
25 pub thought_signatures: Arc<ThoughtSignatureCache>,
26 pub context_materializer: DynContextMaterializer,
27}
28
29impl std::fmt::Debug for GatewayRepositories {
30 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
31 f.debug_struct("GatewayRepositories")
32 .finish_non_exhaustive()
33 }
34}
35
36impl GatewayRepositories {
37 pub fn new(
38 db: &DbPool,
39 context_materializer: DynContextMaterializer,
40 ) -> Result<Self, systemprompt_ai::error::RepositoryError> {
41 Ok(Self {
42 quota_buckets: AiQuotaBucketRepository::new(db)?,
43 requests: Arc::new(AiRequestRepository::new(db)?),
44 payloads: Arc::new(AiRequestPayloadRepository::new(db)?),
45 safety_findings: AiSafetyFindingRepository::new(db)?,
46 gateway_policies: AiGatewayPolicyRepository::new(db)?,
47 thought_signatures: Arc::new(ThoughtSignatureCache::new(
48 TTL,
49 Arc::new(AiThoughtSignatureRepository::new(db)?),
50 )),
51 context_materializer,
52 })
53 }
54}