member, member_bank_account are modified

This commit is contained in:
병준 박 2022-08-24 06:38:09 +00:00
parent 2aea4f1a16
commit 629527eebf
14 changed files with 359 additions and 56 deletions

View File

@ -38,7 +38,7 @@ tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
tokio-cron-scheduler = { version = "0" } tokio-cron-scheduler = { version = "0" }
uuid = { version = "0", features = ["serde", "v4", "v5"] } uuid = { version = "0", features = ["serde", "v4", "v5"] }
beteran-protobuf-rust = { git = "https://gitlab.loafle.net/bet/beteran-protobuf-rust.git", tag = "v0.1.72-snapshot" } beteran-protobuf-rust = { git = "https://gitlab.loafle.net/bet/beteran-protobuf-rust.git", tag = "v0.1.73-snapshot" }
beteran-common-rust = { git = "https://gitlab.loafle.net/bet/beteran-common-rust.git", tag = "v0.1.56-snapshot" } beteran-common-rust = { git = "https://gitlab.loafle.net/bet/beteran-common-rust.git", tag = "v0.1.57-snapshot" }
[build-dependencies] [build-dependencies]

View File

@ -72,11 +72,17 @@ pub struct ModifyMember {
/// ///
pub member_level_id: Option<uuid::Uuid>, pub member_level_id: Option<uuid::Uuid>,
/// ///
pub password: Option<String>,
///
pub mobile_phone_number: Option<String>, pub mobile_phone_number: Option<String>,
} }
///
#[derive(AsChangeset, Debug, Clone)]
#[table_name = "members"]
pub struct ModifyMemberForPassword {
///
pub password: String,
}
/// ///
#[derive(AsChangeset, Debug, Clone)] #[derive(AsChangeset, Debug, Clone)]
#[table_name = "members"] #[table_name = "members"]

View File

