forked from github-starred/komodo
update tags api
This commit is contained in:
@@ -99,6 +99,7 @@ enum WriteRequest {
|
||||
CreateTag(CreateTag),
|
||||
DeleteTag(DeleteTag),
|
||||
UpdateTag(UpdateTag),
|
||||
UpdateTagsOnResource(UpdateTagsOnResource),
|
||||
}
|
||||
|
||||
pub fn router() -> Router {
|
||||
|
||||
@@ -1,8 +1,16 @@
|
||||
use anyhow::Context;
|
||||
use anyhow::{anyhow, Context};
|
||||
use async_trait::async_trait;
|
||||
use monitor_client::{
|
||||
api::write::{CreateTag, DeleteTag, UpdateTag},
|
||||
entities::tag::CustomTag,
|
||||
api::write::{
|
||||
CreateTag, DeleteTag, UpdateTag, UpdateTagsOnResource,
|
||||
UpdateTagsOnResourceResponse,
|
||||
},
|
||||
entities::{
|
||||
alerter::Alerter, build::Build, builder::Builder,
|
||||
deployment::Deployment, procedure::Procedure, repo::Repo,
|
||||
server::Server, tag::CustomTag, update::ResourceTarget,
|
||||
PermissionLevel,
|
||||
},
|
||||
};
|
||||
use mungos::{
|
||||
by_id::{delete_one_by_id, update_one_by_id},
|
||||
@@ -10,7 +18,9 @@ use mungos::{
|
||||
};
|
||||
use resolver_api::Resolve;
|
||||
|
||||
use crate::{auth::RequestUser, state::State};
|
||||
use crate::{
|
||||
auth::RequestUser, helpers::resource::StateResource, state::State,
|
||||
};
|
||||
|
||||
#[async_trait]
|
||||
impl Resolve<CreateTag, RequestUser> for State {
|
||||
@@ -77,3 +87,87 @@ impl Resolve<DeleteTag, RequestUser> for State {
|
||||
Ok(tag)
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl Resolve<UpdateTagsOnResource, RequestUser> for State {
|
||||
async fn resolve(
|
||||
&self,
|
||||
UpdateTagsOnResource { target, tags }: UpdateTagsOnResource,
|
||||
user: RequestUser,
|
||||
) -> anyhow::Result<UpdateTagsOnResourceResponse> {
|
||||
match target {
|
||||
ResourceTarget::System(_) => return Err(anyhow!("")),
|
||||
ResourceTarget::Build(id) => {
|
||||
<State as StateResource<Build>>::get_resource_check_permissions(
|
||||
self, &id, &user, PermissionLevel::Update
|
||||
)
|
||||
.await?;
|
||||
<State as StateResource<Build>>::update_tags_on_resource(
|
||||
self, &id, tags,
|
||||
)
|
||||
.await?;
|
||||
}
|
||||
ResourceTarget::Builder(id) => {
|
||||
<State as StateResource<Builder>>::get_resource_check_permissions(
|
||||
self, &id, &user, PermissionLevel::Update
|
||||
)
|
||||
.await?;
|
||||
<State as StateResource<Builder>>::update_tags_on_resource(
|
||||
self, &id, tags,
|
||||
)
|
||||
.await?
|
||||
}
|
||||
ResourceTarget::Deployment(id) => {
|
||||
<State as StateResource<Deployment>>::get_resource_check_permissions(
|
||||
self, &id, &user, PermissionLevel::Update
|
||||
)
|
||||
.await?;
|
||||
<State as StateResource<Deployment>>::update_tags_on_resource(
|
||||
self, &id, tags,
|
||||
)
|
||||
.await?
|
||||
}
|
||||
ResourceTarget::Server(id) => {
|
||||
<State as StateResource<Server>>::get_resource_check_permissions(
|
||||
self, &id, &user, PermissionLevel::Update
|
||||
)
|
||||
.await?;
|
||||
<State as StateResource<Server>>::update_tags_on_resource(
|
||||
self, &id, tags,
|
||||
)
|
||||
.await?
|
||||
}
|
||||
ResourceTarget::Repo(id) => {
|
||||
<State as StateResource<Repo>>::get_resource_check_permissions(
|
||||
self, &id, &user, PermissionLevel::Update
|
||||
)
|
||||
.await?;
|
||||
<State as StateResource<Repo>>::update_tags_on_resource(
|
||||
self, &id, tags,
|
||||
)
|
||||
.await?
|
||||
}
|
||||
ResourceTarget::Alerter(id) => {
|
||||
<State as StateResource<Alerter>>::get_resource_check_permissions(
|
||||
self, &id, &user, PermissionLevel::Update
|
||||
)
|
||||
.await?;
|
||||
<State as StateResource<Alerter>>::update_tags_on_resource(
|
||||
self, &id, tags,
|
||||
)
|
||||
.await?
|
||||
}
|
||||
ResourceTarget::Procedure(id) => {
|
||||
<State as StateResource<Procedure>>::get_resource_check_permissions(
|
||||
self, &id, &user, PermissionLevel::Update
|
||||
)
|
||||
.await?;
|
||||
<State as StateResource<Procedure>>::update_tags_on_resource(
|
||||
self, &id, tags,
|
||||
)
|
||||
.await?
|
||||
}
|
||||
};
|
||||
Ok(UpdateTagsOnResourceResponse {})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ use monitor_client::{
|
||||
};
|
||||
use mungos::{
|
||||
aggregate::aggregate_collect,
|
||||
by_id::find_one_by_id,
|
||||
by_id::{find_one_by_id, update_one_by_id},
|
||||
find::find_collect,
|
||||
mongodb::{
|
||||
bson::{doc, oid::ObjectId, Document},
|
||||
@@ -175,6 +175,21 @@ pub trait StateResource<
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn update_tags_on_resource(
|
||||
&self,
|
||||
id: &str,
|
||||
tags: Vec<String>,
|
||||
) -> anyhow::Result<()> {
|
||||
update_one_by_id(
|
||||
self.coll(),
|
||||
id,
|
||||
doc! { "$set": { "tags": tags } },
|
||||
None,
|
||||
)
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
|
||||
@@ -60,21 +60,14 @@ pub struct UpdateTag {
|
||||
Serialize, Deserialize, Debug, Clone, Request, EmptyTraits,
|
||||
)]
|
||||
#[empty_traits(MonitorWriteRequest)]
|
||||
#[response(())]
|
||||
pub struct AddTags {
|
||||
#[response(UpdateTagsOnResourceResponse)]
|
||||
pub struct UpdateTagsOnResource {
|
||||
pub target: ResourceTarget,
|
||||
pub tags: Vec<String>, // custom tag ids
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
#[typeshare]
|
||||
#[derive(
|
||||
Serialize, Deserialize, Debug, Clone, Request, EmptyTraits,
|
||||
)]
|
||||
#[empty_traits(MonitorWriteRequest)]
|
||||
#[response(())]
|
||||
pub struct RemoveTags {
|
||||
pub target: ResourceTarget,
|
||||
pub tags: Vec<String>, // custom tag ids
|
||||
}
|
||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||
pub struct UpdateTagsOnResourceResponse {}
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user