Ver Fonte

✨ feat(category): 更新获取分类命令,支持返回分类及其商品信息

陈雪 há 2 semanas atrás
pai
commit
90e1d0a55e
2 ficheiros alterados com 29 adições e 8 exclusões
  1. 6 4
      src-tauri/src/commands/mod.rs
  2. 23 4
      src-tauri/src/service/category.rs

+ 6 - 4
src-tauri/src/commands/mod.rs

@@ -1,15 +1,17 @@
 use tauri::State;
 
-use crate::{AppState, CommandResult, models::menu_cate, service::category::Category};
+use crate::{
+    AppState, CommandResult,
+    service::category::{Category, CategoryWithSpu},
+};
 
 #[tauri::command]
-pub async fn get_category(app_state: State<'_, AppState>) -> CommandResult<menu_cate::Model> {
+pub async fn get_category(app_state: State<'_, AppState>) -> CommandResult<Vec<CategoryWithSpu>> {
     let category = Category::new(app_state.conn.clone());
     let categories = category.get_category_commodity().await;
     match categories {
-        Ok(Some(categories)) => Ok(categories),
+        Ok(categories) => Ok(categories),
         Err(e) => Err(format!("请求分类失败{:?}", e)),
-        _ => Err(format!("没有分类")),
     }
     // Ok("111".into())
 }

+ 23 - 4
src-tauri/src/service/category.rs

@@ -1,20 +1,39 @@
 use std::sync::Arc;
 
 use sea_orm::{DatabaseConnection, EntityTrait};
+use serde::Serialize;
 
-use crate::models::{menu_cate, prelude::MenuCate};
+use crate::models::{
+    menu_cate,
+    menu_commodity::{self},
+    prelude::{MenuCate, MenuCommodity},
+};
 
 pub struct Category {
     conn: Arc<DatabaseConnection>,
 }
 
+#[derive(Debug, Serialize)]
+pub struct CategoryWithSpu {
+    #[serde(flatten)]
+    pub category: menu_cate::Model,
+    pub goods: Vec<menu_commodity::Model>,
+}
+
 impl Category {
     pub fn new(conn: Arc<DatabaseConnection>) -> Self {
         return Self { conn };
     }
-    pub async fn get_category_commodity(&self) -> anyhow::Result<Option<menu_cate::Model>> {
-        let categories: Option<menu_cate::Model> = MenuCate::find().one(&*self.conn).await?;
+    pub async fn get_category_commodity(&self) -> anyhow::Result<Vec<CategoryWithSpu>> {
+        let categories_with_goods: Vec<(menu_cate::Model, Vec<menu_commodity::Model>)> =
+            MenuCate::find()
+                .find_with_related(MenuCommodity)
+                .all(&*self.conn)
+                .await?;
 
-        Ok(categories)
+        Ok(categories_with_goods
+            .into_iter()
+            .map(|(category, goods)| CategoryWithSpu { category, goods })
+            .collect())
     }
 }