@ -275,6 +275,21 @@ impl Repository {
.map(|c| c as u64) .map(|c| c as u64)
} }
///
pub fn update_password(
&self,
conn: &diesel::PgConnection,
id: uuid::Uuid,
modify: &models::ModifyMemberForPassword,
) -> Result<u64, Error> {
use members::dsl;
diesel::update(dsl::members.filter(dsl::id.eq(id)))
.set(modify)
.execute(conn)
.map(|c| c as u64)
}
/// ///
pub fn update_state( pub fn update_state(
&self, &self,

View File

@ -54,11 +54,17 @@ pub struct ModifyMemberBankAccount {
/// ///
pub account_number: String, pub account_number: String,
/// ///
pub exchange_password: String,
///
pub memo: Option<String>, pub memo: Option<String>,
} }
///
#[derive(AsChangeset, Debug, Clone)]
#[table_name = "member_bank_accounts"]
pub struct ModifyMemberBankAccountForExchangePassword {
///
pub exchange_password: String,
}
/// ///
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct FindAllSearch { pub struct FindAllSearch {

View File

@ -197,6 +197,21 @@ impl Repository {
.map(|c| c as u64) .map(|c| c as u64)
} }
///
pub fn update_exchange_password(
&self,
conn: &diesel::PgConnection,
id: uuid::Uuid,
modify: &models::ModifyMemberBankAccountForExchangePassword,
) -> Result<u64, Error> {
use member_bank_accounts::dsl;
diesel::update(dsl::member_bank_accounts.filter(dsl::id.eq(id)))
.set(modify)
.execute(conn)
.map(|c| c as u64)
}
/// ///
pub fn delete(&self, conn: &diesel::PgConnection, id: uuid::Uuid) -> Result<u64, Error> { pub fn delete(&self, conn: &diesel::PgConnection, id: uuid::Uuid) -> Result<u64, Error> {
use member_bank_accounts::dsl; use member_bank_accounts::dsl;

View File

@ -283,12 +283,12 @@ impl Service {
pagination: request pagination: request
.pagination .pagination
.as_ref() .as_ref()
.map(|d| bcr::models::pagination::Pagination::from(d)), .map(bcr::models::pagination::Pagination::from),
sorts: Some( sorts: Some(
request request
.sorts .sorts
.iter() .iter()
.map(|d| beteran_common_rust::models::pagination::Sort::from(d)) .map(beteran_common_rust::models::pagination::Sort::from)
.collect(), .collect(),
), ),
}; };

View File

@ -70,6 +70,7 @@ impl Service<'_> {
self.get_member(), self.get_member(),
self.get_member_by_username(), self.get_member_by_username(),
self.update_member(), self.update_member(),
self.update_member_for_password(),
self.update_member_for_state(), self.update_member_for_state(),
self.delete_member(), self.delete_member(),
) )
@ -1153,28 +1154,9 @@ impl Service<'_> {
}) })
})?; })?;
let password_hash = match request.password {
Some(p) => match argon2::hash_encoded(
p.as_bytes(),
self.password_salt.as_bytes(),
&self.argon2_config,
) {
Ok(p) => Some(p),
Err(e) => {
return Err(bcr::error::rpc::Error::Server(bcr::error::rpc::Server {
code: bpr::protobuf::rpc::Error::SERVER_00,
message: format!("server {}", e),
data: None,
}));
}
},
None => None,
};
let modify_member = repositories::member::models::ModifyMember { let modify_member = repositories::member::models::ModifyMember {
site_id, site_id,
member_level_id, member_level_id,
password: password_hash,
mobile_phone_number: request.mobile_phone_number, mobile_phone_number: request.mobile_phone_number,
}; };
@ -1216,25 +1198,11 @@ impl Service<'_> {
}) })
})?; })?;
let exchange_password_hash = argon2::hash_encoded(
a.exchange_password.as_bytes(),
self.password_salt.as_bytes(),
&self.argon2_config,
)
.map_err(|e| {
bcr::error::rpc::Error::Server(bcr::error::rpc::Server {
code: bpr::protobuf::rpc::Error::SERVER_00,
message: format!("server {}", e),
data: None,
})
})?;
let modify_member_bank_account = let modify_member_bank_account =
repositories::member_bank_account::models::ModifyMemberBankAccount { repositories::member_bank_account::models::ModifyMemberBankAccount {
bank_id, bank_id,
name: a.name, name: a.name,
account_number: a.account_number, account_number: a.account_number,
exchange_password: exchange_password_hash,
memo: None, memo: None,
}; };
self self
@ -1385,6 +1353,154 @@ impl Service<'_> {
Ok(()) Ok(())
} }
async fn update_member_for_password(&self) -> Result<(), Box<dyn std::error::Error>> {
let s = self
.connection_broker
.queue_subscribe(
bpr::ss::member::SUBJECT_UPDATE_MEMBER_FOR_PASSWORD,
self.queue_broker.as_str(),
)
.await?;
while let Some(message) = s.next().await {
if let Err(e) = async {
let req = bpr::ss::member::UpdateMemberForPasswordRequest::decode(message.data.as_slice())
.map_err(|e| {
bcr::error::rpc::Error::InvalidRequest(bcr::error::rpc::InvalidRequest {
message: format!("invalid request: {}", e),
})
})?;
let client = match req.client {
Some(c) => c,
None => {
return Err(bcr::error::rpc::Error::InvalidParams(
bcr::error::rpc::InvalidParams {
message: "invalid client information".to_string(),
detail: bcr::error::rpc::InvalidParamsDetail {
location: "request".to_string(),
param: "client".to_string(),
value: "".to_string(),
error_type: bcr::error::rpc::InvalidParamsType::Required,
message: "".to_string(),
},
},
));
}
};
let request = match req.request {
Some(r) => r,
None => {
return Err(bcr::error::rpc::Error::InvalidParams(
bcr::error::rpc::InvalidParams {
message: "invalid request information".to_string(),
detail: bcr::error::rpc::InvalidParamsDetail {
location: "request".to_string(),
param: "request".to_string(),
value: "".to_string(),
error_type: bcr::error::rpc::InvalidParamsType::Required,
message: "".to_string(),
},
},
));
}
};
let id = uuid::Uuid::from_str(request.id.as_str()).map_err(|e| {
bcr::error::rpc::Error::InvalidParams(bcr::error::rpc::InvalidParams {
message: "invalid id param".to_string(),
detail: bcr::error::rpc::InvalidParamsDetail {
location: "request".to_string(),
param: "id".to_string(),
value: request.id.clone(),
error_type: bcr::error::rpc::InvalidParamsType::Required,
message: e.to_string(),
},
})
})?;
let conn = self.pool.get().map_err(|e| {
bcr::error::rpc::Error::Server(bcr::error::rpc::Server {
code: bpr::protobuf::rpc::Error::SERVER_00,
message: format!("server {}", e),
data: None,
})
})?;
let password_hash = match argon2::hash_encoded(
request.password.as_bytes(),
self.password_salt.as_bytes(),
&self.argon2_config,
) {
Ok(p) => p,
Err(e) => {
return Err(bcr::error::rpc::Error::Server(bcr::error::rpc::Server {
code: bpr::protobuf::rpc::Error::SERVER_00,
message: format!("server {}", e),
data: None,
}));
}
};
let modify_member_for_password = repositories::member::models::ModifyMemberForPassword {
password: password_hash,
};
let _affected = self
.member_repository
.update_password(&conn, id, &modify_member_for_password)
.map_err(|e| {
bcr::error::rpc::Error::Server(bcr::error::rpc::Server {
code: bpr::protobuf::rpc::Error::SERVER_00,
message: format!("server {}", e),
data: None,
})
})?;
let m = self.member_composition.select(&conn, id).map_err(|e| {
bcr::error::rpc::Error::Server(bcr::error::rpc::Server {
code: bpr::protobuf::rpc::Error::SERVER_00,
message: format!("server {}", e),
data: None,
})
})?;
message
.respond(
bpr::ss::member::UpdateMemberForPasswordResponse {
error: None,
result: Some(bpr::ss::member::update_member_for_password_response::Result {}),
}
.encode_to_vec(),
)
.await
.map_err(|e| {
bcr::error::rpc::Error::Server(bcr::error::rpc::Server {
code: bpr::protobuf::rpc::Error::SERVER_00,
message: format!("server {}", e),
data: None,
})
})?;
Ok::<(), bcr::error::rpc::Error>(())
}
.await
{
message
.respond(
bpr::ss::member::UpdateMemberForPasswordResponse {
error: Some(bpr::protobuf::rpc::Error::from(e)),
result: None,
}
.encode_to_vec(),
)
.await?;
}
}
Ok(())
}
async fn update_member_for_state(&self) -> Result<(), Box<dyn std::error::Error>> { async fn update_member_for_state(&self) -> Result<(), Box<dyn std::error::Error>> {
let s = self let s = self
.connection_broker .connection_broker

View File

@ -54,6 +54,7 @@ impl Service {
self.list_member_bank_accounts(), self.list_member_bank_accounts(),
self.get_member_bank_account(), self.get_member_bank_account(),
self.update_member_bank_account(), self.update_member_bank_account(),
self.update_member_bank_account_for_exchange_password(),
self.delete_member_bank_account(), self.delete_member_bank_account(),
) )
.map(|_| ()) .map(|_| ())
@ -363,12 +364,12 @@ impl Service {
pagination: request pagination: request
.pagination .pagination
.as_ref() .as_ref()
.map(|d| bcr::models::pagination::Pagination::from(d)), .map(bcr::models::pagination::Pagination::from),
sorts: Some( sorts: Some(
request request
.sorts .sorts
.iter() .iter()
.map(|d| beteran_common_rust::models::pagination::Sort::from(d)) .map(beteran_common_rust::models::pagination::Sort::from)
.collect(), .collect(),
), ),
}; };
@ -661,7 +662,6 @@ impl Service {
bank_id, bank_id,
name: request.name, name: request.name,
account_number: request.account_number, account_number: request.account_number,
exchange_password: request.exchange_password,
memo: request.memo, memo: request.memo,
}, },
) )
@ -725,6 +725,151 @@ impl Service {
Ok(()) Ok(())
} }
async fn update_member_bank_account_for_exchange_password(
&self,
) -> Result<(), Box<dyn std::error::Error>> {
let s = self
.connection_broker
.queue_subscribe(
bpr::ss::member_bank_account::SUBJECT_UPDATE_MEMBER_BANK_ACCOUNT_FOR_EXCHANGE_PASSWORD,
self.queue_broker.as_str(),
)
.await?;
while let Some(message) = s.next().await {
if let Err(e) = async {
let req =
bpr::ss::member_bank_account::UpdateMemberBankAccountForExchangePasswordRequest::decode(
message.data.as_slice(),
)
.map_err(|e| {
bcr::error::rpc::Error::InvalidRequest(bcr::error::rpc::InvalidRequest {
message: format!("invalid request: {}", e),
})
})?;
let client = match req.client {
Some(c) => c,
None => {
return Err(bcr::error::rpc::Error::InvalidParams(
bcr::error::rpc::InvalidParams {
message: "invalid client information".to_string(),
detail: bcr::error::rpc::InvalidParamsDetail {
location: "request".to_string(),
param: "client".to_string(),
value: "".to_string(),
error_type: bcr::error::rpc::InvalidParamsType::Required,
message: "".to_string(),
},
},
));
}
};
let request = match req.request {
Some(r) => r,
None => {
return Err(bcr::error::rpc::Error::InvalidParams(
bcr::error::rpc::InvalidParams {
message: "invalid request information".to_string(),
detail: bcr::error::rpc::InvalidParamsDetail {
location: "request".to_string(),
param: "request".to_string(),
value: "".to_string(),
error_type: bcr::error::rpc::InvalidParamsType::Required,
message: "".to_string(),
},
},
));
}
};
let id = uuid::Uuid::from_str(request.id.as_str()).map_err(|e| {
bcr::error::rpc::Error::InvalidParams(bcr::error::rpc::InvalidParams {
message: "invalid id param".to_string(),
detail: bcr::error::rpc::InvalidParamsDetail {
location: "request".to_string(),
param: "id".to_string(),
value: request.id.clone(),
error_type: bcr::error::rpc::InvalidParamsType::Required,
message: e.to_string(),
},
})
})?;
let conn = self.pool.get().map_err(|e| {
bcr::error::rpc::Error::Server(bcr::error::rpc::Server {
code: bpr::protobuf::rpc::Error::SERVER_00,
message: format!("server {}", e),
data: None,
})
})?;
let _affected = self
.member_bank_account_repository
.update_exchange_password(
&conn,
id,
&repositories::member_bank_account::models::ModifyMemberBankAccountForExchangePassword {
exchange_password: request.exchange_password,
},
)
.map_err(|e| {
bcr::error::rpc::Error::Server(bcr::error::rpc::Server {
code: bpr::protobuf::rpc::Error::SERVER_00,
message: format!("server {}", e),
data: None,
})
})?;
let s = self
.member_bank_account_repository
.select(&conn, id)
.map_err(|e| {
bcr::error::rpc::Error::Server(bcr::error::rpc::Server {
code: bpr::protobuf::rpc::Error::SERVER_00,
message: format!("server {}", e),
data: None,
})
})?;
message
.respond(
bpr::ss::member_bank_account::UpdateMemberBankAccountForExchangePasswordResponse {
error: None,
result: Some(
bpr::ss::member_bank_account::update_member_bank_account_for_exchange_password_response::Result {
},
),
}
.encode_to_vec(),
)
.await
.map_err(|e| {
bcr::error::rpc::Error::Server(bcr::error::rpc::Server {
code: bpr::protobuf::rpc::Error::SERVER_00,
message: format!("server {}", e),
data: None,
})
})?;
Ok::<(), bcr::error::rpc::Error>(())
}
.await
{
message
.respond(
bpr::ss::member_bank_account::UpdateMemberBankAccountForExchangePasswordResponse {
error: Some(bpr::protobuf::rpc::Error::from(e)),
result: None,
}
.encode_to_vec(),
)
.await?;
}
}
Ok(())
}
async fn delete_member_bank_account(&self) -> Result<(), Box<dyn std::error::Error>> { async fn delete_member_bank_account(&self) -> Result<(), Box<dyn std::error::Error>> {
let s = self let s = self
.connection_broker .connection_broker

View File

@ -332,12 +332,12 @@ impl Service {
pagination: request pagination: request
.pagination .pagination
.as_ref() .as_ref()
.map(|d| bcr::models::pagination::Pagination::from(d)), .map(bcr::models::pagination::Pagination::from),
sorts: Some( sorts: Some(
request request
.sorts .sorts
.iter() .iter()
.map(|d| beteran_common_rust::models::pagination::Sort::from(d)) .map(beteran_common_rust::models::pagination::Sort::from)
.collect(), .collect(),
), ),
}; };

View File

@ -335,12 +335,12 @@ impl Service {
pagination: request pagination: request
.pagination .pagination
.as_ref() .as_ref()
.map(|d| bcr::models::pagination::Pagination::from(d)), .map(bcr::models::pagination::Pagination::from),
sorts: Some( sorts: Some(
request request
.sorts .sorts
.iter() .iter()
.map(|d| beteran_common_rust::models::pagination::Sort::from(d)) .map(beteran_common_rust::models::pagination::Sort::from)
.collect(), .collect(),
), ),
}; };

