bios_basic/rbum/
rbum_initializer.rs1use serde::{Deserialize, Serialize};
2use tardis::basic::dto::TardisContext;
3use tardis::basic::result::TardisResult;
4use tardis::db::reldb_client::TardisActiveModel;
5use tardis::db::sea_orm;
6use tardis::db::sea_orm::sea_query::*;
7use tardis::TardisFuns;
8use tardis::TardisFunsInst;
9
10use crate::rbum::domain::{
11 rbum_cert, rbum_cert_conf, rbum_domain, rbum_item, rbum_item_attr, rbum_kind, rbum_kind_attr, rbum_rel, rbum_rel_attr, rbum_rel_env, rbum_set, rbum_set_cate, rbum_set_item,
12};
13use crate::rbum::rbum_config::{RbumConfig, RbumConfigManager};
14
15pub async fn init(code: &str, config: RbumConfig) -> TardisResult<()> {
16 RbumConfigManager::add(code, config)?;
17 TardisFuns::reldb_by_module_or_default(code).init_basic_tables().await?;
18 let db_kind = TardisFuns::reldb_by_module_or_default(code).backend();
19 let mut tx = TardisFuns::reldb_by_module_or_default(code).conn();
20 let compatible_type = TardisFuns::reldb_by_module_or_default(code).compatible_type();
21 if TardisFuns::dict.get("__RBUM_INIT__", &tx).await?.is_some() {
22 return Ok(());
23 }
24 tx.begin().await?;
25 TardisFuns::dict.add("__RBUM_INIT__", "", "", &tx).await?;
26 tx.init(rbum_domain::ActiveModel::init(db_kind, Some("update_time"), compatible_type)).await?;
27 tx.init(rbum_kind::ActiveModel::init(db_kind, Some("update_time"), compatible_type)).await?;
28 tx.init(rbum_item::ActiveModel::init(db_kind, Some("update_time"), compatible_type)).await?;
29 tx.init(rbum_kind_attr::ActiveModel::init(db_kind, Some("update_time"), compatible_type)).await?;
30 tx.init(rbum_item_attr::ActiveModel::init(db_kind, Some("update_time"), compatible_type)).await?;
31 tx.init(rbum_rel::ActiveModel::init(db_kind, Some("update_time"), compatible_type)).await?;
32 tx.init(rbum_rel_attr::ActiveModel::init(db_kind, Some("update_time"), compatible_type)).await?;
33 tx.init(rbum_rel_env::ActiveModel::init(db_kind, Some("update_time"), compatible_type)).await?;
34 tx.init(rbum_cert_conf::ActiveModel::init(db_kind, Some("update_time"), compatible_type)).await?;
35 tx.init(rbum_cert::ActiveModel::init(db_kind, Some("update_time"), compatible_type)).await?;
36 tx.init(rbum_set::ActiveModel::init(db_kind, Some("update_time"), compatible_type)).await?;
37 tx.init(rbum_set_cate::ActiveModel::init(db_kind, Some("update_time"), compatible_type)).await?;
38 tx.init(rbum_set_item::ActiveModel::init(db_kind, Some("update_time"), compatible_type)).await?;
39 tx.commit().await?;
40 Ok(())
41}
42
43pub async fn get_first_account_context<'a>(rbum_kind_code: &str, rbum_domain_code: &str, funs: &TardisFunsInst) -> TardisResult<Option<TardisContext>> {
44 #[derive(Deserialize, sea_orm::FromQueryResult, Serialize, Clone, Debug)]
45 struct TmpContext {
46 pub id: String,
47 pub own_paths: String,
48 }
49
50 let mut query = Query::select();
51 query
52 .column((rbum_item::Entity, rbum_item::Column::Id))
53 .column((rbum_item::Entity, rbum_item::Column::OwnPaths))
54 .from(rbum_item::Entity)
55 .inner_join(
56 rbum_kind::Entity,
57 Expr::col((rbum_kind::Entity, rbum_kind::Column::Id)).equals((rbum_item::Entity, rbum_item::Column::RelRbumKindId)),
58 )
59 .inner_join(
60 rbum_domain::Entity,
61 Expr::col((rbum_domain::Entity, rbum_domain::Column::Id)).equals((rbum_item::Entity, rbum_item::Column::RelRbumDomainId)),
62 )
63 .and_where(Expr::col((rbum_kind::Entity, rbum_kind::Column::Code)).eq(rbum_kind_code))
64 .and_where(Expr::col((rbum_domain::Entity, rbum_domain::Column::Code)).eq(rbum_domain_code))
65 .order_by((rbum_item::Entity, rbum_item::Column::CreateTime), Order::Asc);
66
67 let context: Option<TmpContext> = funs.db().get_dto(&query).await?;
68
69 if let Some(context) = context {
70 Ok(Some(TardisContext {
71 own_paths: context.own_paths.to_string(),
72 owner: context.id,
73 ak: "_".to_string(),
74 roles: vec![],
75 groups: vec![],
76 ext: Default::default(),
77 sync_task_fns: Default::default(),
78 async_task_fns: Default::default(),
79 }))
80 } else {
81 Ok(None)
82 }
83}
84
85pub async fn truncate_data<'a>(funs: &TardisFunsInst) -> TardisResult<()> {
86 funs.db().execute(Table::truncate().table(rbum_cert::Entity)).await?;
87 funs.db().execute(Table::truncate().table(rbum_cert_conf::Entity)).await?;
88 funs.db().execute(Table::truncate().table(rbum_domain::Entity)).await?;
89 funs.db().execute(Table::truncate().table(rbum_item::Entity)).await?;
90 funs.db().execute(Table::truncate().table(rbum_item_attr::Entity)).await?;
91 funs.db().execute(Table::truncate().table(rbum_kind::Entity)).await?;
92 funs.db().execute(Table::truncate().table(rbum_kind_attr::Entity)).await?;
93 funs.db().execute(Table::truncate().table(rbum_rel::Entity)).await?;
94 funs.db().execute(Table::truncate().table(rbum_rel_attr::Entity)).await?;
95 funs.db().execute(Table::truncate().table(rbum_rel_env::Entity)).await?;
96 funs.db().execute(Table::truncate().table(rbum_set::Entity)).await?;
97 funs.db().execute(Table::truncate().table(rbum_set_cate::Entity)).await?;
98 funs.db().execute(Table::truncate().table(rbum_set_item::Entity)).await?;
99 funs.cache().flushdb().await?;
100 Ok(())
101}