fix(collections): register DOI when the issue is made public #153

Open
opened 2026-03-02 12:46:52 +00:00 by chartgerink · 0 comments
Owner

Currently, DOIs only get registered when a collection issue is published, not when it is made public.

// TODO: if issue_data.public = true

This should behave similarly as the publishing:

Lines 398 to 650 in ca67c1a
Preview has been truncated
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 issue
let 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_at
let 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 issue
let published_issue =
issues
.find(&issue_id)

This would require refactoring to prevent code repetition/divergence.

Currently, DOIs only get registered when a collection issue is published, not when it is made public. https://git.libscie.org/researchequals/api/src/commit/ca67c1ab14b23129c583ef2a677721c5b3f2fe99/src/issues/handlers.rs#L84 This should behave similarly as the publishing: https://git.libscie.org/researchequals/api/src/commit/ca67c1ab14b23129c583ef2a677721c5b3f2fe99/src/issues/handlers.rs#L398-L650 This would require refactoring to prevent code repetition/divergence.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
researchequals/api#153
No description provided.