feat: update, replace, delete on user object, first draft
This commit is contained in:
parent
3d559f8ae5
commit
1f6d8a406b
@ -41,7 +41,7 @@ pub struct AdminContext {
|
||||
impl Default for AdminContext {
|
||||
fn default() -> Self {
|
||||
AdminContext {
|
||||
base: None,
|
||||
base: None, // TODO: what is this used for?
|
||||
language_code: Some("en-us".to_string()), // Default language code
|
||||
language_bidi: Some(false), // Default language bidi
|
||||
user: None, //UserType::default(), // Assuming UserType has a Default impl
|
||||
@ -117,7 +117,7 @@ pub async fn list_item_collection<S: AdminState + Clone + Send + Sync + 'static>
|
||||
let repo = repo.lock().await;
|
||||
let admin_model = registry
|
||||
.get_model(&app_key, &model_key)
|
||||
.expect("Admin Model not found?");
|
||||
.expect("Admin Model not found?"); // we will need a proper error route; so something that implements IntoResponse and can be substituted in the unwraps and expects.
|
||||
AdminContext {
|
||||
base: base_template(&headers),
|
||||
available_apps: registry.get_apps(),
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user