Add guided metadata repair tool to admin

This commit is contained in:
Ultradesu committed 2026-10-19 12:05:56 +01:00
1 parent 9ab27c921c
commit 8f7c0d231f
5 files changed
+1235 -32

No files matched your search

+81
View File
@@ -1,3 +1,4 @@
mod metadata_fix;
mod v2;
pub mod views;
@@ -807,6 +808,86 @@ impl App for AdminApp {
},
"admin_v2_library_releases_merge",
),
Route::with_handler_and_name(
"/v2/api/metadata-fix/expand",
{
let pool = Arc::clone(&pool);
let pool_config = Arc::clone(&pool_config);
cot::router::method::post(move |session: Session, db: Database, json: Json<metadata_fix::ExpandRequest>| {
let pool = Arc::clone(&pool);
let pool_config = Arc::clone(&pool_config);
async move {
let pg_pool = pool.get_or_init(|| async { sqlx::postgres::PgPoolOptions::new().max_connections(5).connect(&pool_config.database_url).await.expect("admin pool") }).await;
metadata_fix::expand(session, db, pg_pool, json).await
}
})
},
"admin_v2_metadata_fix_expand",
),
Route::with_handler_and_name(
"/v2/api/metadata-fix/plan",
{
let pool = Arc::clone(&pool);
let pool_config = Arc::clone(&pool_config);
cot::router::method::post(move |session: Session, db: Database, json: Json<metadata_fix::PlanRequest>| {
let pool = Arc::clone(&pool);
let pool_config = Arc::clone(&pool_config);
async move {
let pg_pool = pool.get_or_init(|| async { sqlx::postgres::PgPoolOptions::new().max_connections(5).connect(&pool_config.database_url).await.expect("admin pool") }).await;
metadata_fix::propose(session, db, pg_pool, json).await
}
})
},
"admin_v2_metadata_fix_plan",
),
Route::with_handler_and_name(
"/v2/api/metadata-fix/apply",
{
let pool = Arc::clone(&pool);
let pool_config = Arc::clone(&pool_config);
cot::router::method::post(move |session: Session, db: Database, json: Json<metadata_fix::ApplyRequest>| {
let pool = Arc::clone(&pool);
let pool_config = Arc::clone(&pool_config);
async move {
let pg_pool = pool.get_or_init(|| async { sqlx::postgres::PgPoolOptions::new().max_connections(5).connect(&pool_config.database_url).await.expect("admin pool") }).await;
metadata_fix::apply(session, db, pg_pool, json).await
}
})
},
"admin_v2_metadata_fix_apply",
),
Route::with_handler_and_name(
"/v2/api/metadata-fix/history",
{
let pool = Arc::clone(&pool);
let pool_config = Arc::clone(&pool_config);
get(move |session: Session, db: Database| {
let pool = Arc::clone(&pool);
let pool_config = Arc::clone(&pool_config);
async move {
let pg_pool = pool.get_or_init(|| async { sqlx::postgres::PgPoolOptions::new().max_connections(5).connect(&pool_config.database_url).await.expect("admin pool") }).await;
metadata_fix::history(session, db, pg_pool).await
}
})
},
"admin_v2_metadata_fix_history",
),
Route::with_handler_and_name(
"/v2/api/metadata-fix/undo",
{
let pool = Arc::clone(&pool);
let pool_config = Arc::clone(&pool_config);
cot::router::method::post(move |session: Session, db: Database, json: Json<metadata_fix::UndoRequest>| {
let pool = Arc::clone(&pool);
let pool_config = Arc::clone(&pool_config);
async move {
let pg_pool = pool.get_or_init(|| async { sqlx::postgres::PgPoolOptions::new().max_connections(5).connect(&pool_config.database_url).await.expect("admin pool") }).await;
metadata_fix::undo(session, db, pg_pool, json).await
}
})
},
"admin_v2_metadata_fix_undo",
),
// -- Dashboard ----------------------------------------------------
Route::with_handler_and_name(
"/",