Просмотр исходного кода

feat(backend): add nutrition-related entities and mappers

- Add FoodNutrient, RdiStandard, ReportFoodSuitability entities
- Add ShoppingList, ShoppingListItem entities
- Add FollowUp entity
- Add UserFoodPreference entity
- Add corresponding Mapper interfaces
- Update DatabaseInitializer and Food entity
Sisyphus 4 месяцев назад
Родитель
Сommit
a8445b8c5a
18 измененных файлов с 461 добавлено и 0 удалено
  1. 115 0
      cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java
  2. 37 0
      cfc-backend/src/main/java/com/etotem/cfc/dto/ParsedFoodSuitability.java
  3. 11 0
      cfc-backend/src/main/java/com/etotem/cfc/dto/ParsedReportResult.java
  4. 41 0
      cfc-backend/src/main/java/com/etotem/cfc/entity/FollowUp.java
  5. 6 0
      cfc-backend/src/main/java/com/etotem/cfc/entity/Food.java
  6. 28 0
      cfc-backend/src/main/java/com/etotem/cfc/entity/FoodNutrient.java
  7. 31 0
      cfc-backend/src/main/java/com/etotem/cfc/entity/RdiStandard.java
  8. 26 0
      cfc-backend/src/main/java/com/etotem/cfc/entity/ReportFoodSuitability.java
  9. 33 0
      cfc-backend/src/main/java/com/etotem/cfc/entity/ShoppingList.java
  10. 43 0
      cfc-backend/src/main/java/com/etotem/cfc/entity/ShoppingListItem.java
  11. 27 0
      cfc-backend/src/main/java/com/etotem/cfc/entity/UserFoodPreference.java
  12. 9 0
      cfc-backend/src/main/java/com/etotem/cfc/mapper/FollowUpMapper.java
  13. 9 0
      cfc-backend/src/main/java/com/etotem/cfc/mapper/FoodNutrientMapper.java
  14. 9 0
      cfc-backend/src/main/java/com/etotem/cfc/mapper/RdiStandardMapper.java
  15. 9 0
      cfc-backend/src/main/java/com/etotem/cfc/mapper/ReportFoodSuitabilityMapper.java
  16. 9 0
      cfc-backend/src/main/java/com/etotem/cfc/mapper/ShoppingListItemMapper.java
  17. 9 0
      cfc-backend/src/main/java/com/etotem/cfc/mapper/ShoppingListMapper.java
  18. 9 0
      cfc-backend/src/main/java/com/etotem/cfc/mapper/UserFoodPreferenceMapper.java

+ 115 - 0
cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java

@@ -3023,6 +3023,11 @@ try {
         } catch (Exception e) {
             log.warn("创建dan_knowledge_base_tag表可能已存在: {}", e.getMessage());
         }
