diff --git a/Cargo.lock b/Cargo.lock index 0244245..5e364cc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -51,7 +51,7 @@ checksum = "a564d521dd56509c4c47480d00b80ee55f7e385ae48db5744c67ad50c92d2ebf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.28", ] [[package]] @@ -121,7 +121,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.28", ] [[package]] @@ -771,7 +771,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.28", ] [[package]] @@ -802,7 +802,7 @@ checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.28", ] [[package]] @@ -981,7 +981,7 @@ dependencies = [ [[package]] name = "rpkm66-rust-proto" version = "0.1.0" -source = "git+https://github.com/isd-sgcu/rpkm66-rust-proto?branch=beta#5f7ec03e2ead852f8487ee5121376e36bcb4d37f" +source = "git+https://github.com/isd-sgcu/rpkm66-rust-proto?branch=beta#7cedaba127f36c85e1037336dc0e737080ed5b75" dependencies = [ "prost", "serde", @@ -1009,7 +1009,7 @@ dependencies = [ "quote", "rust-embed-utils", "shellexpand", - "syn 2.0.26", + "syn 2.0.28", "walkdir", ] @@ -1081,22 +1081,22 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.178" +version = "1.0.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60363bdd39a7be0266a520dab25fdc9241d2f987b08a01e01f0ec6d06a981348" +checksum = "0ea67f183f058fe88a4e3ec6e2788e003840893b91bac4559cabedd00863b3ed" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.178" +version = "1.0.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28482318d6641454cb273da158647922d1be6b5a2fcc6165cd89ebdd7ed576b" +checksum = "24e744d7782b686ab3b73267ef05697159cc0e5abbed3f47f9933165e5219036" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.28", ] [[package]] @@ -1216,9 +1216,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.26" +version = "2.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45c3457aacde3c65315de5031ec191ce46604304d2446e803d71ade03308d970" +checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567" dependencies = [ "proc-macro2", "quote", @@ -1248,7 +1248,7 @@ checksum = "d14928354b01c4d6a4f0e549069adef399a284e7995c7ccca94e8a07a5346c59" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.28", ] [[package]] @@ -1297,7 +1297,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.28", ] [[package]] @@ -1434,7 +1434,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.28", ] [[package]] @@ -1526,7 +1526,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.26", + "syn 2.0.28", "uuid", ] diff --git a/src/doc.rs b/src/doc.rs index 8cef597..e343deb 100644 --- a/src/doc.rs +++ b/src/doc.rs @@ -12,6 +12,7 @@ use utoipa::{ crate::handler::auth::refresh_token, crate::handler::file::upload, crate::handler::user::update, + crate::handler::user::update_personality, crate::handler::group::find_one, crate::handler::group::find_by_token, crate::handler::group::join, @@ -59,6 +60,7 @@ use utoipa::{ crate::dto::CheckinResponse, crate::dto::RedeemItemResponse, crate::dto::HasRedeemItemResponse, + crate::dto::UpdatePersonality )), info( title = "RPKM66", diff --git a/src/dto/user.rs b/src/dto/user.rs index 9f1d237..f4187e0 100644 --- a/src/dto/user.rs +++ b/src/dto/user.rs @@ -25,6 +25,7 @@ pub struct User { is_verify: bool, baan_id: String, is_got_ticket: bool, + personality_game: String, } into_dto!( @@ -52,7 +53,8 @@ into_dto!( can_select_baan, is_verify, baan_id, - is_got_ticket + is_got_ticket, + personality_game ); #[derive(serde::Deserialize, ToSchema)] @@ -74,6 +76,11 @@ pub struct UpdateUser { want_bottle: bool, } +#[derive(serde::Deserialize, ToSchema)] +pub struct UpdatePersonality { + pub personality: String, +} + impl UpdateUser { pub fn into_proto( self, diff --git a/src/handler/user.rs b/src/handler/user.rs index 8c2e10d..538286b 100644 --- a/src/handler/user.rs +++ b/src/handler/user.rs @@ -1,6 +1,9 @@ use axum::{extract::State, response::IntoResponse, Json}; -use crate::{dto::UpdateUser, middleware::auth::Cred}; +use crate::{ + dto::{UpdatePersonality, UpdateUser}, + middleware::auth::Cred, +}; #[derive(Clone)] pub struct Handler { @@ -40,3 +43,31 @@ pub async fn update( .await .map(Json) } + +#[utoipa::path( + patch, + path = "/user/personality", + tag = "User", + request_body = UpdatePersonality, + responses( + (status = 200, description = "Success", body = User), + (status = 400, description = "Bad format"), + (status = 401, description = "Unauthorized"), + ), + security( + ("api_key" = []), + ), +)] +pub async fn update_personality( + State(handler): State, + cred: Cred, + Json(updated_personality): Json, +) -> impl IntoResponse { + let user_id = cred.user_id; + + handler + .service + .update_personality(user_id, updated_personality.personality) + .await + .map(Json) +} diff --git a/src/main.rs b/src/main.rs index 724fede..36d5efc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -115,7 +115,11 @@ async fn main() { let group_svc = service::group::Service::new(group_client.clone()); let ci_staff_svc = service::staff::Service::new(ci_staff_client.clone()); let ci_user_svc = service::ci_user::Service::new(ci_user_client.clone()); - let estamp_svc = service::estamp::Service::new(event_client.clone(), ci_user_client.clone()); + let estamp_svc = service::estamp::Service::new( + event_client.clone(), + ci_user_client.clone(), + config.app.clone(), + ); let checkin_svc = service::checkin::Service::new(ci_user_client.clone(), config.app.clone()); let auth_hdr = handler::auth::Handler::new(auth_svc.clone(), user_svc.clone()); @@ -155,6 +159,10 @@ async fn main() { .route("/auth/refreshToken", post(handler::auth::refresh_token)) .route("/file/upload", post(handler::file::upload)) .route("/user", patch(handler::user::update)) + .route( + "/user/personality", + patch(handler::user::update_personality), + ) .route("/group", get(handler::group::find_one)) .route("/group/:token", get(handler::group::find_by_token)) .route("/group/:token", post(handler::group::join)) diff --git a/src/service/user.rs b/src/service/user.rs index 076a142..8140d6f 100644 --- a/src/service/user.rs +++ b/src/service/user.rs @@ -47,4 +47,21 @@ impl Service { .user .ok_or(Error::InternalServer) } + + pub async fn update_personality( + &self, + user_id: String, + updated_personality: String, + ) -> Result { + self.client + .clone() + .update_personality_game(UpdatePersonalityGameRequest { + id: user_id, + personality_game: updated_personality, + }) + .await? + .into_inner() + .user + .ok_or(Error::InternalServer) + } }