diff --git a/Cargo.toml b/Cargo.toml index d23d070..76bafdb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,7 +30,7 @@ tokio = { version = "1", features = ["macros", "rt-multi-thread"] } tokio-cron-scheduler = { version = "0" } uuid = { version = "0", features = ["serde", "v4", "v5"] } -beteran-protobuf-rust = { git = "https://gitlab.loafle.net/bet/beteran-protobuf-rust.git", tag = "v0.1.27-snapshot" } -beteran-common-rust = { git = "https://gitlab.loafle.net/bet/beteran-common-rust.git", tag = "v0.1.10-snapshot" } +beteran-protobuf-rust = { git = "https://gitlab.loafle.net/bet/beteran-protobuf-rust.git", tag = "v0.1.28-snapshot" } +beteran-common-rust = { git = "https://gitlab.loafle.net/bet/beteran-common-rust.git", tag = "v0.1.11-snapshot" } [build-dependencies] diff --git a/migrations/202206181000_site/up.sql b/migrations/202206181000_site/up.sql index 4ca6ba1..c3b4d75 100644 --- a/migrations/202206181000_site/up.sql +++ b/migrations/202206181000_site/up.sql @@ -1,11 +1,13 @@ CREATE TABLE IF NOT EXISTS sites ( id UUID DEFAULT uuid_generate_v4(), url TEXT NOT NULL, + name TEXT NOT NULL, + path TEXT, show BOOLEAN NOT NULL DEFAULT TRUE, can_use BOOLEAN NOT NULL DEFAULT TRUE, + expires_at BIGINT NOT NULL DEFAULT (extract(epoch from now()) * 1000), created_at BIGINT NOT NULL DEFAULT (extract(epoch from now()) * 1000), updated_at BIGINT NOT NULL DEFAULT (extract(epoch from now()) * 1000), - deleted_at BIGINT, PRIMARY KEY (id), UNIQUE (url) ); diff --git a/migrations/202208011200_initial_data/up.sql b/migrations/202208011200_initial_data/up.sql index 18a5182..dc7ebb2 100644 --- a/migrations/202208011200_initial_data/up.sql +++ b/migrations/202208011200_initial_data/up.sql @@ -70,8 +70,8 @@ INSERT INTO role_resource_actions (role_id, resource_action_id) VALUES ('b6a2b66 -- identity.signout INSERT INTO role_resource_actions (role_id, resource_action_id) VALUES ('b6a2b662-e21e-44e7-a96c-dacd86f9d6b8', '37b99823-188b-4b30-afb7-815a7e79662b'); -INSERT INTO sites (id, url, show) VALUES ('d7cbae26-53b6-4cb1-85a4-66b956cbe1d4', '*', false); -INSERT INTO sites (id, url, show) VALUES ('8429a7ab-b9de-400b-a209-28ff46e22bec', '127.0.0.1', true); +INSERT INTO sites (id, url, name, path, show, expires_at) VALUES ('d7cbae26-53b6-4cb1-85a4-66b956cbe1d4', '*', '전체', '/', false, (extract(epoch from now() + INTERVAL '10 year') * 1000)); +INSERT INTO sites (id, url, name, path, show, expires_at) VALUES ('8429a7ab-b9de-400b-a209-28ff46e22bec', '127.0.0.1', '개발용', '/', true, (extract(epoch from now() + INTERVAL '3 month') * 1000)); INSERT INTO member_levels (id, name, sort_order, show) VALUES ('c238463f-949d-49eb-92ab-dca7a09371db', 'LEVEL0', 0, false); diff --git a/src/compositions/member/composition.rs b/src/compositions/member/composition.rs index 0455f42..34c41d5 100644 --- a/src/compositions/member/composition.rs +++ b/src/compositions/member/composition.rs @@ -54,11 +54,13 @@ impl Composition { s.id as s_id, s.url as s_url, + s.name as s_name, + s.path as s_path, s.show as s_show, s.can_use as s_can_use, + s.expires_at as s_expires_at, s.created_at as s_created_at, s.updated_at as s_updated_at, - s.deleted_at as s_deleted_at, mc.id as mc_id, mc.parent_id as mc_parent_id, diff --git a/src/compositions/member/models.rs b/src/compositions/member/models.rs index dd81383..5a6429b 100644 --- a/src/compositions/member/models.rs +++ b/src/compositions/member/models.rs @@ -73,11 +73,13 @@ impl QueryableByName for Member { site: _Site { id: row.get("s_id")?, url: row.get("s_url")?, + name: row.get("s_name")?, + path: row.get("s_path")?, show: row.get("s_show")?, can_use: row.get("s_can_use")?, + expires_at: row.get("s_expires_at")?, created_at: row.get("s_created_at")?, updated_at: row.get("s_updated_at")?, - deleted_at: row.get("s_deleted_at")?, }, member_class: _MemberClass { id: row.get("mc_id")?, diff --git a/src/repositories/site/models.rs b/src/repositories/site/models.rs index ce5d8a7..81ac6c5 100644 --- a/src/repositories/site/models.rs +++ b/src/repositories/site/models.rs @@ -10,15 +10,19 @@ pub struct Site { /// pub url: String, /// + pub name: String, + /// + pub path: String, + /// pub show: bool, /// pub can_use: bool, /// + pub expires_at: i64, + /// pub created_at: i64, /// pub updated_at: i64, - /// - pub deleted_at: Option, } /// @@ -28,9 +32,15 @@ pub struct NewSite { /// pub url: String, /// + pub name: String, + /// + pub path: String, + /// pub show: bool, /// pub can_use: bool, + /// + pub expires_at: i64, } /// @@ -40,21 +50,31 @@ pub struct ModifySite { /// pub url: String, /// + pub name: String, + /// + pub path: String, + /// pub show: bool, /// pub can_use: bool, + /// + pub expires_at: i64, } /// #[derive(Debug, Clone)] pub struct FindAll { + /// + pub url_like: Option, + /// + pub name_like: Option, + /// + pub path_like: Option, /// pub show: Option, /// pub can_use: Option, /// - pub url_like: Option, - /// pub pagination: Option, /// pub sorts: Option>, diff --git a/src/repositories/site/repository.rs b/src/repositories/site/repository.rs index 936095a..d15ecdf 100644 --- a/src/repositories/site/repository.rs +++ b/src/repositories/site/repository.rs @@ -82,15 +82,21 @@ impl Repository { ) -> Result { let mut q = sites::table.into_boxed(); + if let Some(sp) = find_all.url_like { + q = q.filter(sites::dsl::url.like(sp)); + } + if let Some(sp) = find_all.name_like { + q = q.filter(sites::dsl::url.like(sp)); + } + if let Some(sp) = find_all.path_like { + q = q.filter(sites::dsl::path.like(sp)); + } if let Some(sp) = find_all.show { q = q.filter(sites::dsl::show.eq(sp)); } if let Some(sp) = find_all.can_use { q = q.filter(sites::dsl::can_use.eq(sp)); } - if let Some(sp) = find_all.url_like { - q = q.filter(sites::dsl::url.like(sp)); - } q.count().get_result(conn) } @@ -103,15 +109,21 @@ impl Repository { ) -> Result, Error> { let mut q = sites::table.into_boxed(); + if let Some(sp) = find_all.url_like { + q = q.filter(sites::dsl::url.like(sp)); + } + if let Some(sp) = find_all.name_like { + q = q.filter(sites::dsl::url.like(sp)); + } + if let Some(sp) = find_all.path_like { + q = q.filter(sites::dsl::path.like(sp)); + } if let Some(sp) = find_all.show { q = q.filter(sites::dsl::show.eq(sp)); } if let Some(sp) = find_all.can_use { q = q.filter(sites::dsl::can_use.eq(sp)); } - if let Some(sp) = find_all.url_like { - q = q.filter(sites::dsl::url.like(sp)); - } if let Some(p) = find_all.pagination { let page = p.page.unwrap_or(1); @@ -128,30 +140,42 @@ impl Repository { "url" => { q = q.order_by(sites::url.asc()); } + "name" => { + q = q.order_by(sites::url.asc()); + } + "path" => { + q = q.order_by(sites::url.asc()); + } + "expires_at" => { + q = q.order_by(sites::expires_at.asc()); + } "created_at" => { q = q.order_by(sites::created_at.asc()); } "updated_at" => { q = q.order_by(sites::updated_at.asc()); } - "deleted_at" => { - q = q.order_by(sites::deleted_at.asc()); - } _ => {} }, bcr::models::pagination::Sort::DESC(property) => match property.as_str() { "url" => { q = q.order_by(sites::url.desc()); } + "name" => { + q = q.order_by(sites::url.desc()); + } + "path" => { + q = q.order_by(sites::url.desc()); + } + "expires_at" => { + q = q.order_by(sites::expires_at.desc()); + } "created_at" => { q = q.order_by(sites::created_at.desc()); } "updated_at" => { q = q.order_by(sites::updated_at.desc()); } - "deleted_at" => { - q = q.order_by(sites::deleted_at.desc()); - } _ => {} }, }; diff --git a/src/repositories/site/schema.rs b/src/repositories/site/schema.rs index 30d44bc..4cb5cd6 100644 --- a/src/repositories/site/schema.rs +++ b/src/repositories/site/schema.rs @@ -9,14 +9,18 @@ table! { /// url -> Text, /// + name -> Text, + /// + path -> Text, + /// show -> Bool, /// can_use -> Bool, /// + expires_at -> BigInt, + /// created_at -> BigInt, /// updated_at -> BigInt, - /// - deleted_at -> Nullable, } } diff --git a/src/services/site/models.rs b/src/services/site/models.rs index ac235bf..594eaa2 100644 --- a/src/services/site/models.rs +++ b/src/services/site/models.rs @@ -6,11 +6,13 @@ impl From<&repositories::site::models::Site> for bpr::models::domain::Site { bpr::models::domain::Site { id: d.id.to_string(), url: d.url.clone(), + name: d.name.clone(), + path: d.path.clone(), show: d.show, can_use: d.can_use, + expires_at: d.expires_at as u64, created_at: d.created_at as u64, updated_at: d.updated_at as u64, - deleted_at: d.deleted_at.map(|d| d as u64), } } } diff --git a/src/services/site/service.rs b/src/services/site/service.rs index 33300ce..a72a2f9 100644 --- a/src/services/site/service.rs +++ b/src/services/site/service.rs @@ -137,9 +137,11 @@ impl Service { .select_all_count( &conn, repositories::site::models::FindAll { + url_like: None, + name_like: None, + path_like: None, show: None, can_use: None, - url_like: None, pagination: req .pagination .as_ref() @@ -166,9 +168,11 @@ impl Service { .select_all( &conn, repositories::site::models::FindAll { + url_like: None, + name_like: None, + path_like: None, show: None, can_use: None, - url_like: None, pagination: req .pagination .as_ref() @@ -281,8 +285,11 @@ impl Service { &conn, &repositories::site::models::NewSite { url: req.url, + name: req.name, + path: req.path, show: req.show, can_use: req.can_use, + expires_at: req.expires_at as i64, }, ) .map_err(|e| { @@ -395,8 +402,11 @@ impl Service { id, &repositories::site::models::ModifySite { url: req.url, + name: req.name, + path: req.path, show: req.show, can_use: req.can_use, + expires_at: req.expires_at as i64, }, ) .map_err(|e| {