Skip to content
This repository was archived by the owner on Feb 24, 2025. It is now read-only.

Commit ee951ba

Browse files
committed
refactor: use create_error instead of write structure
1 parent ead4db7 commit ee951ba

File tree

10 files changed

+209
-439
lines changed

10 files changed

+209
-439
lines changed

src/models/response.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use axum::Json;
2+
use reqwest::StatusCode;
13
use serde::{Deserialize, Serialize};
24

35
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Hash)]
@@ -18,7 +20,7 @@ pub struct SuccessResponse<T, M> {
1820
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Hash)]
1921
pub struct ErrorResponse {
2022
pub status: ResponseStatus,
21-
pub code: i32,
23+
pub code: u16,
2224
pub message: String,
2325
}
2426

@@ -32,3 +34,13 @@ pub enum Response<T, M> {
3234
pub struct MetadataSize {
3335
pub size: u64,
3436
}
37+
38+
pub fn create_error(code: StatusCode, message: String) -> (StatusCode, Json<String>) {
39+
let resposne = ErrorResponse {
40+
status: ResponseStatus::Error,
41+
code: code.as_u16(),
42+
message,
43+
};
44+
let response = serde_json::to_string(&resposne).unwrap();
45+
(code, Json(response))
46+
}

src/routers/activities/insert.rs

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::{models::{
2-
activities::{Activity, ActivityStatus, ActivityType}, groups::GroupPermission, response::{ErrorResponse, ResponseStatus, SuccessResponse}
2+
activities::{Activity, ActivityStatus, ActivityType}, groups::GroupPermission, response::{ResponseStatus, SuccessResponse, create_error}
33
}, utils::jwt::UserData};
44
use axum::{
55
extract::{Extension, Query},
@@ -34,25 +34,13 @@ pub async fn insert_activity(
3434
} else if activity.activity_type != ActivityType::Special {
3535
activity.status = ActivityStatus::Effective;
3636
} else {
37-
let response = ErrorResponse {
38-
status: ResponseStatus::Error,
39-
code: 403,
40-
message: "Permission denied".to_string(),
41-
};
42-
let response = serde_json::to_string(&response).unwrap();
43-
return (StatusCode::FORBIDDEN, Json(response));
37+
return create_error(StatusCode::FORBIDDEN, "Permission denied".to_string());
4438
}
4539
} else {
4640
if activity.activity_type == ActivityType::Social || activity.activity_type == ActivityType::Scale {
4741
activity.status = ActivityStatus::Pending;
4842
} else {
49-
let response = ErrorResponse {
50-
status: ResponseStatus::Error,
51-
code: 403,
52-
message: "Permission denied".to_string(),
53-
};
54-
let response = serde_json::to_string(&response).unwrap();
55-
return (StatusCode::FORBIDDEN, Json(response));
43+
return create_error(StatusCode::FORBIDDEN, "Permission denied".to_string());
5644
}
5745
}
5846
// Remove the _id field if it exists
@@ -73,21 +61,15 @@ pub async fn insert_activity(
7361
let response = serde_json::to_string(&response).unwrap();
7462
(StatusCode::OK, Json(response))
7563
} else {
76-
let response = ErrorResponse {
77-
status: ResponseStatus::Error,
78-
code: 500,
79-
message: "Failed to insert activity".to_string(),
80-
};
81-
let response = serde_json::to_string(&response).unwrap();
82-
(StatusCode::INTERNAL_SERVER_ERROR, Json(response))
64+
return create_error(
65+
StatusCode::INTERNAL_SERVER_ERROR,
66+
"Failed to insert activity".to_string(),
67+
);
8368
}
8469
} else {
85-
let response = ErrorResponse {
86-
status: ResponseStatus::Error,
87-
code: 500,
88-
message: "Failed to insert activity".to_string(),
89-
};
90-
let response = serde_json::to_string(&response).unwrap();
91-
(StatusCode::INTERNAL_SERVER_ERROR, Json(response))
70+
return create_error(
71+
StatusCode::INTERNAL_SERVER_ERROR,
72+
"Failed to insert activity".to_string(),
73+
);
9274
}
9375
}

src/routers/activities/members/insert.rs