View File

@ -299,12 +299,12 @@ impl Service {
pagination: request pagination: request
.pagination .pagination
.as_ref() .as_ref()
.map(|d| bcr::models::pagination::Pagination::from(d)), .map(bcr::models::pagination::Pagination::from),
sorts: Some( sorts: Some(
request request
.sorts .sorts
.iter() .iter()
.map(|d| beteran_common_rust::models::pagination::Sort::from(d)) .map(beteran_common_rust::models::pagination::Sort::from)
.collect(), .collect(),
), ),
}; };

View File

@ -326,12 +326,12 @@ impl Service {
pagination: request pagination: request
.pagination .pagination
.as_ref() .as_ref()
.map(|d| bcr::models::pagination::Pagination::from(d)), .map(bcr::models::pagination::Pagination::from),
sorts: Some( sorts: Some(
request request
.sorts .sorts
.iter() .iter()
.map(|d| beteran_common_rust::models::pagination::Sort::from(d)) .map(beteran_common_rust::models::pagination::Sort::from)
.collect(), .collect(),
), ),
}; };

View File

@ -278,12 +278,12 @@ impl Service {
pagination: request pagination: request
.pagination .pagination
.as_ref() .as_ref()
.map(|d| bcr::models::pagination::Pagination::from(d)), .map(bcr::models::pagination::Pagination::from),
sorts: Some( sorts: Some(
request request
.sorts .sorts
.iter() .iter()
.map(|d| beteran_common_rust::models::pagination::Sort::from(d)) .map(beteran_common_rust::models::pagination::Sort::from)
.collect(), .collect(),
), ),
}; };

View File

@ -343,12 +343,12 @@ impl Service {
pagination: request pagination: request
.pagination .pagination
.as_ref() .as_ref()
.map(|d| bcr::models::pagination::Pagination::from(d)), .map(bcr::models::pagination::Pagination::from),
sorts: Some( sorts: Some(
request request
.sorts .sorts
.iter() .iter()
.map(|d| beteran_common_rust::models::pagination::Sort::from(d)) .map(beteran_common_rust::models::pagination::Sort::from)
.collect(), .collect(),
), ),
}; };