remove builds from db if pkg is deleted
fix apibuilder interval refreshes refreshing widgets not visible
This commit is contained in:
		@@ -1,9 +1,6 @@
 | 
			
		||||
use crate::repo::repo::{remove_pkg, remove_version};
 | 
			
		||||
use rocket::serde::json::Json;
 | 
			
		||||
use rocket::serde::Deserialize;
 | 
			
		||||
use rocket::{post, State};
 | 
			
		||||
use rocket_okapi::okapi::schemars;
 | 
			
		||||
use rocket_okapi::{openapi, JsonSchema};
 | 
			
		||||
use rocket_okapi::openapi;
 | 
			
		||||
use sea_orm::DatabaseConnection;
 | 
			
		||||
 | 
			
		||||
#[openapi(tag = "test")]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
use crate::aur::aur::download_pkgbuild;
 | 
			
		||||
use crate::db::prelude::Packages;
 | 
			
		||||
use crate::db::prelude::Versions;
 | 
			
		||||
use crate::db::versions;
 | 
			
		||||
use crate::db::prelude::{Builds, Packages};
 | 
			
		||||
use crate::db::{builds, versions};
 | 
			
		||||
use crate::pkgbuild::build::build_pkgbuild;
 | 
			
		||||
use anyhow::anyhow;
 | 
			
		||||
use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, ModelTrait, QueryFilter};
 | 
			
		||||
@@ -39,6 +39,49 @@ pub async fn add_pkg(
 | 
			
		||||
    Ok(pkg_file_name)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub async fn remove_pkg(db: &DatabaseConnection, pkg_id: i32) -> anyhow::Result<()> {
 | 
			
		||||
    let pkg = Packages::find_by_id(pkg_id)
 | 
			
		||||
        .one(db)
 | 
			
		||||
        .await?
 | 
			
		||||
        .ok_or(anyhow!("id not found"))?;
 | 
			
		||||
 | 
			
		||||
    fs::remove_dir_all(format!("./builds/{}", pkg.name))?;
 | 
			
		||||
 | 
			
		||||
    let versions = Versions::find()
 | 
			
		||||
        .filter(versions::Column::PackageId.eq(pkg.id))
 | 
			
		||||
        .all(db)
 | 
			
		||||
        .await?;
 | 
			
		||||
 | 
			
		||||
    for v in versions {
 | 
			
		||||
        rem_ver(db, v).await?;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // remove corresponding builds
 | 
			
		||||
    let builds = Builds::find()
 | 
			
		||||
        .filter(builds::Column::PkgId.eq(pkg.id))
 | 
			
		||||
        .all(db)
 | 
			
		||||
        .await?;
 | 
			
		||||
    for b in builds {
 | 
			
		||||
        b.delete(db).await?;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // remove package db entry
 | 
			
		||||
    pkg.delete(db).await?;
 | 
			
		||||
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub async fn remove_version(db: &DatabaseConnection, version_id: i32) -> anyhow::Result<()> {
 | 
			
		||||
    let version = Versions::find()
 | 
			
		||||
        .filter(versions::Column::PackageId.eq(version_id))
 | 
			
		||||
        .one(db)
 | 
			
		||||
        .await?;
 | 
			
		||||
    if let Some(version) = version {
 | 
			
		||||
        rem_ver(db, version).await?;
 | 
			
		||||
    }
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn repo_add(pkg_file_name: String) -> anyhow::Result<()> {
 | 
			
		||||
    let db_file = format!("{REPO_NAME}.db.tar.gz");
 | 
			
		||||
 | 
			
		||||
@@ -79,40 +122,6 @@ fn repo_remove(pkg_file_name: String) -> anyhow::Result<()> {
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub async fn remove_pkg(db: &DatabaseConnection, pkg_id: i32) -> anyhow::Result<()> {
 | 
			
		||||
    let pkg = Packages::find_by_id(pkg_id)
 | 
			
		||||
        .one(db)
 | 
			
		||||
        .await?
 | 
			
		||||
        .ok_or(anyhow!("id not found"))?;
 | 
			
		||||
 | 
			
		||||
    fs::remove_dir_all(format!("./builds/{}", pkg.name))?;
 | 
			
		||||
 | 
			
		||||
    let versions = Versions::find()
 | 
			
		||||
        .filter(versions::Column::PackageId.eq(pkg.id))
 | 
			
		||||
        .all(db)
 | 
			
		||||
        .await?;
 | 
			
		||||
 | 
			
		||||
    for v in versions {
 | 
			
		||||
        rem_ver(db, v).await?;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // remove package db entry
 | 
			
		||||
    pkg.delete(db).await?;
 | 
			
		||||
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub async fn remove_version(db: &DatabaseConnection, version_id: i32) -> anyhow::Result<()> {
 | 
			
		||||
    let version = Versions::find()
 | 
			
		||||
        .filter(versions::Column::PackageId.eq(version_id))
 | 
			
		||||
        .one(db)
 | 
			
		||||
        .await?;
 | 
			
		||||
    if let Some(version) = version {
 | 
			
		||||
        rem_ver(db, version).await?;
 | 
			
		||||
    }
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async fn rem_ver(db: &DatabaseConnection, version: versions::Model) -> anyhow::Result<()> {
 | 
			
		||||
    if let Some(filename) = version.file_name.clone() {
 | 
			
		||||
        // so repo-remove only supports passing a package name and removing the whole package
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user