Lines changed: 25 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::{
22
models::{
33
activities::{Activity, ActivityMember},
44
groups::GroupPermission,
5-
response::{ErrorResponse, ResponseStatus, SuccessResponse},
5+
response::{create_error, ResponseStatus, SuccessResponse},
66
},
77
utils::jwt::UserData,
88
};
@@ -27,23 +27,17 @@ pub async fn insert_member_into_activity(
2727
let activity_id = ObjectId::from_str(&id).unwrap();
2828
let activity = collection.find_one(doc! {"_id": activity_id}, None).await;
2929
if let Err(_) = activity {
30-
let response = ErrorResponse {
31-
status: ResponseStatus::Error,
32-
code: 404,
33-
message: "Activity not found".to_string(),
34-
};
35-
let response = serde_json::to_string(&response).unwrap();
36-
return (StatusCode::NOT_FOUND, Json(response));
30+
return create_error(
31+
StatusCode::INTERNAL_SERVER_ERROR,
32+
"Failed to find activity".to_string(),
33+
);
3734
}
3835
let activity = activity.unwrap();
3936
if let None = activity {
40-
let response = ErrorResponse {
41-
status: ResponseStatus::Error,
42-
code: 404,
43-
message: "Activity not found".to_string(),
44-
};
45-
let response = serde_json::to_string(&response).unwrap();
46-
return (StatusCode::NOT_FOUND, Json(response));
37+
return create_error(
38+
StatusCode::NOT_FOUND,
39+
"Activity not found".to_string(),
40+
);
4741
}
4842
let activity: Activity = bson::from_document(activity.unwrap()).unwrap();
4943
let members = activity.members.unwrap_or_default();
@@ -52,32 +46,23 @@ pub async fn insert_member_into_activity(
5246
.iter()
5347
.any(|member| member._id == ObjectId::from_str(&activity_member._id.to_hex()).unwrap())
5448
{
55-
let response = ErrorResponse {
56-
status: ResponseStatus::Error,
57-
code: 400,
58-
message: "Member already exists".to_string(),
59-
};
60-
let response = serde_json::to_string(&response).unwrap();
61-
return (StatusCode::BAD_REQUEST, Json(response));
49+
return create_error(
50+
StatusCode::BAD_REQUEST,
51+
"Member already exists".to_string(),
52+
);
6253
}
6354
if user.perms.contains(&GroupPermission::Admin) || user.perms.contains(&GroupPermission::Department) {} else {
64-
let response = ErrorResponse {
65-
status: ResponseStatus::Error,
66-
code: 403,
67-
message: "Permission denied".to_string(),
68-
};
69-
let response = serde_json::to_string(&response).unwrap();
70-
return (StatusCode::FORBIDDEN, Json(response));
55+
return create_error(
56+
StatusCode::FORBIDDEN,
57+
"Permission denied".to_string(),
58+
);
7159
}
7260
let member = bson::to_document(&activity_member);
7361
if let Err(_) = member {
74-
let response = ErrorResponse {
75-
status: ResponseStatus::Error,
76-
code: 400,
77-
message: "Invalid member".to_string(),
78-
};
79-
let response = serde_json::to_string(&response).unwrap();
80-
return (StatusCode::BAD_REQUEST, Json(response));
62+
return create_error(
63+
StatusCode::BAD_REQUEST,
64+
"Invalid member".to_string(),
65+
);
8166
}
8267
let result = collection
8368
.update_one(
@@ -100,12 +85,9 @@ pub async fn insert_member_into_activity(
10085
let response = serde_json::to_string(&response).unwrap();
10186
(StatusCode::OK, Json(response))
10287
} else {
103-
let response = ErrorResponse {
104-
status: ResponseStatus::Error,
105-
code: 500,
106-
message: "Failed to insert member".to_string(),
107-
};
108-
let response = serde_json::to_string(&response).unwrap();
109-
(StatusCode::INTERNAL_SERVER_ERROR, Json(response))
88+
return create_error(
89+
StatusCode::INTERNAL_SERVER_ERROR,
90+
"Failed to insert member".to_string(),
91+
);
11092
}
11193
}

src/routers/activities/members/read.rs

Lines changed: 9 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
22
models::{
3-
activities::{Activity, ActivityMember}, groups::GroupPermission, response::{ErrorResponse, ResponseStatus, SuccessResponse}
3+
activities::{Activity, ActivityMember}, groups::GroupPermission, response::{create_error, ResponseStatus, SuccessResponse}
44
},
55
utils::{groups::same_class, jwt::UserData},
66
};
@@ -25,86 +25,38 @@ pub async fn read_member(
2525
let collection = db.collection("activities");
2626
let activity_id = ObjectId::from_str(id.as_str());
2727
if let Err(_) = activity_id {
28-
let response = ErrorResponse {
29-
status: ResponseStatus::Error,
30-
code: 400,
31-
message: "Invalid activity ID".to_string(),
32-
};
33-
let response = serde_json::to_string(&response).unwrap();
34-
return (StatusCode::BAD_REQUEST, Json(response));
28+
return create_error(StatusCode::BAD_REQUEST, "Invalid activity ID".to_string());
3529
}
3630
let activity_id = activity_id.unwrap();
3731
let member_id = ObjectId::from_str(member_id.as_str());
3832
if let Err(_) = member_id {
39-
let response = ErrorResponse {
40-
status: ResponseStatus::Error,
41-
code: 400,
42-
message: "Invalid member ID".to_string(),
43-
};
44-
let response = serde_json::to_string(&response).unwrap();
45-
return (StatusCode::BAD_REQUEST, Json(response));
33+
return create_error(StatusCode::BAD_REQUEST, "Invalid member ID".to_string());
4634
}
4735
let member_id = member_id.unwrap();
4836
let activity = collection.find_one(doc! {"_id": activity_id, "members._id": member_id}, None).await;
4937
if let Err(_) = activity {
50-
let response = ErrorResponse {
51-
status: ResponseStatus::Error,
52-
code: 404,
53-
message: "Activity not found".to_string(),
54-
};
55-
let response = serde_json::to_string(&response).unwrap();
56-
return (StatusCode::NOT_FOUND, Json(response));
38+
return create_error(StatusCode::INTERNAL_SERVER_ERROR, "Failed to find activity".to_string());
5739
}
5840
let activity = activity.unwrap();
5941
if let None = activity {
60-
let response = ErrorResponse {
61-
status: ResponseStatus::Error,
62-
code: 404,
63-
message: "Activity not found".to_string(),
64-
};
65-
let response = serde_json::to_string(&response).unwrap();
66-
return (StatusCode::NOT_FOUND, Json(response));
42+
return create_error(StatusCode::NOT_FOUND, "Activity not found".to_string());
6743
}
6844
let activity: Activity = bson::from_document(activity.unwrap()).unwrap();
6945
if user.perms.contains(&GroupPermission::Admin) || user.perms.contains(&GroupPermission::Department) || user.perms.contains(&GroupPermission::Auditor) || user.id == member_id.clone().to_string() {} else if user.perms.contains(&GroupPermission::Secretary) {
7046
let user_id = ObjectId::from_str(&user.id).unwrap();
7147
let same = same_class::validate_same_class(db_clone, member_id, user_id).await;
7248
if let Err(e) = same {
73-
let response = ErrorResponse {
74-
status: ResponseStatus::Error,
75-
code: 500,
76-
message: "Cannot validate user".to_string() + &e,
77-
};
78-
let response = serde_json::to_string(&response).unwrap();
79-
return (StatusCode::INTERNAL_SERVER_ERROR, Json(response));
49+
return create_error(StatusCode::INTERNAL_SERVER_ERROR, "Cannot validate user".to_string() + &e);
8050
}
8151
if !same.unwrap() {
82-
let response = ErrorResponse {
83-
status: ResponseStatus::Error,
84-
code: 403,
85-
message: "Permission denied".to_string(),
86-
};
87-
let response = serde_json::to_string(&response).unwrap();
88-
return (StatusCode::FORBIDDEN, Json(response));
52+
return create_error(StatusCode::FORBIDDEN, "Permission denied".to_string());
8953
}
9054
} else {
91-
let response = ErrorResponse {
92-
status: ResponseStatus::Error,
93-
code: 403,
94-
message: "Permission denied".to_string(),
95-
};
96-
let response = serde_json::to_string(&response).unwrap();
97-
return (StatusCode::FORBIDDEN, Json(response));
55+
return create_error(StatusCode::FORBIDDEN, "Permission denied".to_string());
9856
}
9957
let member = activity.members.unwrap_or_default().into_iter().find(|member| member._id == member_id);
10058
if let None = member {
101-
let response = ErrorResponse {
102-
status: ResponseStatus::Error,
103-
code: 404,
104-
message: "Member not found".to_string(),
105-
};
106-
let response = serde_json::to_string(&response).unwrap();
107-
return (StatusCode::NOT_FOUND, Json(response));
59+
return create_error(StatusCode::NOT_FOUND, "Member not found".to_string());
10860
}
10961
let member = member.unwrap();
11062
let response: SuccessResponse<ActivityMember, ()> = SuccessResponse {

0 commit comments

Comments
 (0)