Skip to main content

relay_knowledge/application/
code_repository_set_lifecycle.rs

1use crate::{
2    api::{ApiMetadata, CodeRepositorySetRemoveResponse, RequestContext},
3    domain::CodeRepositorySetRemoveMemberRequest,
4};
5
6use super::{
7    RelayKnowledgeService,
8    code_repository_set_service::{required_set_status, storage_api_error},
9};
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}