koprogo_api/application/ports/
security_incident_repository.rs

1use crate::domain::entities::SecurityIncident;
2use async_trait::async_trait;
3use uuid::Uuid;
4
5/// Filtres pour la liste des incidents
6pub struct SecurityIncidentFilters {
7    pub severity: Option<String>,
8    pub status: Option<String>,
9    pub page: i64,
10    pub per_page: i64,
11}
12
13/// Port (interface) pour le repository des incidents de sécurité (GDPR Art. 33)
14#[async_trait]
15pub trait SecurityIncidentRepository: Send + Sync {
16    async fn create(&self, incident: &SecurityIncident) -> Result<SecurityIncident, String>;
17
18    async fn find_by_id(
19        &self,
20        id: Uuid,
21        organization_id: Option<Uuid>,
22    ) -> Result<Option<SecurityIncident>, String>;
23
24    async fn find_all(
25        &self,
26        organization_id: Option<Uuid>,
27        filters: SecurityIncidentFilters,
28    ) -> Result<(Vec<SecurityIncident>, i64), String>;
29
30    async fn report_to_apd(
31        &self,
32        id: Uuid,
33        organization_id: Option<Uuid>,
34        apd_reference_number: String,
35        investigation_notes: Option<String>,
36    ) -> Result<Option<SecurityIncident>, String>;
37
38    async fn find_overdue(
39        &self,
40        organization_id: Option<Uuid>,
41    ) -> Result<Vec<SecurityIncident>, String>;
42}