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 {
|
impl Default for AdminContext {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
AdminContext {
|
AdminContext {
|
||||||
base: None,
|
base: None, // TODO: what is this used for?
|
||||||
language_code: Some("en-us".to_string()), // Default language code
|
language_code: Some("en-us".to_string()), // Default language code
|
||||||
language_bidi: Some(false), // Default language bidi
|
language_bidi: Some(false), // Default language bidi
|
||||||
user: None, //UserType::default(), // Assuming UserType has a Default impl
|
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 repo = repo.lock().await;
|
||||||
let admin_model = registry
|
let admin_model = registry
|
||||||
.get_model(&app_key, &model_key)
|
.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 {
|
AdminContext {
|
||||||
base: base_template(&headers),
|
base: base_template(&headers),
|
||||||
available_apps: registry.get_apps(),
|
available_apps: registry.get_apps(),
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
use crate::admin::domain::AdminRepository;
|
|
||||||
use crate::admin::domain::*;
|
use crate::admin::domain::*;
|
||||||
use crate::admin::state::AdminRegistry;
|
use crate::admin::state::AdminRegistry;
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use entity;
|
use log::debug;
|
||||||
use log::{debug, warn};
|
use sea_orm::{ActiveModelTrait, DatabaseConnection, EntityTrait, ModelTrait, Set};
|
||||||
use sea_orm::{ActiveModelTrait, Database, DatabaseConnection, EntityTrait, Set};
|
use serde_json::Value;
|
||||||
use serde_json::{json, Value};
|
|
||||||
|
|
||||||
struct UserRepository {
|
struct UserRepository {
|
||||||
connection: DatabaseConnection,
|
connection: DatabaseConnection,
|
||||||
@ -99,6 +97,31 @@ impl AdminRepository for UserRepository {
|
|||||||
id: LookupKey,
|
id: LookupKey,
|
||||||
data: Value,
|
data: Value,
|
||||||
) -> Option<RepositoryItem> {
|
) -> 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
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,10 +131,21 @@ impl AdminRepository for UserRepository {
|
|||||||
id: LookupKey,
|
id: LookupKey,
|
||||||
data: Value,
|
data: Value,
|
||||||
) -> Option<RepositoryItem> {
|
) -> Option<RepositoryItem> {
|
||||||
None
|
self.update(model, id, data).await
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn delete(&mut self, _: &RepositoryContext, id: LookupKey) -> Option<Value> {
|
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
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user