diff --git a/crates/entity/src/license.rs b/crates/entity/src/license.rs index da9a77c..d25ecbf 100644 --- a/crates/entity/src/license.rs +++ b/crates/entity/src/license.rs @@ -3,10 +3,17 @@ use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; -#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] -#[sea_orm(table_name = "license")] +#[derive(Copy, Clone, Default, Debug, DeriveEntity)] +pub struct Entity; + +impl EntityName for Entity { + fn table_name(&self) -> &str { + "license" + } +} + +#[derive(Clone, Debug, PartialEq, DeriveModel, DeriveActiveModel, Eq, Serialize, Deserialize)] pub struct Model { - #[sea_orm(primary_key, auto_increment = false)] #[serde(skip_deserializing)] pub id: Uuid, pub name: String, @@ -14,21 +21,66 @@ pub struct Model { pub end: Option, pub amount: Option, pub key: String, + pub note: Option, pub group_id: Uuid, } -#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +#[derive(Copy, Clone, Debug, EnumIter, DeriveColumn)] +pub enum Column { + Id, + Name, + Start, + End, + Amount, + Key, + Note, + GroupId, +} + +#[derive(Copy, Clone, Debug, EnumIter, DerivePrimaryKey)] +pub enum PrimaryKey { + Id, +} + +impl PrimaryKeyTrait for PrimaryKey { + type ValueType = Uuid; + fn auto_increment() -> bool { + false + } +} + +#[derive(Copy, Clone, Debug, EnumIter)] pub enum Relation { - #[sea_orm( - belongs_to = "super::license_group::Entity", - from = "Column::GroupId", - to = "super::license_group::Column::Id", - on_update = "Cascade", - on_delete = "Cascade" - )] LicenseGroup, } +impl ColumnTrait for Column { + type EntityName = Entity; + fn def(&self) -> ColumnDef { + match self { + Self::Id => ColumnType::Uuid.def(), + Self::Name => ColumnType::String(None).def(), + Self::Start => ColumnType::TimestampWithTimeZone.def().null(), + Self::End => ColumnType::TimestampWithTimeZone.def().null(), + Self::Amount => ColumnType::Integer.def().null(), + Self::Key => ColumnType::String(None).def(), + Self::Note => ColumnType::String(None).def().null(), + Self::GroupId => ColumnType::Uuid.def(), + } + } +} + +impl RelationTrait for Relation { + fn def(&self) -> RelationDef { + match self { + Self::LicenseGroup => Entity::belongs_to(super::license_group::Entity) + .from(Column::GroupId) + .to(super::license_group::Column::Id) + .into(), + } + } +} + impl Related for Entity { fn to() -> RelationDef { Relation::LicenseGroup.def() diff --git a/crates/entity/src/license_group.rs b/crates/entity/src/license_group.rs index 2ab36c4..8c66757 100644 --- a/crates/entity/src/license_group.rs +++ b/crates/entity/src/license_group.rs @@ -3,21 +3,63 @@ use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; -#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] -#[sea_orm(table_name = "license_group")] +#[derive(Copy, Clone, Default, Debug, DeriveEntity)] +pub struct Entity; + +impl EntityName for Entity { + fn table_name(&self) -> &str { + "license_group" + } +} + +#[derive(Clone, Debug, PartialEq, DeriveModel, DeriveActiveModel, Eq, Serialize, Deserialize)] pub struct Model { - #[sea_orm(primary_key, auto_increment = false)] #[serde(skip_deserializing)] pub id: Uuid, pub name: String, } -#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +#[derive(Copy, Clone, Debug, EnumIter, DeriveColumn)] +pub enum Column { + Id, + Name, +} + +#[derive(Copy, Clone, Debug, EnumIter, DerivePrimaryKey)] +pub enum PrimaryKey { + Id, +} + +impl PrimaryKeyTrait for PrimaryKey { + type ValueType = Uuid; + fn auto_increment() -> bool { + false + } +} + +#[derive(Copy, Clone, Debug, EnumIter)] pub enum Relation { - #[sea_orm(has_many = "super::license::Entity")] License, } +impl ColumnTrait for Column { + type EntityName = Entity; + fn def(&self) -> ColumnDef { + match self { + Self::Id => ColumnType::Uuid.def(), + Self::Name => ColumnType::String(None).def(), + } + } +} + +impl RelationTrait for Relation { + fn def(&self) -> RelationDef { + match self { + Self::License => Entity::has_many(super::license::Entity).into(), + } + } +} + impl Related for Entity { fn to() -> RelationDef { Relation::License.def() diff --git a/crates/entity/src/user.rs b/crates/entity/src/user.rs index 984cd24..c9836c0 100644 --- a/crates/entity/src/user.rs +++ b/crates/entity/src/user.rs @@ -3,19 +3,63 @@ use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; -#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] -#[sea_orm(table_name = "user")] +#[derive(Copy, Clone, Default, Debug, DeriveEntity)] +pub struct Entity; + +impl EntityName for Entity { + fn table_name(&self) -> &str { + "user" + } +} + +#[derive(Clone, Debug, PartialEq, DeriveModel, DeriveActiveModel, Eq, Serialize, Deserialize)] pub struct Model { - #[sea_orm(primary_key, auto_increment = false)] #[serde(skip_deserializing)] pub id: Uuid, pub name: String, - #[sea_orm(unique)] pub email: String, pub hash: String, } -#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +#[derive(Copy, Clone, Debug, EnumIter, DeriveColumn)] +pub enum Column { + Id, + Name, + Email, + Hash, +} + +#[derive(Copy, Clone, Debug, EnumIter, DerivePrimaryKey)] +pub enum PrimaryKey { + Id, +} + +impl PrimaryKeyTrait for PrimaryKey { + type ValueType = Uuid; + fn auto_increment() -> bool { + false + } +} + +#[derive(Copy, Clone, Debug, EnumIter)] pub enum Relation {} +impl ColumnTrait for Column { + type EntityName = Entity; + fn def(&self) -> ColumnDef { + match self { + Self::Id => ColumnType::Uuid.def(), + Self::Name => ColumnType::String(None).def(), + Self::Email => ColumnType::String(None).def().unique(), + Self::Hash => ColumnType::String(None).def(), + } + } +} + +impl RelationTrait for Relation { + fn def(&self) -> RelationDef { + panic!("No RelationDef") + } +} + impl ActiveModelBehavior for ActiveModel {} diff --git a/crates/migration/src/m20240709_095325_create_license.rs b/crates/migration/src/m20240709_095325_create_license.rs index df5f153..e577312 100644 --- a/crates/migration/src/m20240709_095325_create_license.rs +++ b/crates/migration/src/m20240709_095325_create_license.rs @@ -23,6 +23,7 @@ impl MigrationTrait for Migration { .col(ColumnDef::new(License::End).timestamp_with_time_zone()) .col(ColumnDef::new(License::Amount).integer()) .col(ColumnDef::new(License::Key).string().not_null()) + .col(ColumnDef::new(License::Note).string()) .col(ColumnDef::new(License::GroupId).uuid().not_null()) .foreign_key( ForeignKey::create() @@ -54,6 +55,7 @@ enum License { Amount, Key, GroupId, + Note, } #[derive(DeriveIden)]