fix(collections): register DOI when the issue is made public #153
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Currently, DOIs only get registered when a collection issue is published, not when it is made public.
// TODO: if issue_data.public = trueThis should behave similarly as the publishing:
pub async fn publish_issue(claims: web::ReqData<Claims>,pool: web::Data<DbPool>,path: web::Path<String>,) -> Result<HttpResponse, AppError> {let issue_id = path.into_inner();let user_id = claims.sub.clone();let result = web::block(move || -> Result<(IssueWithEditors, CollectionWithPids), AppError> {let mut conn = pool.get().map_err(|_| {AppError::InternalServerError("Database connection error".to_string())})?;// Check if user is an editor on this issuelet is_editor = contributors::table.filter(contributors::reference_type.eq("issue")).filter(contributors::reference_id.eq(&issue_id)).filter(contributors::user_id.eq(&user_id)).filter(contributors::role.eq(crate::models::contributor::ContributorsRole::Editor)).first::<Contributor>(&mut conn).optional().map_err(|_| AppError::InternalServerError("Database error".to_string()))?.is_some();if !is_editor {return Err(AppError::Forbidden("Only editors can publish an issue".to_string(),));}// Update the issue to be public and set published_atlet rows_affected = diesel::update(issues.find(&issue_id)).set((crate::schema::issues::public.eq(true),crate::schema::issues::published_at.eq(Some(chrono::Utc::now().naive_utc())),)).execute(&mut conn).map_err(|_| {AppError::InternalServerError("Failed to publish issue".to_string())})?;if rows_affected == 0 {return Err(AppError::NotFound);}// Get the updated issuelet published_issue =issues.find(&issue_id)This would require refactoring to prevent code repetition/divergence.