+
+        // 迁移: foods表添加营养字段
+        ensureColumn("foods", "energy_kj", "DECIMAL(8,2) COMMENT '能量(kJ/100g)'");
+        ensureColumn("foods", "starch", "DECIMAL(8,2) COMMENT '淀粉(g/100g)'");
+        ensureColumn("foods", "cholesterol", "DECIMAL(8,2) COMMENT '胆固醇(mg/100g)'");
     }
 
     private void insertSysConfigSeed(String key, String value, String desc) {
@@ -3121,6 +3126,116 @@ try {
             + "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, "
             + "INDEX idx_user_date (user_id, meal_date), "
             + "INDEX idx_child_date (child_id, meal_date)"
+            + ");",
+
+            "CREATE TABLE IF NOT EXISTS report_food_suitability ("
+            + "id BIGINT AUTO_INCREMENT PRIMARY KEY, "
+            + "report_id BIGINT NOT NULL COMMENT '健康报告ID', "
+            + "food_id BIGINT COMMENT '食材ID', "
+            + "food_name VARCHAR(100) NOT NULL COMMENT '食材名称', "
+            + "category VARCHAR(50) COMMENT '分类', "
+            + "score INT NOT NULL COMMENT '适宜度评分', "
+            + "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, "
+            + "INDEX idx_report (report_id), "
+            + "INDEX idx_food (food_id)"
+            + ");",
+
+            "CREATE TABLE IF NOT EXISTS user_food_preference ("
+            + "id BIGINT AUTO_INCREMENT PRIMARY KEY, "
+            + "user_id BIGINT NOT NULL COMMENT '用户ID', "
+            + "food_id BIGINT COMMENT '食材ID', "
+            + "food_name VARCHAR(100) NOT NULL COMMENT '食材名称', "
+            + "score INT NOT NULL DEFAULT 0 COMMENT '评分', "
+            + "reason VARCHAR(500) COMMENT '原因', "
+            + "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, "
+            + "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, "
+            + "INDEX idx_user (user_id)"
+            + ");",
+
+            "CREATE TABLE IF NOT EXISTS food_nutrients ("
+            + "id BIGINT AUTO_INCREMENT PRIMARY KEY, "
+            + "food_id BIGINT NOT NULL COMMENT '食材ID', "
+            + "nutrient_code VARCHAR(20) NOT NULL COMMENT '营养素编码', "
+            + "amount_per_100g DECIMAL(10,4) NOT NULL COMMENT '每100g含量', "
+            + "unit VARCHAR(20) NOT NULL COMMENT '单位', "
+            + "source VARCHAR(50) DEFAULT 'importer' COMMENT '数据来源', "
+            + "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, "
+            + "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, "
+            + "UNIQUE KEY uk_food_nutrient (food_id, nutrient_code), "
+            + "INDEX idx_nutrient (nutrient_code)"
+            + ");",
+
+            "CREATE TABLE IF NOT EXISTS rdi_standards ("
+            + "id BIGINT AUTO_INCREMENT PRIMARY KEY, "
+            + "nutrient_code VARCHAR(20) NOT NULL COMMENT '营养素编码', "
+            + "age_group VARCHAR(10) NOT NULL COMMENT '年龄段', "
+            + "gender VARCHAR(6) DEFAULT 'all' COMMENT '性别', "
+            + "rdi_type VARCHAR(10) NOT NULL COMMENT '参考类型', "
+            + "amount DECIMAL(10,4) NOT NULL COMMENT '推荐量', "
+            + "unit VARCHAR(20) NOT NULL COMMENT '单位', "
+            + "source VARCHAR(100) COMMENT '数据来源', "
+            + "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, "
+            + "UNIQUE KEY uk_rdi (nutrient_code, age_group, gender, rdi_type), "
+            + "INDEX idx_age (age_group)"
+            + ");",
+
+            "CREATE TABLE IF NOT EXISTS shopping_lists ("
+            + "id BIGINT AUTO_INCREMENT PRIMARY KEY, "
+            + "user_id BIGINT NOT NULL COMMENT '用户ID', "
+            + "child_id BIGINT COMMENT '孩子ID', "
+            + "report_id BIGINT COMMENT '健康报告ID', "
+            + "title VARCHAR(200) COMMENT '标题', "
+            + "source VARCHAR(20) NOT NULL COMMENT '来源', "
+            + "status VARCHAR(20) DEFAULT 'active' COMMENT '状态', "
+            + "total_items INT DEFAULT 0 COMMENT '总项数', "
+            + "purchased_items INT DEFAULT 0 COMMENT '已购项数', "
+            + "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, "
+            + "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, "
+            + "INDEX idx_user (user_id), "
+            + "INDEX idx_report (report_id), "
+            + "INDEX idx_status (status)"
+            + ");",
+
+            "CREATE TABLE IF NOT EXISTS shopping_list_items ("
+            + "id BIGINT AUTO_INCREMENT PRIMARY KEY, "
+            + "list_id BIGINT NOT NULL COMMENT '购物清单ID', "
+            + "food_id BIGINT COMMENT '食材ID', "
+            + "food_name VARCHAR(100) NOT NULL COMMENT '食材名称', "
+            + "category VARCHAR(50) COMMENT '分类', "
+            + "quantity DECIMAL(8,2) DEFAULT 1 COMMENT '数量', "
+            + "unit VARCHAR(20) DEFAULT '份' COMMENT '单位', "
+            + "priority VARCHAR(10) DEFAULT 'medium' COMMENT '优先级', "
+            + "reason VARCHAR(200) COMMENT '推荐原因', "
+            + "score INT COMMENT '评分', "
+            + "source VARCHAR(20) COMMENT '来源', "
+            + "purchased TINYINT DEFAULT 0 COMMENT '是否已购', "
+            + "purchased_at DATETIME COMMENT '购买时间', "
+            + "sort_order INT DEFAULT 0 COMMENT '排序', "
+            + "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, "
+            + "INDEX idx_list (list_id), "
+            + "INDEX idx_purchased (purchased)"
+            + ");",
+
+            "CREATE TABLE IF NOT EXISTS follow_up ("
+            + "id BIGINT AUTO_INCREMENT PRIMARY KEY, "
+            + "family_id BIGINT NOT NULL COMMENT '家庭ID', "
+            + "child_id BIGINT COMMENT '孩子ID', "
+            + "teacher_id BIGINT COMMENT '规划师ID', "
+            + "deficiency_id BIGINT COMMENT '缺乏项ID', "
+            + "message_id BIGINT COMMENT '消息ID', "
+            + "status VARCHAR(20) DEFAULT 'pending' COMMENT '状态', "
+            + "priority VARCHAR(10) DEFAULT 'medium' COMMENT '优先级', "
+            + "description VARCHAR(500) COMMENT '描述', "
+            + "parent_feedback TEXT COMMENT '家长反馈', "
+            + "teacher_review VARCHAR(500) COMMENT '规划师点评', "
+            + "due_date DATETIME COMMENT '截止日期', "
+            + "completed_at DATETIME COMMENT '完成时间', "
+            + "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, "
+            + "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, "
+            + "INDEX idx_family (family_id), "
+            + "INDEX idx_teacher (teacher_id), "
+            + "INDEX idx_status (status), "
+            + "INDEX idx_due (due_date)"
             + ");"
         };
 

+ 37 - 0
cfc-backend/src/main/java/com/etotem/cfc/dto/ParsedFoodSuitability.java

@@ -0,0 +1,37 @@
+package com.etotem.cfc.dto;
+
+import java.math.BigDecimal;
+
+public class ParsedFoodSuitability {
+    private String foodName;
+    private String category;
+    private Integer score;
+    private BigDecimal energyKj;
+    private BigDecimal protein;
+    private BigDecimal fat;
+    private BigDecimal carbs;
+    private BigDecimal starch;
+    private BigDecimal fiber;
+    private BigDecimal cholesterol;
+
+    public String getFoodName() { return foodName; }
+    public void setFoodName(String foodName) { this.foodName = foodName; }
+    public String getCategory() { return category; }
+    public void setCategory(String category) { this.category = category; }
+    public Integer getScore() { return score; }
+    public void setScore(Integer score) { this.score = score; }
+    public BigDecimal getEnergyKj() { return energyKj; }
+    public void setEnergyKj(BigDecimal energyKj) { this.energyKj = energyKj; }
+    public BigDecimal getProtein() { return protein; }
+    public void setProtein(BigDecimal protein) { this.protein = protein; }
+    public BigDecimal getFat() { return fat; }
+    public void setFat(BigDecimal fat) { this.fat = fat; }
+    public BigDecimal getCarbs() { return carbs; }
+    public void setCarbs(BigDecimal carbs) { this.carbs = carbs; }
+    public BigDecimal getStarch() { return starch; }
+    public void setStarch(BigDecimal starch) { this.starch = starch; }
+    public BigDecimal getFiber() { return fiber; }
+    public void setFiber(BigDecimal fiber) { this.fiber = fiber; }
+    public BigDecimal getCholesterol() { return cholesterol; }
+    public void setCholesterol(BigDecimal cholesterol) { this.cholesterol = cholesterol; }
+}

+ 11 - 0
cfc-backend/src/main/java/com/etotem/cfc/dto/ParsedReportResult.java

@@ -65,6 +65,9 @@ public class ParsedReportResult {
     /** 健康指标 — 营养、屏障、短链脂肪酸、神经递质、抗生素耐药等 */
     private List<ParsedIndicator> indicators;
 
+    /** 食材适宜度 */
+    private List<ParsedFoodSuitability> foodSuitability;
+
     // ==================== getters/setters ====================
 
     public Integer getOverallScore() {
@@ -210,4 +213,12 @@ public class ParsedReportResult {
     public void setIndicators(List<ParsedIndicator> indicators) {
         this.indicators = indicators;
     }
+
+    public List<ParsedFoodSuitability> getFoodSuitability() {
+        return foodSuitability;
+    }
+
+    public void setFoodSuitability(List<ParsedFoodSuitability> foodSuitability) {
+        this.foodSuitability = foodSuitability;
+    }
 }

+ 41 - 0
cfc-backend/src/main/java/com/etotem/cfc/entity/FollowUp.java

@@ -0,0 +1,41 @@
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("follow_up")
+public class FollowUp implements Serializable {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /** 家庭ID */
+    private Long familyId;
+    /** 孩子ID */
+    private Long childId;
+    /** 规划师ID */
+    private Long teacherId;
+    /** 缺乏项ID */
+    private Long deficiencyId;
+    /** 消息ID */
+    private Long messageId;
+    /** 状态 */
+    private String status;
+    /** 优先级 */
+    private String priority;
+    /** 描述 */
+    private String description;
+    /** 家长反馈 */
+    private String parentFeedback;
+    /** 规划师点评 */
+    private String teacherReview;
+    /** 截止日期 */
+    private Date dueDate;
+    /** 完成时间 */
+    private Date completedAt;
+    private Date createdAt;
+    private Date updatedAt;
+}

+ 6 - 0
cfc-backend/src/main/java/com/etotem/cfc/entity/Food.java

@@ -21,6 +21,12 @@ public class Food implements Serializable {
     private BigDecimal fat;
     private BigDecimal carbs;
     private BigDecimal fiber;
+    /** 能量(kJ/100g) */
+    private BigDecimal energyKj;
+    /** 淀粉(g/100g) */
+    private BigDecimal starch;
+    /** 胆固醇(mg/100g) */
+    private BigDecimal cholesterol;
     private Integer priceLevel;
     private String nutritionTags;
     private String suitableFor;

+ 28 - 0
cfc-backend/src/main/java/com/etotem/cfc/entity/FoodNutrient.java

@@ -0,0 +1,28 @@
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@TableName("food_nutrients")
+public class FoodNutrient implements Serializable {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /** 食材ID */
+    private Long foodId;
+    /** 营养素编码 */
+    private String nutrientCode;
+    /** 每100g含量 */
+    private BigDecimal amountPer100g;
+    /** 单位 */
+    private String unit;
+    /** 数据来源 */
+    private String source;
+    private Date createdAt;
+    private Date updatedAt;
+}

+ 31 - 0
cfc-backend/src/main/java/com/etotem/cfc/entity/RdiStandard.java

@@ -0,0 +1,31 @@
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@TableName("rdi_standards")
+public class RdiStandard implements Serializable {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /** 营养素编码 */
+    private String nutrientCode;
+    /** 年龄段 */
+    private String ageGroup;
+    /** 性别 */
+    private String gender;
+    /** 参考类型 */
+    private String rdiType;
+    /** 推荐量 */
+    private BigDecimal amount;
+    /** 单位 */
+    private String unit;
+    /** 数据来源 */
+    private String source;
+    private Date createdAt;
+}

+ 26 - 0
cfc-backend/src/main/java/com/etotem/cfc/entity/ReportFoodSuitability.java

@@ -0,0 +1,26 @@
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("report_food_suitability")
+public class ReportFoodSuitability implements Serializable {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /** 健康报告ID */
+    private Long reportId;
+    /** 食材ID */
+    private Long foodId;
+    /** 食材名称 */
+    private String foodName;
+    /** 分类 */
+    private String category;
+    /** 适宜度评分 */
+    private Integer score;
+    private Date createdAt;
+}

+ 33 - 0
cfc-backend/src/main/java/com/etotem/cfc/entity/ShoppingList.java

@@ -0,0 +1,33 @@
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("shopping_lists")
+public class ShoppingList implements Serializable {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /** 用户ID */
+    private Long userId;
+    /** 孩子ID */
+    private Long childId;
+    /** 健康报告ID */
+    private Long reportId;
+    /** 标题 */
+    private String title;
+    /** 来源 */
+    private String source;
+    /** 状态 */
+    private String status;
+    /** 总项数 */
+    private Integer totalItems;
+    /** 已购项数 */
+    private Integer purchasedItems;
+    private Date createdAt;
+    private Date updatedAt;
+}

+ 43 - 0
cfc-backend/src/main/java/com/etotem/cfc/entity/ShoppingListItem.java

@@ -0,0 +1,43 @@
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@TableName("shopping_list_items")
+public class ShoppingListItem implements Serializable {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /** 购物清单ID */
+    private Long listId;
+    /** 食材ID */
+    private Long foodId;
+    /** 食材名称 */
+    private String foodName;
+    /** 分类 */
+    private String category;
+    /** 数量 */
+    private BigDecimal quantity;
+    /** 单位 */
+    private String unit;
+    /** 优先级 */
+    private String priority;
+    /** 推荐原因 */
+    private String reason;
+    /** 评分 */
+    private Integer score;
+    /** 来源 */
+    private String source;
+    /** 是否已购 */
+    private Integer purchased;
+    /** 购买时间 */
+    private Date purchasedAt;
+    /** 排序 */
+    private Integer sortOrder;
+    private Date createdAt;
+}

+ 27 - 0
cfc-backend/src/main/java/com/etotem/cfc/entity/UserFoodPreference.java

@@ -0,0 +1,27 @@
+package com.etotem.cfc.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("user_food_preference")
+public class UserFoodPreference implements Serializable {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /** 用户ID */
+    private Long userId;
+    /** 食材ID */
+    private Long foodId;
+    /** 食材名称 */
+    private String foodName;
+    /** 评分 */
+    private Integer score;
+    /** 原因 */
+    private String reason;
+    private Date createdAt;
+    private Date updatedAt;
+}

+ 9 - 0
cfc-backend/src/main/java/com/etotem/cfc/mapper/FollowUpMapper.java

@@ -0,0 +1,9 @@
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.FollowUp;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface FollowUpMapper extends BaseMapper<FollowUp> {
+}

+ 9 - 0
cfc-backend/src/main/java/com/etotem/cfc/mapper/FoodNutrientMapper.java

@@ -0,0 +1,9 @@
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.FoodNutrient;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface FoodNutrientMapper extends BaseMapper<FoodNutrient> {
+}

+ 9 - 0
cfc-backend/src/main/java/com/etotem/cfc/mapper/RdiStandardMapper.java

@@ -0,0 +1,9 @@
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.RdiStandard;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface RdiStandardMapper extends BaseMapper<RdiStandard> {
+}

+ 9 - 0
cfc-backend/src/main/java/com/etotem/cfc/mapper/ReportFoodSuitabilityMapper.java

@@ -0,0 +1,9 @@
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.ReportFoodSuitability;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ReportFoodSuitabilityMapper extends BaseMapper<ReportFoodSuitability> {
+}

+ 9 - 0
cfc-backend/src/main/java/com/etotem/cfc/mapper/ShoppingListItemMapper.java

@@ -0,0 +1,9 @@
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.ShoppingListItem;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ShoppingListItemMapper extends BaseMapper<ShoppingListItem> {
+}

+ 9 - 0
cfc-backend/src/main/java/com/etotem/cfc/mapper/ShoppingListMapper.java

@@ -0,0 +1,9 @@
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.ShoppingList;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ShoppingListMapper extends BaseMapper<ShoppingList> {
+}

+ 9 - 0
cfc-backend/src/main/java/com/etotem/cfc/mapper/UserFoodPreferenceMapper.java

@@ -0,0 +1,9 @@
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.UserFoodPreference;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface UserFoodPreferenceMapper extends BaseMapper<UserFoodPreference> {
+}