From e0fe8f6a09bc756fd30bedae54ea8d3f40bb442d Mon Sep 17 00:00:00 2001 From: quantulr <35954003+quantulr@users.noreply.github.com> Date: Tue, 14 Nov 2023 11:15:49 +0800 Subject: [PATCH] cid --- .env | 2 +- Cargo.lock | 16 ++++++++-------- src/entity/la_article.rs | 15 ++++++++++++++- src/entity/la_article_category.rs | 11 ++++++++++- src/service/artile.rs | 20 ++++++++++++++++---- src/state.rs | 1 + src/state/article.rs | 5 +++++ 7 files changed, 55 insertions(+), 15 deletions(-) create mode 100644 src/state/article.rs diff --git a/.env b/.env index a3a13f9..066c910 100644 --- a/.env +++ b/.env @@ -1,2 +1,2 @@ -DATABASE_URL=mysql://kirara:kirara169482@localhost:3306/caszl +DATABASE_URL=mysql://root:archlinux0311@localhost:3306/likeadmin UPLOAD_PATH=D:/Downloads/upload_path diff --git a/Cargo.lock b/Cargo.lock index 7b0bd2e..7b376a2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -345,9 +345,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.83" +version = "1.0.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "0f8e7c90afad890484a21653d08b6e209ae34770fb5ee298f9c699fcc1e5c856" dependencies = [ "libc", ] @@ -800,9 +800,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "f95b9abcae896730d42b78e09c155ed4ddf82c07b4de772c64aee5b2d8b7c150" dependencies = [ "bytes", "fnv", @@ -1595,9 +1595,9 @@ dependencies = [ [[package]] name = "sea-orm" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14d17105eb8049488d2528580ecc3f0912ab177d600f10e8e292d6994870ba6a" +checksum = "978e782d3c035ddd588310cd025ae78cd78c795ce6e22981138f30c278e9681d" dependencies = [ "async-stream", "async-trait", @@ -1783,9 +1783,9 @@ dependencies = [ [[package]] name = "signature" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest", "rand_core", diff --git a/src/entity/la_article.rs b/src/entity/la_article.rs index 54df14f..242f190 100644 --- a/src/entity/la_article.rs +++ b/src/entity/la_article.rs @@ -27,6 +27,19 @@ pub struct Model { } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] -pub enum Relation {} +pub enum Relation { + #[sea_orm( + belongs_to = "super::la_article_category::Entity", + from = "Column::Cid", + to = "super::la_article_category::Column::Id", + )] + LaArticleCategory +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::LaArticleCategory.def() + } +} impl ActiveModelBehavior for ActiveModel {} diff --git a/src/entity/la_article_category.rs b/src/entity/la_article_category.rs index 43fe269..26eb888 100644 --- a/src/entity/la_article_category.rs +++ b/src/entity/la_article_category.rs @@ -17,6 +17,15 @@ pub struct Model { } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] -pub enum Relation {} +pub enum Relation { + #[sea_orm(has_many = "super::la_article::Entity")] + LaArticle +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::LaArticle.def() + } +} impl ActiveModelBehavior for ActiveModel {} diff --git a/src/service/artile.rs b/src/service/artile.rs index c373532..75bc05f 100644 --- a/src/service/artile.rs +++ b/src/service/artile.rs @@ -1,6 +1,7 @@ use std::sync::Arc; use crate::entity::la_article; +use crate::entity::la_article_category; use crate::params::article::{ArticleDetailParams, ArticleListParams}; use crate::response::article::{ArticleDetail, ArticleListItem, SiblingArticle}; use crate::response::common::{BaseResponse, PageResponse}; @@ -31,7 +32,15 @@ impl ArticleService { let page_size = params.page_size.unwrap_or(20); let articles_selection = la_article::Entity::find() .filter(la_article::Column::IsDelete.ne(1)) - .filter(la_article::Column::IsShow.ne(0)); + .filter(la_article::Column::IsShow.ne(0)) + .apply_if(Some(params.cid), |mut query, v| { + match v { + Some(cid) => { + query.filter(la_article::Column::Cid.eq(cid)) + } + None => { query } + } + }); let count = match articles_selection.clone().count(&self.state.db_conn).await { Ok(total) => total, Err(_) => 0, @@ -118,13 +127,13 @@ impl ArticleService { } }; - match la_article::Entity::find_by_id(id) + match la_article::Entity::find_by_id(id).find_also_related(la_article_category::Entity) .filter(la_article::Column::IsDelete.eq(0)) .filter(la_article::Column::IsShow.eq(1)) .one(&self.state.db_conn) .await { - Ok(Some(article)) => { + Ok(Some((article, category))) => { // 上一篇文章 let prev_result = la_article::Entity::find() .filter(la_article::Column::IsDelete.eq(0)) @@ -159,7 +168,10 @@ impl ArticleService { let article_detail = ArticleDetail { id: article.id, cid: Option::from(article.cid), - category: None, + category: match category { + Some(category) => Some(category.name), + None => None + }, title: article.title, intro: Option::from(article.intro), summary: article.summary, diff --git a/src/state.rs b/src/state.rs index 309be62..00c690f 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1 +1,2 @@ pub mod app; +pub mod article; diff --git a/src/state/article.rs b/src/state/article.rs new file mode 100644 index 0000000..d5b5725 --- /dev/null +++ b/src/state/article.rs @@ -0,0 +1,5 @@ +use crate::service::artile::ArticleService; + +pub struct ArticleState { + pub article_service: ArticleService +} \ No newline at end of file