feat: update, replace, delete on user object, first draft
This commit is contained in:
@@ -1,11 +1,9 @@
|
||||
use crate::admin::domain::AdminRepository;
|
||||
use crate::admin::domain::*;
|
||||
use crate::admin::state::AdminRegistry;
|
||||
use async_trait::async_trait;
|
||||
use entity;
|
||||
use log::{debug, warn};
|
||||
use sea_orm::{ActiveModelTrait, Database, DatabaseConnection, EntityTrait, Set};
|
||||
use serde_json::{json, Value};
|
||||
use log::debug;
|
||||
use sea_orm::{ActiveModelTrait, DatabaseConnection, EntityTrait, ModelTrait, Set};
|
||||
use serde_json::Value;
|
||||
|
||||
struct UserRepository {
|
||||
connection: DatabaseConnection,
|
||||
@@ -99,6 +97,31 @@ impl AdminRepository for UserRepository {
|
||||
id: LookupKey,
|
||||
data: Value,
|
||||
) -> Option<RepositoryItem> {
|
||||
if let LookupKey::Integer(id) = id {
|
||||
let id: i32 = id as i32; // use try_into() instead.
|
||||
let user: Option<entity::user::Model> = entity::User::find_by_id(id)
|
||||
.one(&self.connection)
|
||||
.await
|
||||
.unwrap();
|
||||
let mut user: entity::user::ActiveModel = user.unwrap().into();
|
||||
|
||||
// change values
|
||||
if let Some(value) = data.get("username") {
|
||||
if let Some(value) = value.as_str() {
|
||||
user.username = Set(value.to_owned());
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(value) = data.get("description") {
|
||||
user.description = Set(value.as_str().map(|s| s.to_owned()));
|
||||
}
|
||||
|
||||
// update
|
||||
if let Ok(user) = user.update(&self.connection).await {
|
||||
let id = user.id.to_string();
|
||||
return Some(model.build_item(&*id, serde_json::to_value(&user).unwrap()));
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
@@ -108,10 +131,21 @@ impl AdminRepository for UserRepository {
|
||||
id: LookupKey,
|
||||
data: Value,
|
||||
) -> Option<RepositoryItem> {
|
||||
None
|
||||
self.update(model, id, data).await
|
||||
}
|
||||
|
||||
async fn delete(&mut self, _: &RepositoryContext, id: LookupKey) -> Option<Value> {
|
||||
if let LookupKey::Integer(id) = id {
|
||||
let id: i32 = id as i32; // use try_into() instead.
|
||||
let user: Option<entity::user::Model> = entity::User::find_by_id(id)
|
||||
.one(&self.connection)
|
||||
.await
|
||||
.unwrap();
|
||||
if let Some(user) = user {
|
||||
let delete_result = user.delete(&self.connection).await.unwrap();
|
||||
debug!("deleted rows: {}", delete_result.rows_affected);
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user