From 8a4996300fcf45e422db9e36d68930d09cd67962 Mon Sep 17 00:00:00 2001 From: Chris Tsang Date: Wed, 15 Sep 2021 12:16:56 +0800 Subject: [PATCH] Refactor Link --- src/entity/link.rs | 20 ++++++++++++++++++++ src/entity/mod.rs | 2 ++ src/entity/relation.rs | 16 ---------------- 3 files changed, 22 insertions(+), 16 deletions(-) create mode 100644 src/entity/link.rs diff --git a/src/entity/link.rs b/src/entity/link.rs new file mode 100644 index 00000000..712adaa6 --- /dev/null +++ b/src/entity/link.rs @@ -0,0 +1,20 @@ +use crate::{EntityTrait, RelationDef, QuerySelect, Select}; +use sea_query::{JoinType}; + +pub type LinkDef = RelationDef; + +pub trait Linked { + type FromEntity: EntityTrait; + + type ToEntity: EntityTrait; + + fn link(&self) -> Vec; + + fn find_linked(&self) -> Select { + let mut select = Select::new(); + for rel in self.link().into_iter().rev() { + select = select.join_rev(JoinType::InnerJoin, rel); + } + select + } +} diff --git a/src/entity/mod.rs b/src/entity/mod.rs index 6da5e1b6..c6d15052 100644 --- a/src/entity/mod.rs +++ b/src/entity/mod.rs @@ -2,6 +2,7 @@ mod active_model; mod base_entity; mod column; mod identity; +mod link; mod model; pub mod prelude; mod primary_key; @@ -11,6 +12,7 @@ pub use active_model::*; pub use base_entity::*; pub use column::*; pub use identity::*; +pub use link::*; pub use model::*; // pub use prelude::*; pub use primary_key::*; diff --git a/src/entity/relation.rs b/src/entity/relation.rs index 7b2d7b4d..93c00596 100644 --- a/src/entity/relation.rs +++ b/src/entity/relation.rs @@ -30,22 +30,6 @@ where } } -pub trait Linked { - type FromEntity: EntityTrait; - - type ToEntity: EntityTrait; - - fn link(&self) -> Vec; - - fn find_linked(&self) -> Select { - let mut select = Select::new(); - for rel in self.link().into_iter().rev() { - select = select.join_rev(JoinType::InnerJoin, rel); - } - select - } -} - #[derive(Debug)] pub struct RelationDef { pub rel_type: RelationType,