Skip to main content

relay_knowledge/application/code_repository/repository_set/
lifecycle.rs

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