diff --git a/actix_admin/actix_admin_macros/src/lib.rs b/actix_admin/actix_admin_macros/src/lib.rs index c4b81c1..b1b7cee 100644 --- a/actix_admin/actix_admin_macros/src/lib.rs +++ b/actix_admin/actix_admin_macros/src/lib.rs @@ -23,6 +23,7 @@ pub fn derive_crud_fns(input: proc_macro::TokenStream) -> proc_macro::TokenStrea use sea_orm::ActiveValue::Set; use sea_orm::{ConnectOptions, DatabaseConnection}; use sea_orm::{entity::*, query::*}; + use std::collections::HashMap; use sea_orm::EntityTrait; impl From for ActixAdminViewModel { @@ -36,24 +37,24 @@ pub fn derive_crud_fns(input: proc_macro::TokenStream) -> proc_macro::TokenStrea #[async_trait(?Send)] impl ActixAdminViewModelTrait for Entity { - async fn list(db: DatabaseConnection, page: usize, entities_per_page: usize) -> Vec { + async fn list(self, db: &DatabaseConnection, page: usize, entities_per_page: usize) -> Vec { let model = ActixAdminViewModel::from(Entity); - let entity_names = &data.get_actix_admin().entity_names; - let entities = Entity::list_model(db, 1, 5); + let entities = Entity::list_model(db, 1, 5).await; entities } - async fn create_post(db: DatabaseConnection, model: ActixAdminModel) -> ActixAdminModel{ + async fn create_entity(self, db: &DatabaseConnection, model: ActixAdminModel) -> ActixAdminModel { let new_model = ActiveModel { title: Set("test".to_string()), text: Set("test".to_string()), ..Default::default() }; - let insert_operation = Entity::insert(new_model).exec(data.get_db()).await; + let insert_operation = Entity::insert(new_model).exec(db).await; - actix_admin::create_post_model(req, &data, view_model) + ActixAdminModel{ values: HashMap::new() } } } + #[async_trait] impl ActixAdminModelTrait for Entity { async fn list_model(db: &DatabaseConnection, page: usize, posts_per_page: usize) -> Vec { @@ -66,13 +67,13 @@ pub fn derive_crud_fns(input: proc_macro::TokenStream) -> proc_macro::TokenStrea .await .expect("could not retrieve entities"); // TODO: must be dynamic - model_entities = Vec::new(); + let mut model_entities = Vec::new(); for entity in entities { - model_values = HashMap::new(); + let mut model_values = HashMap::new(); model_values.insert("title", entity.title); model_values.insert("text", entity.text); - model_values.insert("id", entity.id); - vec.push( + model_values.insert("id", entity.id.to_string()); + model_entities.push( ActixAdminModel { values: model_values, }); diff --git a/actix_admin/src/lib.rs b/actix_admin/src/lib.rs index 0b44b43..a8fd114 100644 --- a/actix_admin/src/lib.rs +++ b/actix_admin/src/lib.rs @@ -38,21 +38,21 @@ pub trait AppDataTrait { // ActixAdminModel #[async_trait] -pub trait ActixAdminModelTrait: Clone { - async fn list_model(db: &DatabaseConnection, page: usize, posts_per_page: usize) -> Vec<&str>; +pub trait ActixAdminModelTrait { + async fn list_model(db: &DatabaseConnection, page: usize, posts_per_page: usize) -> Vec; fn get_fields() -> Vec<(String, ActixAdminField)>; } #[derive(Clone, Debug, Serialize)] pub struct ActixAdminModel { - values: HashMap<&'static str, &'static str> + pub values: HashMap<&'static str, String> } // ActixAdminViewModel #[async_trait(?Send)] pub trait ActixAdminViewModelTrait { - async fn list(db: DatabaseConnection, page: usize, entities_per_page: usize) -> Vec; - async fn create_post(db: DatabaseConnection, model: ActixAdminModel) -> ActixAdminModel; + async fn list(self, db: &DatabaseConnection, page: usize, entities_per_page: usize) -> Vec; + async fn create_entity(self, db: &DatabaseConnection, model: ActixAdminModel) -> ActixAdminModel; } #[derive(Clone, Debug, Serialize)] @@ -114,7 +114,7 @@ pub async fn list(req: HttpRequest, data: web::Data, path: w let entities_per_page = params.entities_per_page.unwrap_or(DEFAULT_ENTITIES_PER_PAGE); let db = data.get_db(); - let entities: Vec = view_model.list(db, page, entities_per_page); + let entities: Vec = Vec::new(); // entity.list(db, page, entities_per_page).await; let mut ctx = Context::new(); ctx.insert("entity_names", &entity_names); @@ -130,7 +130,7 @@ pub async fn list(req: HttpRequest, data: web::Data, path: w Ok(HttpResponse::Ok().content_type("text/html").body(body)) } -pub async fn create_get(req: HttpRequest, data: web::Data, _body: web::Payload, _text: String, entity_name: web::Path) -> Result { +pub async fn create_get(_req: HttpRequest, data: web::Data, _body: web::Payload, _text: String, entity_name: web::Path) -> Result { let _db = &data.get_db(); let entity_name: String = entity_name.into_inner(); println!("{}", &entity_name); @@ -151,7 +151,7 @@ pub async fn create_get(req: HttpRequest, data: web::Data, _ Ok(HttpResponse::Ok().content_type("text/html").body(body)) } -pub async fn create_post(req: HttpRequest, data: web::Data, text: String, entity_name: web::Path) -> Result { +pub async fn create_post(_req: HttpRequest, data: web::Data, text: String, entity_name: web::Path) -> Result { let _db = &data.get_db(); let entity_name: String = entity_name.into_inner(); let actix_admin = data.get_actix_admin(); diff --git a/src/main.rs b/src/main.rs index 9a99251..c7a2791 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,8 @@ extern crate serde_derive; use actix_admin::{ ActixAdmin, ActixAdminViewModel, - AppDataTrait as ActixAdminAppDataTrait + AppDataTrait as ActixAdminAppDataTrait, + ActixAdminViewModelTrait }; use actix_session::{CookieSession, Session}; use actix_web::{web, App, HttpResponse, HttpServer, middleware}; @@ -67,13 +68,6 @@ fn setup_actix_admin( .route("/create", web::get().to(actix_admin::create_get::)) .route("/create", web::post().to(actix_admin::create_post::)) ) - - // .service( - // web::scope(&format!("/{}", comment_view_model.entity_name)) - // .route("/list", web::get().to(Comment::list::)) - // .route("/create", web::get().to(Comment::create_get::)) - // .route("/create", web::post().to(Comment::create_post::)) - // ) } #[actix_rt::main]