Skip to content

Commit

Permalink
修复必须使用不同 slug 修改数据的错误
Browse files Browse the repository at this point in the history
  • Loading branch information
veoco committed Feb 18, 2023
1 parent 3693d6a commit 89b4d1a
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 26 deletions.
8 changes: 5 additions & 3 deletions src/categories/views.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,11 @@ pub async fn modify_category_by_slug(
}
let exist_cate = exist_cate.unwrap();

let target_cate = common_db::get_meta_by_slug(&state, &category_modify.slug, false).await;
if target_cate.is_some() {
return Err(FieldError::InvalidParams("category slug".to_owned()));
if slug != category_modify.slug {
let target_cate = common_db::get_meta_by_slug(&state, &category_modify.slug, false).await;
if target_cate.is_some() {
return Err(FieldError::InvalidParams("category slug".to_owned()));
}
}

let _ =
Expand Down
20 changes: 12 additions & 8 deletions src/pages/views.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,11 @@ pub async fn modify_page_by_slug(
}
let exist_page = exist_page.unwrap();

let target_page = common_db::get_content_by_slug(&state, &page_modify.slug).await;
if target_page.is_some() {
return Err(FieldError::AlreadyExist("page slug".to_owned()));
if slug != page_modify.slug {
let target_page = common_db::get_content_by_slug(&state, &page_modify.slug).await;
if target_page.is_some() {
return Err(FieldError::AlreadyExist("page slug".to_owned()));
}
}

let _ =
Expand Down Expand Up @@ -198,24 +200,26 @@ pub async fn modify_page_field_by_slug_and_name(
State(state): State<Arc<AppState>>,
PMEditor(_): PMEditor,
Path((slug, name)): Path<(String, String)>,
ValidatedJson(field_create): ValidatedJson<FieldCreate>,
ValidatedJson(field_modfify): ValidatedJson<FieldCreate>,
) -> Result<Json<Value>, FieldError> {
let exist_page = common_db::get_content_by_slug(&state, &slug).await;
if exist_page.is_none() {
return Err(FieldError::InvalidParams("slug".to_owned()));
}
let exist_page = exist_page.unwrap();

let exist_field = common_db::get_field_by_cid_and_name(&state, exist_page.cid, &name).await;
if exist_field.is_none() {
return Err(FieldError::InvalidParams("name".to_owned()));
if name != field_modfify.name {
let exist_field = common_db::get_field_by_cid_and_name(&state, exist_page.cid, &name).await;
if exist_field.is_none() {
return Err(FieldError::InvalidParams("name".to_owned()));
}
}

let _ = common_db::modify_field_by_cid_and_name_with_field_create(
&state,
exist_page.cid,
&name,
&field_create,
&field_modfify,
)
.await?;
Ok(Json(json!({ "msg": "ok" })))
Expand Down
2 changes: 1 addition & 1 deletion src/posts/urls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ pub fn posts_routers(ro: bool) -> Router<Arc<AppState>> {
if !ro {
posts_route
.route("/api/posts/", post(views::create_post))
.route("/api/posts/:slug", patch(views::modify_page_by_slug))
.route("/api/posts/:slug", patch(views::modify_post_by_slug))
.route("/api/posts/:slug", delete(views::delete_post_by_slug))
.route(
"/api/posts/:slug/fields/",
Expand Down
30 changes: 19 additions & 11 deletions src/posts/views.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ pub async fn create_post(
Ok((StatusCode::CREATED, Json(json!({ "msg": "ok" }))))
}

pub async fn modify_page_by_slug(
pub async fn modify_post_by_slug(
State(state): State<Arc<AppState>>,
PMContributor(user): PMContributor,
Path(slug): Path<String>,
Expand All @@ -43,9 +43,11 @@ pub async fn modify_page_by_slug(
}
let exist_post = exist_post.unwrap();

let target_post = common_db::get_content_by_slug(&state, &post_modify.slug).await;
if target_post.is_some() {
return Err(FieldError::AlreadyExist("post slug".to_owned()));
if slug != post_modify.slug {
let target_post = common_db::get_content_by_slug(&state, &post_modify.slug).await;
if target_post.is_some() {
return Err(FieldError::AlreadyExist("post slug".to_owned()));
}
}

if user.group == "contributor" {
Expand Down Expand Up @@ -126,8 +128,12 @@ pub async fn get_post_by_slug(
String::from("")
} else {
match state.pool.any_kind() {
AnyKind::MySql => format!(r#" AND (`status` = 'publish' OR `status` = 'password' OR `status` = 'hidden')"#),
_ => format!(r#" AND ("status" = 'publish' OR "status" = 'password' OR "status" = 'hidden')"#),
AnyKind::MySql => format!(
r#" AND (`status` = 'publish' OR `status` = 'password' OR `status` = 'hidden')"#
),
_ => format!(
r#" AND ("status" = 'publish' OR "status" = 'password' OR "status" = 'hidden')"#
),
}
};

Expand Down Expand Up @@ -223,7 +229,7 @@ pub async fn modify_post_field_by_slug_and_name(
State(state): State<Arc<AppState>>,
PMContributor(user): PMContributor,
Path((slug, name)): Path<(String, String)>,
ValidatedJson(field_create): ValidatedJson<FieldCreate>,
ValidatedJson(field_modify): ValidatedJson<FieldCreate>,
) -> Result<Json<Value>, FieldError> {
let exist_post = common_db::get_content_by_slug(&state, &slug).await;
if exist_post.is_none() {
Expand All @@ -236,16 +242,18 @@ pub async fn modify_post_field_by_slug_and_name(
return Err(FieldError::PermissionDeny);
}

let exist_field = common_db::get_field_by_cid_and_name(&state, exist_post.cid, &name).await;
if exist_field.is_none() {
return Err(FieldError::InvalidParams("name".to_owned()));
if name != field_modify.name {
let exist_field = common_db::get_field_by_cid_and_name(&state, exist_post.cid, &name).await;
if exist_field.is_none() {
return Err(FieldError::InvalidParams("name".to_owned()));
}
}

let _ = common_db::modify_field_by_cid_and_name_with_field_create(
&state,
exist_post.cid,
&name,
&field_create,
&field_modify,
)
.await?;
Ok(Json(json!({ "msg": "ok" })))
Expand Down
8 changes: 5 additions & 3 deletions src/tags/views.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,11 @@ pub async fn modify_tag_by_slug(
}
let exist_tag = exist_tag.unwrap();

let target_tag = common_db::get_meta_by_slug(&state, &tag_modify.slug, true).await;
if target_tag.is_some() {
return Err(FieldError::InvalidParams("category slug".to_owned()));
if slug != tag_modify.slug {
let target_tag = common_db::get_meta_by_slug(&state, &tag_modify.slug, true).await;
if target_tag.is_some() {
return Err(FieldError::InvalidParams("category slug".to_owned()));
}
}

let _ = db::modify_tag_by_mid_and_tag_modify(&state, exist_tag.mid, &tag_modify).await?;
Expand Down

0 comments on commit 89b4d1a

Please sign in to comment.