tag rename
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
use axum::{
|
use axum::{
|
||||||
Router,
|
Router,
|
||||||
response::{IntoResponse, Response},
|
response::{IntoResponse, Response},
|
||||||
routing::{delete, get, post},
|
routing::{delete, get, patch, post},
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
@@ -36,6 +36,7 @@ pub fn api_router() -> Router {
|
|||||||
.route("/api/tags", get(tags::get_all))
|
.route("/api/tags", get(tags::get_all))
|
||||||
.route("/api/tags", post(tags::create))
|
.route("/api/tags", post(tags::create))
|
||||||
.route("/api/tags/{id}", get(tags::get_by_id))
|
.route("/api/tags/{id}", get(tags::get_by_id))
|
||||||
|
.route("/api/tags/{id}", patch(tags::rename))
|
||||||
.route("/api/tags/{id}", delete(tags::delete))
|
.route("/api/tags/{id}", delete(tags::delete))
|
||||||
.route("/api/tags/#{name}", get(tags::get_by_name))
|
.route("/api/tags/#{name}", get(tags::get_by_name))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ use crate::{
|
|||||||
|
|
||||||
const CANT_MAKE_TAGS: &str = "You don't have permission to create new tags.";
|
const CANT_MAKE_TAGS: &str = "You don't have permission to create new tags.";
|
||||||
const CANT_DEL_TAGS: &str = "You don't have permission to delete tags.";
|
const CANT_DEL_TAGS: &str = "You don't have permission to delete tags.";
|
||||||
|
const CANT_RENAME_TAGS: &str = "You don't have permission to rename tags.";
|
||||||
const TAG_DELETED: &str = "Tag deleted successfully.";
|
const TAG_DELETED: &str = "Tag deleted successfully.";
|
||||||
|
|
||||||
pub async fn get_all(headers: HeaderMap) -> Result<Response, CompositeError> {
|
pub async fn get_all(headers: HeaderMap) -> Result<Response, CompositeError> {
|
||||||
@@ -43,12 +44,12 @@ pub async fn get_by_name(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
pub struct NewTag {
|
pub struct TagNameForm {
|
||||||
name: TagName,
|
name: TagName,
|
||||||
}
|
}
|
||||||
pub async fn create(
|
pub async fn create(
|
||||||
headers: HeaderMap,
|
headers: HeaderMap,
|
||||||
Json(form): Json<NewTag>,
|
Json(form): Json<TagNameForm>,
|
||||||
) -> Result<Response, CompositeError> {
|
) -> Result<Response, CompositeError> {
|
||||||
let u = User::authenticate(&headers)?.required()?;
|
let u = User::authenticate(&headers)?.required()?;
|
||||||
if !u.has_permission(Permission::CreateTags)? {
|
if !u.has_permission(Permission::CreateTags)? {
|
||||||
@@ -57,6 +58,20 @@ pub async fn create(
|
|||||||
Ok(Json(Tag::create(form.name)?).into_response())
|
Ok(Json(Tag::create(form.name)?).into_response())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn rename(
|
||||||
|
Path(id): Path<Uuid>,
|
||||||
|
headers: HeaderMap,
|
||||||
|
Json(form): Json<TagNameForm>,
|
||||||
|
) -> Result<Response, CompositeError> {
|
||||||
|
let u = User::authenticate(&headers)?.required()?;
|
||||||
|
if !u.has_permission(Permission::RenameTags)? {
|
||||||
|
return Ok((StatusCode::FORBIDDEN, CANT_RENAME_TAGS).into_response());
|
||||||
|
}
|
||||||
|
let mut tag = Tag::get_by_id(id)?;
|
||||||
|
tag.rename(form.name)?;
|
||||||
|
Ok(Json(tag).into_response())
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn delete(Path(id): Path<Uuid>, headers: HeaderMap) -> Result<Response, CompositeError> {
|
pub async fn delete(Path(id): Path<Uuid>, headers: HeaderMap) -> Result<Response, CompositeError> {
|
||||||
let u = User::authenticate(&headers)?.required()?;
|
let u = User::authenticate(&headers)?.required()?;
|
||||||
if !u.has_permission(Permission::DeleteTags)? {
|
if !u.has_permission(Permission::DeleteTags)? {
|
||||||
|
|||||||
@@ -69,6 +69,13 @@ impl Tag {
|
|||||||
.execute((id, &name))?;
|
.execute((id, &name))?;
|
||||||
Ok(Tag { id, name })
|
Ok(Tag { id, name })
|
||||||
}
|
}
|
||||||
|
pub fn rename(&mut self, name: TagName) -> Result<(), TagError> {
|
||||||
|
database::conn()?
|
||||||
|
.prepare("UPDATE tags SET tagname = ?1 WHERE id = ?2")?
|
||||||
|
.execute((&name, self.id))?;
|
||||||
|
self.name = name;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
pub fn delete(self) -> Result<(), TagError> {
|
pub fn delete(self) -> Result<(), TagError> {
|
||||||
database::conn()?
|
database::conn()?
|
||||||
.prepare("DELETE FROM tags WHERE id = ?1")?
|
.prepare("DELETE FROM tags WHERE id = ?1")?
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ pub enum Permission {
|
|||||||
ChangeOthersHandles,
|
ChangeOthersHandles,
|
||||||
ManuallyCreateUsers,
|
ManuallyCreateUsers,
|
||||||
CreateTags,
|
CreateTags,
|
||||||
|
RenameTags,
|
||||||
DeleteTags,
|
DeleteTags,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user