feat(db): enforce required-field completeness on publish (#16)
set_visibility now gates the transition to Public: every field definition with required=true must have a value on the object (typed inventory-minimum columns are already NOT NULL, so only flexible required fields are checked). Missing values yield VisibilityError::MissingRequiredFields(keys); the admin publish endpoint maps it to 422. The gate runs in db so every caller is protected and the check is atomic with the transition. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -166,6 +166,9 @@ pub(crate) async fn set_visibility(
|
||||
}
|
||||
Err(db::catalog::VisibilityError::ObjectNotFound) => Err(StatusCode::NOT_FOUND),
|
||||
Err(db::catalog::VisibilityError::Illegal(_)) => Err(StatusCode::CONFLICT),
|
||||
Err(db::catalog::VisibilityError::MissingRequiredFields(_)) => {
|
||||
Err(StatusCode::UNPROCESSABLE_ENTITY)
|
||||
}
|
||||
Err(db::catalog::VisibilityError::Db(_)) => Err(StatusCode::INTERNAL_SERVER_ERROR),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user