feat: moving associated type working into the repository

This commit is contained in:
2024-06-01 17:37:50 +02:00
parent d1abc6b6c2
commit 1eea8b58c1
5 changed files with 92 additions and 78 deletions
+50 -32
View File
@@ -9,8 +9,7 @@ use crate::admin::domain::{AdminApp, AdminModel};
use crate::admin::state::AdminState;
use serde::{Deserialize, Serialize};
use super::domain::repository::PrimaryKeyType;
use super::domain::{LookupKey, RepositoryInfo, RepositoryItem, RepositoryList};
use super::domain::{RepositoryInfo, RepositoryItem, RepositoryList};
#[derive(Serialize, Deserialize)]
pub struct AdminRequest {
@@ -158,15 +157,22 @@ pub async fn view_item_details<S: AdminState + Clone + Send + Sync + 'static>(
let admin_model = registry
.get_model(&app_key, &model_key)
.expect("Admin Model not found?");
let key: Box<dyn PrimaryKeyType> = Box::new(id);
AdminContext {
base: base_template(&headers),
available_apps: registry.get_apps(),
item_info: Some(repo.info(&admin_model).await),
item_list: repo.list(&admin_model).await,
item: repo.get(&admin_model, key.as_ref()).await,
item_model: Some(admin_model),
..Default::default()
if let Some(key) = repo.key_from_string(id) {
AdminContext {
base: base_template(&headers),
available_apps: registry.get_apps(),
item_info: Some(repo.info(&admin_model).await),
item_list: repo.list(&admin_model).await,
item: repo.get(&admin_model, key.as_ref()).await,
item_model: Some(admin_model),
..Default::default()
}
} else {
AdminContext {
base: base_template(&headers),
available_apps: registry.get_apps(),
..Default::default()
}
}
} else {
AdminContext {
@@ -258,15 +264,22 @@ pub async fn change_item<S: AdminState + Clone + Send + Sync + 'static>(
let admin_model = registry
.get_model(&app_key, &model_key)
.expect("Admin Model not found?");
let key: Box<dyn PrimaryKeyType> = Box::new(id);
AdminContext {
base: base_template(&headers),
available_apps: registry.get_apps(),
item_info: Some(repo.info(&admin_model).await),
item_list: repo.list(&admin_model).await,
item: repo.get(&admin_model, key.as_ref()).await,
item_model: Some(admin_model),
..Default::default()
if let Some(key) = repo.key_from_string(id) {
AdminContext {
base: base_template(&headers),
available_apps: registry.get_apps(),
item_info: Some(repo.info(&admin_model).await),
item_list: repo.list(&admin_model).await,
item: repo.get(&admin_model, key.as_ref()).await,
item_model: Some(admin_model),
..Default::default()
}
} else {
AdminContext {
base: base_template(&headers),
available_apps: registry.get_apps(),
..Default::default()
}
}
} else {
AdminContext {
@@ -291,18 +304,23 @@ pub async fn update_item<S: AdminState + Clone + Send + Sync + 'static>(
let admin_model = registry
.get_model(&app_key, &model_key)
.expect("Admin Model not found?");
let key: Box<dyn PrimaryKeyType> = Box::new(id);
let result = repo.update(&admin_model, key.as_ref(), form).await;
AdminContext {
base: base_template(&headers),
available_apps: registry.get_apps(),
item_info: Some(repo.info(&admin_model).await),
item_list: repo.list(&admin_model).await,
item: result,
item_model: Some(admin_model),
..Default::default()
if let Some(key) = repo.key_from_string(id) {
let result = repo.update(&admin_model, key.as_ref(), form).await;
AdminContext {
base: base_template(&headers),
available_apps: registry.get_apps(),
item_info: Some(repo.info(&admin_model).await),
item_list: repo.list(&admin_model).await,
item: result,
item_model: Some(admin_model),
..Default::default()
}
} else {
AdminContext {
base: base_template(&headers),
available_apps: registry.get_apps(),
..Default::default()
}
}
} else {
AdminContext {