Browse Source

feat(article-center): add Article entity audit fields + ArticleQuizRecord

Sisyphus 2 months ago
parent
commit
484d53c4e7

+ 10 - 0
cfc-backend/src/main/java/com/etotem/cfc/entity/Article.java

@@ -28,10 +28,20 @@ public class Article implements Serializable {
     private String visibility;
     private String visibility;
     private String visibleTo;
     private String visibleTo;
     private String status;
     private String status;
+    /** 审核状态:approved(已审核) / pending(待审核) / rejected(已驳回) */
+    private String auditStatus;
+    /** 驳回原因 */
+    private String auditReason;
+    /** 审核人 ID */
+    private Long auditorId;
+    /** 审核时间 */
+    private Date auditedAt;
     private Integer isFeatured;
     private Integer isFeatured;
     private Date publishedAt;
     private Date publishedAt;
     private Integer viewCount;
     private Integer viewCount;
     private Long createdBy;
     private Long createdBy;
+    /** 作者类型: admin/parent/child */
+    private String authorType;
     private Date createdAt;
     private Date createdAt;
     private Date updatedAt;
     private Date updatedAt;
 }
 }

+ 43 - 0
cfc-backend/src/main/java/com/etotem/cfc/entity/ArticleQuizRecord.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 java.util.Date;
+
+@TableName("article_quiz_records")
+public class ArticleQuizRecord {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    private Long articleId;
+    private Long userId;
+    private Long childId;
+    private String questions;
+    private String answers;
+    private Integer score;
+    private Integer pointsEarned;
+    private Date createdAt;
+    private Date updatedAt;
+
+    // getters and setters for ALL fields
+    public Long getId() { return id; }
+    public void setId(Long id) { this.id = id; }
+    public Long getArticleId() { return articleId; }
+    public void setArticleId(Long articleId) { this.articleId = articleId; }
+    public Long getUserId() { return userId; }
+    public void setUserId(Long userId) { this.userId = userId; }
+    public Long getChildId() { return childId; }
+    public void setChildId(Long childId) { this.childId = childId; }
+    public String getQuestions() { return questions; }
+    public void setQuestions(String questions) { this.questions = questions; }
+    public String getAnswers() { return answers; }
+    public void setAnswers(String answers) { this.answers = answers; }
+    public Integer getScore() { return score; }
+    public void setScore(Integer score) { this.score = score; }
+    public Integer getPointsEarned() { return pointsEarned; }
+    public void setPointsEarned(Integer pointsEarned) { this.pointsEarned = pointsEarned; }
+    public Date getCreatedAt() { return createdAt; }
+    public void setCreatedAt(Date createdAt) { this.createdAt = createdAt; }
+    public Date getUpdatedAt() { return updatedAt; }
+    public void setUpdatedAt(Date updatedAt) { this.updatedAt = updatedAt; }
+}

+ 7 - 0
cfc-backend/src/main/java/com/etotem/cfc/mapper/ArticleQuizRecordMapper.java

@@ -0,0 +1,7 @@
+package com.etotem.cfc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.etotem.cfc.entity.ArticleQuizRecord;
+
+public interface ArticleQuizRecordMapper extends BaseMapper<ArticleQuizRecord> {
+}

+ 4 - 0
cfc-backend/src/main/resources/mapper/ArticleQuizRecordMapper.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.etotem.cfc.mapper.ArticleQuizRecordMapper">
+</mapper>

+ 19 - 11
cfc-backend/src/main/resources/schema.sql

