/ backend / src / api / container_spec / blobs / delete_blob.rs
delete_blob.rs
 1  use rocket::State;
 2  use sqlx::Pool;
 3  
 4  use crate::api::container_spec::Auth;
 5  use crate::registry_error::RegistryError;
 6  use crate::services::delete_blob_service;
 7  use crate::{config::Config, db::DB};
 8  
 9  #[derive(Responder)]
10  pub enum DeleteBlobResponse {
11      #[response(status = 202)]
12      Success(()),
13      #[response(status = 404)]
14      NotFound(()),
15      #[response(status = 500)]
16      Failure(()),
17  }
18  
19  #[delete("/v2/<name>/blobs/<digest>")]
20  pub async fn delete_blob(
21      db_pool: &State<Pool<DB>>,
22      config: &State<Config>,
23      _auth: Auth,
24      name: &str,
25      digest: &str,
26  ) -> DeleteBlobResponse {
27      if let Err(err) = delete_blob_service::delete_blob(db_pool, config, name, digest).await {
28          match err {
29              RegistryError::BlobNotFound => {
30                  warn!("Request to delete blob that could not be found {name} ({digest})");
31                  return DeleteBlobResponse::NotFound(());
32              }
33              err => {
34                  error!("Failed to delete blob, err: {err:?}");
35                  return DeleteBlobResponse::Failure(());
36              }
37          }
38      }
39  
40      DeleteBlobResponse::Success(())
41  }