Skip to content

Commit b38beb5

Browse files
authored
[mono]FIX: Change Resolve Auth to Reviewer (#1597)
* [mono]FIX: Change Resolve Auth to Reviewer Signed-off-by: AidCheng <[email protected]> * UPDATE: user username from campsiteAPI Signed-off-by: AidCheng <[email protected]> --------- Signed-off-by: AidCheng <[email protected]>
1 parent f438b73 commit b38beb5

File tree

2 files changed

+138
-131
lines changed

2 files changed

+138
-131
lines changed
Lines changed: 129 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -1,128 +1,129 @@
1-
use crate::storage::base_storage::{BaseStorage, StorageConnector};
2-
use callisto::entity_ext::generate_id;
3-
use callisto::mega_cl_reviewer;
4-
use common::errors::MegaError;
5-
use sea_orm::QueryFilter;
6-
use sea_orm::{ActiveModelTrait, EntityTrait, IntoActiveModel};
7-
use sea_orm::{ColumnTrait, Set};
8-
use std::ops::Deref;
9-
10-
#[derive(Clone)]
11-
pub struct ClReviewerStorage {
12-
pub base: BaseStorage,
13-
}
14-
15-
impl Deref for ClReviewerStorage {
16-
type Target = BaseStorage;
17-
fn deref(&self) -> &Self::Target {
18-
&self.base
19-
}
20-
}
21-
22-
impl ClReviewerStorage {
23-
pub fn new_reviewer(&self, cl_link: &str, username: &str) -> mega_cl_reviewer::Model {
24-
let now = chrono::Utc::now().naive_utc();
25-
mega_cl_reviewer::Model {
26-
id: generate_id(),
27-
cl_link: cl_link.to_string(), // TODO: Rename this field during migration phase
28-
approved: false,
29-
username: username.to_string(),
30-
created_at: now,
31-
updated_at: now,
32-
}
33-
}
34-
35-
pub async fn add_reviewers(
36-
&self,
37-
cl_link: &str,
38-
reviewers: Vec<String>,
39-
) -> Result<(), MegaError> {
40-
for reviewer in reviewers {
41-
let new_reviewer = self.new_reviewer(cl_link, &reviewer);
42-
let a_model: mega_cl_reviewer::ActiveModel = new_reviewer.into_active_model();
43-
a_model.insert(self.get_connection()).await.map_err(|e| {
44-
tracing::error!("{}", e);
45-
MegaError::with_message(format!("reviewer {}", reviewer.clone()))
46-
})?;
47-
}
48-
Ok(())
49-
}
50-
51-
pub async fn remove_reviewers(
52-
&self,
53-
cl_link: &str,
54-
reviewers: Vec<String>,
55-
) -> Result<(), MegaError> {
56-
for reviewer in reviewers {
57-
mega_cl_reviewer::Entity::delete_many()
58-
.filter(mega_cl_reviewer::Column::ClLink.eq(cl_link))
59-
.filter(mega_cl_reviewer::Column::Username.eq(reviewer.clone()))
60-
.exec(self.get_connection())
61-
.await
62-
.map_err(|e| {
63-
tracing::error!("{}", e);
64-
MegaError::with_message(format!("fail to remove reviewer {}", reviewer.clone()))
65-
})?;
66-
}
67-
Ok(())
68-
}
69-
70-
pub async fn is_reviewer(&self, cl_link: &str, username: &str) -> Result<bool, MegaError> {
71-
mega_cl_reviewer::Entity::find()
72-
.filter(mega_cl_reviewer::Column::ClLink.eq(cl_link))
73-
.filter(mega_cl_reviewer::Column::Username.eq(username))
74-
.one(self.get_connection())
75-
.await
76-
.map_err(|e| {
77-
tracing::error!("Error finding the reviewer: {}", e);
78-
e
79-
})?;
80-
81-
Ok(true)
82-
}
83-
84-
pub async fn list_reviewers(
85-
&self,
86-
cl_link: &str,
87-
) -> Result<Vec<mega_cl_reviewer::Model>, MegaError> {
88-
let reviewers = mega_cl_reviewer::Entity::find()
89-
.filter(mega_cl_reviewer::Column::ClLink.eq(cl_link))
90-
.all(self.get_connection())
91-
.await
92-
.map_err(|e| {
93-
tracing::error!("{}", e);
94-
MegaError::with_message(format!("fail to list reviewers for {cl_link}"))
95-
})?;
96-
Ok(reviewers)
97-
}
98-
99-
pub async fn reviewer_change_state(
100-
&self,
101-
cl_link: &str,
102-
reviewer_username: &str,
103-
approved: bool,
104-
) -> Result<(), MegaError> {
105-
let mut rev: mega_cl_reviewer::ActiveModel = mega_cl_reviewer::Entity::find()
106-
.filter(mega_cl_reviewer::Column::ClLink.eq(cl_link))
107-
.filter(mega_cl_reviewer::Column::Username.eq(reviewer_username))
108-
.one(self.get_connection())
109-
.await
110-
.map_err(|e| {
111-
tracing::error!("{}", e);
112-
MegaError::with_message(format!("fail to find reviewer {}", reviewer_username))
113-
})?
114-
.ok_or_else(|| {
115-
MegaError::with_message(format!("reviewer {} not found", reviewer_username))
116-
})?
117-
.into_active_model();
118-
119-
rev.approved = Set(approved);
120-
rev.updated_at = Set(chrono::Utc::now().naive_utc());
121-
rev.update(self.get_connection()).await.map_err(|e| {
122-
tracing::error!("{}", e);
123-
MegaError::with_message(format!("fail to update reviewer {}", reviewer_username))
124-
})?;
125-
126-
Ok(())
127-
}
128-
}
1+
use crate::storage::base_storage::{BaseStorage, StorageConnector};
2+
use callisto::entity_ext::generate_id;
3+
use callisto::mega_cl_reviewer;
4+
use common::errors::MegaError;
5+
use sea_orm::QueryFilter;
6+
use sea_orm::{ActiveModelTrait, EntityTrait, IntoActiveModel};
7+
use sea_orm::{ColumnTrait, Set};
8+
use std::ops::Deref;
9+
10+
#[derive(Clone)]
11+
pub struct ClReviewerStorage {
12+
pub base: BaseStorage,
13+
}
14+
15+
impl Deref for ClReviewerStorage {
16+
type Target = BaseStorage;
17+
fn deref(&self) -> &Self::Target {
18+
&self.base
19+
}
20+
}
21+
22+
impl ClReviewerStorage {
23+
pub fn new_reviewer(&self, cl_link: &str, username: &str) -> mega_cl_reviewer::Model {
24+
let now = chrono::Utc::now().naive_utc();
25+
mega_cl_reviewer::Model {
26+
id: generate_id(),
27+
cl_link: cl_link.to_string(), // TODO: Rename this field during migration phase
28+
approved: false,
29+
username: username.to_string(),
30+
created_at: now,
31+
updated_at: now,
32+
}
33+
}
34+
35+
pub async fn add_reviewers(
36+
&self,
37+
cl_link: &str,
38+
reviewers: Vec<String>,
39+
) -> Result<(), MegaError> {
40+
for reviewer in reviewers {
41+
let new_reviewer = self.new_reviewer(cl_link, &reviewer);
42+
let a_model: mega_cl_reviewer::ActiveModel = new_reviewer.into_active_model();
43+
a_model.insert(self.get_connection()).await.map_err(|e| {
44+
tracing::error!("{}", e);
45+
MegaError::with_message(format!("reviewer {}", reviewer.clone()))
46+
})?;
47+
}
48+
Ok(())
49+
}
50+
51+
pub async fn remove_reviewers(
52+
&self,
53+
cl_link: &str,
54+
reviewers: Vec<String>,
55+
) -> Result<(), MegaError> {
56+
for reviewer in reviewers {
57+
mega_cl_reviewer::Entity::delete_many()
58+
.filter(mega_cl_reviewer::Column::ClLink.eq(cl_link))
59+
.filter(mega_cl_reviewer::Column::Username.eq(reviewer.clone()))
60+
.exec(self.get_connection())
61+
.await
62+
.map_err(|e| {
63+
tracing::error!("{}", e);
64+
MegaError::with_message(format!("fail to remove reviewer {}", reviewer.clone()))
65+
})?;
66+
}
67+
Ok(())
68+
}
69+
70+
pub async fn is_reviewer(&self, cl_link: &str, username: &str) -> Result<bool, MegaError> {
71+
let is_reviewer = mega_cl_reviewer::Entity::find()
72+
.filter(mega_cl_reviewer::Column::ClLink.eq(cl_link))
73+
.filter(mega_cl_reviewer::Column::Username.eq(username))
74+
.one(self.get_connection())
75+
.await
76+
.map_err(|e| {
77+
tracing::error!("Error finding the reviewer: {}", e);
78+
e
79+
})?
80+
.is_some();
81+
82+
Ok(is_reviewer)
83+
}
84+
85+
pub async fn list_reviewers(
86+
&self,
87+
cl_link: &str,
88+
) -> Result<Vec<mega_cl_reviewer::Model>, MegaError> {
89+
let reviewers = mega_cl_reviewer::Entity::find()
90+
.filter(mega_cl_reviewer::Column::ClLink.eq(cl_link))
91+
.all(self.get_connection())
92+
.await
93+
.map_err(|e| {
94+
tracing::error!("{}", e);
95+
MegaError::with_message(format!("fail to list reviewers for {cl_link}"))
96+
})?;
97+
Ok(reviewers)
98+
}
99+
100+
pub async fn reviewer_change_state(
101+
&self,
102+
cl_link: &str,
103+
reviewer_username: &str,
104+
approved: bool,
105+
) -> Result<(), MegaError> {
106+
let mut rev: mega_cl_reviewer::ActiveModel = mega_cl_reviewer::Entity::find()
107+
.filter(mega_cl_reviewer::Column::ClLink.eq(cl_link))
108+
.filter(mega_cl_reviewer::Column::Username.eq(reviewer_username))
109+
.one(self.get_connection())
110+
.await
111+
.map_err(|e| {
112+
tracing::error!("{}", e);
113+
MegaError::with_message(format!("fail to find reviewer {}", reviewer_username))
114+
})?
115+
.ok_or_else(|| {
116+
MegaError::with_message(format!("reviewer {} not found", reviewer_username))
117+
})?
118+
.into_active_model();
119+
120+
rev.approved = Set(approved);
121+
rev.updated_at = Set(chrono::Utc::now().naive_utc());
122+
rev.update(self.get_connection()).await.map_err(|e| {
123+
tracing::error!("{}", e);
124+
MegaError::with_message(format!("fail to update reviewer {}", reviewer_username))
125+
})?;
126+
127+
Ok(())
128+
}
129+
}

mono/src/api/router/cl_router.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -634,12 +634,18 @@ async fn review_resolve(
634634
Path(link): Path<String>,
635635
Json(payload): Json<ChangeReviewStatePayload>,
636636
) -> Result<Json<CommonResult<String>>, ApiError> {
637-
state
637+
let res = state
638638
.storage
639-
.cl_storage()
640-
.is_assignee(&link, &user.username)
639+
.reviewer_storage()
640+
.is_reviewer(&link, &user.username)
641641
.await?;
642642

643+
if !res {
644+
return Err(ApiError::from(MegaError::with_message(
645+
"Only reviewer can resolve the review comments",
646+
)));
647+
}
648+
643649
state
644650
.storage
645651
.conversation_storage()

0 commit comments

Comments
 (0)