@@ -1074,29 +1074,37 @@ CREATE TABLE IF NOT EXISTS article_categories (
 
 
 -- 文章表
 -- 文章表
 CREATE TABLE IF NOT EXISTS articles (
 CREATE TABLE IF NOT EXISTS articles (
-    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
-    category_id BIGINT DEFAULT 0 COMMENT '所属分类ID',
+    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键 ID',
+    category_id BIGINT DEFAULT 0 COMMENT '所属分类 ID',
     title VARCHAR(200) NOT NULL COMMENT '标题',
     title VARCHAR(200) NOT NULL COMMENT '标题',
     summary VARCHAR(500) DEFAULT '' COMMENT '摘要',
     summary VARCHAR(500) DEFAULT '' COMMENT '摘要',
-    cover_image VARCHAR(500) DEFAULT '' COMMENT '封面图URL',
+    cover_image VARCHAR(500) DEFAULT '' COMMENT '封面图 URL',
     content LONGTEXT COMMENT '富文本内容',
     content LONGTEXT COMMENT '富文本内容',
-    tags VARCHAR(200) DEFAULT '' COMMENT '标签JSON数组',
+    tags VARCHAR(200) DEFAULT '' COMMENT '标签 JSON 数组',
     author VARCHAR(100) DEFAULT '浠艾福' COMMENT '作者',
     author VARCHAR(100) DEFAULT '浠艾福' COMMENT '作者',
     read_time INT DEFAULT 0 COMMENT '预计阅读分钟数',
     read_time INT DEFAULT 0 COMMENT '预计阅读分钟数',
-    article_type VARCHAR(20) DEFAULT 'normal' COMMENT '文章类型: normal(普通)/premium(优质)/original(原创)',
+    article_type VARCHAR(20) DEFAULT 'normal' COMMENT '文章类型:normal(普通)/premium(优质)/original(原创)',
     word_count INT DEFAULT 0 COMMENT '文章字数',
     word_count INT DEFAULT 0 COMMENT '文章字数',
-    related_dimensions VARCHAR(100) DEFAULT '' COMMENT '关联五维JSON数组',
-    visibility VARCHAR(20) DEFAULT 'public' COMMENT '浏览权限: public/login/private',
-    visible_to TEXT COMMENT '私密指定人群JSON',
-    status VARCHAR(20) DEFAULT 'draft' COMMENT '状态: draft/published/archived',
-    is_featured TINYINT DEFAULT 0 COMMENT '是否精选:1精选/0普通',
+    related_dimensions VARCHAR(100) DEFAULT '' COMMENT '关联五维 JSON 数组',
+    visibility VARCHAR(20) DEFAULT 'public' COMMENT '浏览权限:public/login/private',
+    visible_to TEXT COMMENT '私密指定人群 JSON',
+    status VARCHAR(20) DEFAULT 'draft' COMMENT '状态:draft/published/archived',
+    is_featured TINYINT DEFAULT 0 COMMENT '是否精选:1 精选/0 普通',
     published_at DATETIME DEFAULT NULL COMMENT '发布时间',
     published_at DATETIME DEFAULT NULL COMMENT '发布时间',
     view_count INT DEFAULT 0 COMMENT '浏览次数',
     view_count INT DEFAULT 0 COMMENT '浏览次数',
-    created_by BIGINT DEFAULT 0 COMMENT '发布人adminID',
+    created_by BIGINT DEFAULT 0 COMMENT '发布人 adminID',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
     updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章表';
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章表';
 
 
+-- Article audit fields (for user-generated content)
+-- ALTER TABLE articles
+--     ADD COLUMN author_type VARCHAR(20) DEFAULT 'admin' COMMENT '作者类型:admin/parent/child' AFTER created_by,
+--     ADD COLUMN audit_status VARCHAR(20) DEFAULT 'approved' COMMENT '审核状态:approved/pending/rejected' AFTER status,
+--     ADD COLUMN audit_reason TEXT COMMENT '驳回原因' AFTER audit_status,
+--     ADD COLUMN auditor_id BIGINT DEFAULT 0 COMMENT '审核人 ID' AFTER audit_reason,
+--     ADD COLUMN audited_at DATETIME COMMENT '审核时间' AFTER auditor_id;
+
 -- =============================================
 -- =============================================
 -- 五维能量系统表
 -- 五维能量系统表
 -- =============================================
 -- =============================================