Back to oficial actix-admin

This commit is contained in:
Adrian Woźniak 2023-09-14 17:12:41 +02:00
parent 6a3378a6b5
commit 1fc74988cf
11 changed files with 723 additions and 713 deletions

1289
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -114,7 +114,7 @@ fn parse_enum_variant_macro(body_it: &mut Peekable<IntoIter>) -> Option<String>
body_it.next().expect("No # for macro"), body_it.next().expect("No # for macro"),
body_it.next().expect("No macro body"), body_it.next().expect("No macro body"),
); );
// eprintln!("{punc:#?} {group:#?}"); // eprintln!("punc {_punc:#?} group {group:#?}");
let mut it = if let TokenTree::Group(g) = group { let mut it = if let TokenTree::Group(g) = group {
// parse #[sea_orm] // parse #[sea_orm]
g.stream().into_iter().peekable() g.stream().into_iter().peekable()

View File

@ -4,9 +4,9 @@ version = "0.1.0"
edition = "2021" edition = "2021"
[dependencies] [dependencies]
# actix-admin = "0.5.0" actix-admin = "0.5.0"
# actix-admin = { git = "https://github.com/Eraden/actix-admin.git", features = ['enable-tracing'] } # actix-admin = { git = "https://github.com/Eraden/actix-admin.git", features = ['enable-tracing'] }
actix-admin = { git = "https://code.ita-prog.pl/Tsumanu/actix-admin.git", features = ['enable-tracing'] } #actix-admin = { git = "https://code.ita-prog.pl/Tsumanu/actix-admin.git", features = ['enable-tracing'] }
actix-web = "4.3.1" actix-web = "4.3.1"
actix-web-grants = "3.0.2" actix-web-grants = "3.0.2"
askama = "0.12.0" askama = "0.12.0"

View File

@ -5,9 +5,9 @@ edition = "2021"
[dependencies] [dependencies]
actix = "0.13.0" actix = "0.13.0"
# actix-admin = "0.5.0" actix-admin = "0.5.0"
# actix-admin = { git = "https://github.com/Eraden/actix-admin.git", features = ['enable-tracing'] } # actix-admin = { git = "https://github.com/Eraden/actix-admin.git", features = ['enable-tracing'] }
actix-admin = { git = "https://code.ita-prog.pl/Tsumanu/actix-admin.git", features = ['enable-tracing'] } # actix-admin = { git = "https://code.ita-prog.pl/Tsumanu/actix-admin.git", features = ['enable-tracing'] }
actix-rt = { version = "2.8.0", features = [] } actix-rt = { version = "2.8.0", features = [] }
chrono = "0.4.26" chrono = "0.4.26"
oswilno-actix-admin = { path = "../oswilno-actix-admin" } oswilno-actix-admin = { path = "../oswilno-actix-admin" }

View File

@ -1,11 +1,15 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.2 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.2
use super::sea_orm_active_enums::Userrole; use super::sea_orm_active_enums::Userrole;
use actix_admin::prelude::*;
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use sea_orm::Iterable;
#[derive(Copy, Clone, Default, Debug, DeriveEntity)] #[derive(Copy, Clone, Default, Debug, DeriveEntity)]
pub struct Entity; pub struct Entity;
impl ActixAdminModelValidationTrait<ActiveModel> for Entity {}
impl ActixAdminModelFilterTrait<Entity> for Entity {}
impl EntityName for Entity { impl EntityName for Entity {
fn table_name(&self) -> &str { fn table_name(&self) -> &str {
"accounts" "accounts"
@ -22,7 +26,6 @@ impl EntityName for Entity {
DeriveActixAdmin, DeriveActixAdmin,
DeriveActixAdminModel, DeriveActixAdminModel,
DeriveActixAdminViewModel, DeriveActixAdminViewModel,
serde::Serialize,
)] )]
pub struct Model { pub struct Model {
#[actix_admin(primary_key)] #[actix_admin(primary_key)]
@ -33,7 +36,9 @@ pub struct Model {
pub banned: bool, pub banned: bool,
pub confirmed: bool, pub confirmed: bool,
pub verified: bool, pub verified: bool,
#[actix_admin(list_hide_column)]
pub created_at: DateTime, pub created_at: DateTime,
#[actix_admin(list_hide_column)]
pub updated_at: DateTime, pub updated_at: DateTime,
pub email: String, pub email: String,
} }
@ -66,6 +71,7 @@ impl PrimaryKeyTrait for PrimaryKey {
#[derive(Copy, Clone, Debug, EnumIter)] #[derive(Copy, Clone, Debug, EnumIter)]
pub enum Relation { pub enum Relation {
Images,
ParkingSpaces, ParkingSpaces,
} }
@ -90,11 +96,18 @@ impl ColumnTrait for Column {
impl RelationTrait for Relation { impl RelationTrait for Relation {
fn def(&self) -> RelationDef { fn def(&self) -> RelationDef {
match self { match self {
Self::Images => Entity::has_many(super::images::Entity).into(),
Self::ParkingSpaces => Entity::has_many(super::parking_spaces::Entity).into(), Self::ParkingSpaces => Entity::has_many(super::parking_spaces::Entity).into(),
} }
} }
} }
impl Related<super::images::Entity> for Entity {
fn to() -> RelationDef {
Relation::Images.def()
}
}
impl Related<super::parking_spaces::Entity> for Entity { impl Related<super::parking_spaces::Entity> for Entity {
fn to() -> RelationDef { fn to() -> RelationDef {
Relation::ParkingSpaces.def() Relation::ParkingSpaces.def()
@ -102,6 +115,3 @@ impl Related<super::parking_spaces::Entity> for Entity {
} }
impl ActiveModelBehavior for ActiveModel {} impl ActiveModelBehavior for ActiveModel {}
use actix_admin::prelude::*;
impl ActixAdminModelValidationTrait<ActiveModel> for Entity {}
impl ActixAdminModelFilterTrait<Entity> for Entity {}

View File

@ -1,11 +1,15 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.2 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.2
use super::sea_orm_active_enums::ImageState; use super::sea_orm_active_enums::ImageState;
use actix_admin::prelude::*;
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use sea_orm::Iterable;
#[derive(Copy, Clone, Default, Debug, DeriveEntity)] #[derive(Copy, Clone, Default, Debug, DeriveEntity)]
pub struct Entity; pub struct Entity;
impl ActixAdminModelValidationTrait<ActiveModel> for Entity {}
impl ActixAdminModelFilterTrait<Entity> for Entity {}
impl EntityName for Entity { impl EntityName for Entity {
fn table_name(&self) -> &str { fn table_name(&self) -> &str {
"images" "images"
@ -22,7 +26,6 @@ impl EntityName for Entity {
DeriveActixAdmin, DeriveActixAdmin,
DeriveActixAdminModel, DeriveActixAdminModel,
DeriveActixAdminViewModel, DeriveActixAdminViewModel,
serde::Serialize,
)] )]
pub struct Model { pub struct Model {
#[actix_admin(primary_key)] #[actix_admin(primary_key)]
@ -31,7 +34,9 @@ pub struct Model {
pub public_path: String, pub public_path: String,
pub image_state: ImageState, pub image_state: ImageState,
pub account_id: i32, pub account_id: i32,
#[actix_admin(list_hide_column)]
pub created_at: DateTime, pub created_at: DateTime,
#[actix_admin(list_hide_column)]
pub updated_at: DateTime, pub updated_at: DateTime,
} }
@ -59,7 +64,9 @@ impl PrimaryKeyTrait for PrimaryKey {
} }
#[derive(Copy, Clone, Debug, EnumIter)] #[derive(Copy, Clone, Debug, EnumIter)]
pub enum Relation {} pub enum Relation {
Accounts,
}
impl ColumnTrait for Column { impl ColumnTrait for Column {
type EntityName = Entity; type EntityName = Entity;
@ -78,11 +85,19 @@ impl ColumnTrait for Column {
impl RelationTrait for Relation { impl RelationTrait for Relation {
fn def(&self) -> RelationDef { fn def(&self) -> RelationDef {
panic!("No RelationDef") match self {
Self::Accounts => Entity::belongs_to(super::accounts::Entity)
.from(Column::AccountId)
.to(super::accounts::Column::Id)
.into(),
}
}
}
impl Related<super::accounts::Entity> for Entity {
fn to() -> RelationDef {
Relation::Accounts.def()
} }
} }
impl ActiveModelBehavior for ActiveModel {} impl ActiveModelBehavior for ActiveModel {}
use actix_admin::prelude::*;
impl ActixAdminModelValidationTrait<ActiveModel> for Entity {}
impl ActixAdminModelFilterTrait<Entity> for Entity {}

View File

@ -1,10 +1,14 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.2 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.2
use actix_admin::prelude::*;
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use sea_orm::Iterable;
#[derive(Copy, Clone, Default, Debug, DeriveEntity)] #[derive(Copy, Clone, Default, Debug, DeriveEntity)]
pub struct Entity; pub struct Entity;
impl ActixAdminModelValidationTrait<ActiveModel> for Entity {}
impl ActixAdminModelFilterTrait<Entity> for Entity {}
impl EntityName for Entity { impl EntityName for Entity {
fn table_name(&self) -> &str { fn table_name(&self) -> &str {
"parking_space_locations" "parking_space_locations"
@ -21,7 +25,6 @@ impl EntityName for Entity {
DeriveActixAdmin, DeriveActixAdmin,
DeriveActixAdminModel, DeriveActixAdminModel,
DeriveActixAdminViewModel, DeriveActixAdminViewModel,
serde::Serialize,
)] )]
pub struct Model { pub struct Model {
#[actix_admin(primary_key)] #[actix_admin(primary_key)]
@ -29,7 +32,9 @@ pub struct Model {
pub name: String, pub name: String,
pub number: i32, pub number: i32,
pub stage: String, pub stage: String,
#[actix_admin(list_hide_column)]
pub created_at: DateTime, pub created_at: DateTime,
#[actix_admin(list_hide_column)]
pub updated_at: DateTime, pub updated_at: DateTime,
} }
@ -89,6 +94,3 @@ impl Related<super::parking_spaces::Entity> for Entity {
} }
impl ActiveModelBehavior for ActiveModel {} impl ActiveModelBehavior for ActiveModel {}
use actix_admin::prelude::*;
impl ActixAdminModelValidationTrait<ActiveModel> for Entity {}
impl ActixAdminModelFilterTrait<Entity> for Entity {}

View File

@ -1,10 +1,14 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.2 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.2
use actix_admin::prelude::*;
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use sea_orm::Iterable;
#[derive(Copy, Clone, Default, Debug, DeriveEntity)] #[derive(Copy, Clone, Default, Debug, DeriveEntity)]
pub struct Entity; pub struct Entity;
impl ActixAdminModelValidationTrait<ActiveModel> for Entity {}
impl ActixAdminModelFilterTrait<Entity> for Entity {}
impl EntityName for Entity { impl EntityName for Entity {
fn table_name(&self) -> &str { fn table_name(&self) -> &str {
"parking_space_rents" "parking_space_rents"
@ -21,15 +25,17 @@ impl EntityName for Entity {
DeriveActixAdmin, DeriveActixAdmin,
DeriveActixAdminModel, DeriveActixAdminModel,
DeriveActixAdminViewModel, DeriveActixAdminViewModel,
serde::Serialize,
)] )]
pub struct Model { pub struct Model {
#[actix_admin(primary_key)] #[actix_admin(primary_key)]
pub id: i32, pub id: i32,
pub price: i32, pub price: i32,
#[actix_admin(select_list=crate::parking_spaces::Entity)]
pub parking_space_id: i32, pub parking_space_id: i32,
pub available: bool, pub available: bool,
#[actix_admin(list_hide_column)]
pub created_at: DateTime, pub created_at: DateTime,
#[actix_admin(list_hide_column)]
pub updated_at: DateTime, pub updated_at: DateTime,
} }
@ -92,6 +98,3 @@ impl Related<super::parking_spaces::Entity> for Entity {
} }
impl ActiveModelBehavior for ActiveModel {} impl ActiveModelBehavior for ActiveModel {}
use actix_admin::prelude::*;
impl ActixAdminModelValidationTrait<ActiveModel> for Entity {}
impl ActixAdminModelFilterTrait<Entity> for Entity {}

View File

@ -1,11 +1,15 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.2 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.2
use super::sea_orm_active_enums::ParkingSpaceState; use super::sea_orm_active_enums::ParkingSpaceState;
use actix_admin::prelude::*;
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use sea_orm::Iterable;
#[derive(Copy, Clone, Default, Debug, DeriveEntity)] #[derive(Copy, Clone, Default, Debug, DeriveEntity)]
pub struct Entity; pub struct Entity;
impl ActixAdminModelValidationTrait<ActiveModel> for Entity {}
impl ActixAdminModelFilterTrait<Entity> for Entity {}
impl EntityName for Entity { impl EntityName for Entity {
fn table_name(&self) -> &str { fn table_name(&self) -> &str {
"parking_spaces" "parking_spaces"
@ -22,16 +26,19 @@ impl EntityName for Entity {
DeriveActixAdmin, DeriveActixAdmin,
DeriveActixAdminModel, DeriveActixAdminModel,
DeriveActixAdminViewModel, DeriveActixAdminViewModel,
serde::Serialize,
)] )]
pub struct Model { pub struct Model {
#[actix_admin(primary_key)] #[actix_admin(primary_key)]
pub id: i32, pub id: i32,
#[actix_admin(select_list=crate::ParkingSpaceState)]
pub state: ParkingSpaceState, pub state: ParkingSpaceState,
pub account_id: i32, pub account_id: i32,
#[actix_admin(list_hide_column)]
pub created_at: DateTime, pub created_at: DateTime,
#[actix_admin(list_hide_column)]
pub updated_at: DateTime, pub updated_at: DateTime,
pub spot: Option<i32>, pub spot: Option<i32>,
#[actix_admin(select_list=crate::parking_space_locations::Entity)]
pub location_id: Option<i32>, pub location_id: Option<i32>,
} }
@ -117,6 +124,3 @@ impl Related<super::parking_space_rents::Entity> for Entity {
} }
impl ActiveModelBehavior for ActiveModel {} impl ActiveModelBehavior for ActiveModel {}
use actix_admin::prelude::*;
impl ActixAdminModelValidationTrait<ActiveModel> for Entity {}
impl ActixAdminModelFilterTrait<Entity> for Entity {}

View File

@ -1,10 +1,12 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.2 //! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.2
use actix_admin::prelude::*;
use sea_orm::entity::prelude::*; use sea_orm::entity::prelude::*;
use sea_orm::Iterable;
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)] #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)]
#[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "image_state")] #[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "image_state")]
#[derive(oswilno_actix_admin::ActixAdminEnum, serde::Serialize)] #[derive(oswilno_actix_admin::ActixAdminEnum, serde::Serialize, DeriveActixAdminEnumSelectList)]
pub enum ImageState { pub enum ImageState {
#[sea_orm(string_value = "approved")] #[sea_orm(string_value = "approved")]
Approved, Approved,
@ -19,7 +21,7 @@ pub enum ImageState {
db_type = "Enum", db_type = "Enum",
enum_name = "parking_space_state" enum_name = "parking_space_state"
)] )]
#[derive(oswilno_actix_admin::ActixAdminEnum, serde::Serialize)] #[derive(oswilno_actix_admin::ActixAdminEnum, serde::Serialize, DeriveActixAdminEnumSelectList)]
pub enum ParkingSpaceState { pub enum ParkingSpaceState {
#[sea_orm(string_value = "Banned")] #[sea_orm(string_value = "Banned")]
Banned, Banned,
@ -30,7 +32,7 @@ pub enum ParkingSpaceState {
} }
#[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)] #[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)]
#[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "userrole")] #[sea_orm(rs_type = "String", db_type = "Enum", enum_name = "userrole")]
#[derive(oswilno_actix_admin::ActixAdminEnum, serde::Serialize)] #[derive(oswilno_actix_admin::ActixAdminEnum, serde::Serialize, DeriveActixAdminEnumSelectList)]
pub enum Userrole { pub enum Userrole {
#[sea_orm(string_value = "Admin")] #[sea_orm(string_value = "Admin")]
Admin, Admin,

View File

@ -6,17 +6,48 @@ sea-orm-cli generate entity -v -l --expanded-format -o ./crates/oswilno-contract
for f in $( ls ./crates/oswilno-contract/src/*.rs ); do for f in $( ls ./crates/oswilno-contract/src/*.rs ); do
# bad generated code patch # bad generated code patch
sed -i 's/db_type().def()/db_type()/g' $f sed -i 's/db_type().def()/db_type()/g' $f
# actix-admin patch
sed -i 's/pub struct Model {/#[derive(DeriveActixAdmin,DeriveActixAdminModel,DeriveActixAdminViewModel,serde::Serialize)]pub struct Model {#[actix_admin(primary_key)]/g' $f
HAS_ENTITY=$(grep 'for Entity' $f)
if [[ "${HAS_ENTITY}" != "" ]]; then
echo "use actix_admin::prelude::*;" >> $f
echo "impl ActixAdminModelValidationTrait<ActiveModel> for Entity {}" >> $f
echo "impl ActixAdminModelFilterTrait<Entity> for Entity {}" >> $f
fi
done done
sed -i 's/pub enum/#[derive(oswilno_actix_admin::ActixAdminEnum,serde::Serialize)] pub enum/g' ./crates/oswilno-contract/src/sea_orm_active_enums.rs rm -Rf /tmp/ajosdfjosdpjfojsdfjpajpfa
for f in $(ls crates/oswilno-contract/src/*.rs); do
while read line; do
case $line in
"use sea_orm::entity::prelude::*;" )
echo "use actix_admin::prelude::*;" >> /tmp/ajosdfjosdpjfojsdfjpajpfa
echo 'use sea_orm::Iterable;' >> /tmp/ajosdfjosdpjfojsdfjpajpfa
;;
*"EntityName for Entity"* )
echo "impl ActixAdminModelValidationTrait<ActiveModel> for Entity {}" >> /tmp/ajosdfjosdpjfojsdfjpajpfa
echo "impl ActixAdminModelFilterTrait<Entity> for Entity {}" >> /tmp/ajosdfjosdpjfojsdfjpajpfa
;;
"pub enum"* )
if [[ "$f" == "crates/oswilno-contract/src/sea_orm_active_enums.rs" ]]; then
echo "#[derive(oswilno_actix_admin::ActixAdminEnum, serde::Serialize, DeriveActixAdminEnumSelectList)]" >> /tmp/ajosdfjosdpjfojsdfjpajpfa
fi
;;
*"struct Model"* )
echo "#[derive(DeriveActixAdmin, DeriveActixAdminModel, DeriveActixAdminViewModel)]" >> /tmp/ajosdfjosdpjfojsdfjpajpfa
;;
"pub id: i32," )
echo "#[actix_admin(primary_key)]" >> /tmp/ajosdfjosdpjfojsdfjpajpfa
;;
"pub location_id"* )
echo "#[actix_admin(select_list="crate::parking_space_locations::Entity")]" >> /tmp/ajosdfjosdpjfojsdfjpajpfa
;;
"pub state"* )
echo "#[actix_admin(select_list="crate::ParkingSpaceState")]" >> /tmp/ajosdfjosdpjfojsdfjpajpfa
;;
*"_at: DateTime," )
echo "#[actix_admin(list_hide_column)]" >> /tmp/ajosdfjosdpjfojsdfjpajpfa
;;
*"parking_space_id"* )
echo "#[actix_admin(select_list="crate::parking_spaces::Entity")]" >> /tmp/ajosdfjosdpjfojsdfjpajpfa
;;
esac
echo $line >> /tmp/ajosdfjosdpjfojsdfjpajpfa
done < $f
cat /tmp/ajosdfjosdpjfojsdfjpajpfa
mv /tmp/ajosdfjosdpjfojsdfjpajpfa $f
done
cargo fmt cargo fmt