Skip to main content

relay_knowledge/application/code_repository/repository_set/lifecycle/
mod.rs

1//! Coordinates repository-set removal and member cleanup.
2
3use crate::{
4    api::{ApiMetadata, CodeRepositorySetRemoveResponse, RequestContext},
5    domain::CodeRepositorySetRemoveMemberRequest,
6};
7
8use super::{errors::storage_api_error, status::required_set_status};
9use crate::application::service::RelayKnowledgeService;
10
11impl RelayKnowledgeService {
12    /// Removes one member snapshot from a repository set and releases its retention pin.
13    pub async fn remove_code_repository_set_member(
14        &self,
15        request: CodeRepositorySetRemoveMemberRequest,
16        context: RequestContext,
17    ) -> Result<CodeRepositorySetRemoveResponse, crate::api::ApiError> {
18        let store = self.store().await.map_err(storage_api_error)?;
19        let member = store
20            .remove_code_repository_set_member(
21                request.set_alias.clone(),
22                request.repository_alias.clone(),
23            )
24            .await
25            .map_err(storage_api_error)?;
26        let status = required_set_status(&store, &request.set_alias).await?;
27        let graph_version = store
28            .current_graph_version()
29            .await
30            .map_err(storage_api_error)?;
31
32        Ok(CodeRepositorySetRemoveResponse {
33            metadata: ApiMetadata::graph_only(&context, graph_version),
34            request,
35            member,
36            status,
37        })
38    }
39}