feat: 新增前台业务数据模型

- 新增TargetTypeEnum目标类型枚举(非遗项目、传承人、新闻、活动)
- 新增前台用户实体类HrtUser
- 新增非遗项目实体类HrtHeritage
- 新增传承人实体类HrtInheritor
- 新增新闻资讯实体类HrtNews
- 新增活动实体类HrtEvent
- 新增评论实体类HrtComment
- 新增收藏实体类HrtFavorite
- 新增点赞实体类HrtLike
- 新增浏览历史实体类HrtViewHistory
- 新增活动报名实体类HrtEventRegistration
- 新增所有实体对应的VO类(查询、新增、更新等)
This commit is contained in:
Leo 2025-10-13 20:35:16 +08:00
parent a45a400238
commit d082e2f830
45 changed files with 3280 additions and 0 deletions

View File

@ -0,0 +1,87 @@
package org.leocoder.heritage.domain.enums;
import lombok.Getter;
/**
* @author Leocoder
* @description [目标类型枚举]
*/
@Getter
public enum TargetTypeEnum {
/**
* 非遗项目
*/
HERITAGE("heritage", "非遗项目"),
/**
* 传承人
*/
INHERITOR("inheritor", "传承人"),
/**
* 新闻资讯
*/
NEWS("news", "新闻资讯"),
/**
* 评论仅点赞支持
*/
COMMENT("comment", "评论");
/**
* 类型代码
*/
private final String code;
/**
* 类型名称
*/
private final String name;
TargetTypeEnum(String code, String name) {
this.code = code;
this.name = name;
}
/**
* @description [根据代码获取枚举]
* @author Leocoder
*/
public static TargetTypeEnum fromCode(String code) {
for (TargetTypeEnum type : values()) {
if (type.getCode().equals(code)) {
return type;
}
}
return null;
}
/**
* @description [验证代码是否有效]
* @author Leocoder
*/
public static boolean isValid(String code) {
return fromCode(code) != null;
}
/**
* @description [验证是否支持收藏]
* @author Leocoder
*/
public static boolean isFavoriteSupported(String code) {
TargetTypeEnum type = fromCode(code);
// 收藏不支持评论类型
return type != null && type != COMMENT;
}
/**
* @description [验证是否支持点赞]
* @author Leocoder
*/
public static boolean isLikeSupported(String code) {
// 点赞支持所有类型
return isValid(code);
}
}

View File

@ -0,0 +1,44 @@
package org.leocoder.heritage.domain.model.vo.portal;
import jakarta.validation.constraints.*;
import lombok.Data;
/**
* @author Leocoder
* @description [发表评论请求VO]
*/
@Data
public class CommentAddVo {
/**
* 目标类型heritageinheritornewsevent
*/
@NotBlank(message = "目标类型不能为空")
private String targetType;
/**
* 目标ID
*/
@NotNull(message = "目标ID不能为空")
private Long targetId;
/**
* 评论内容
*/
@NotBlank(message = "评论内容不能为空")
@Size(min = 1, max = 500, message = "评论内容长度必须在1-500字符之间")
private String content;
/**
* 评分1-5星仅针对非遗项目可选
*/
@Min(value = 1, message = "评分不能小于1星")
@Max(value = 5, message = "评分不能大于5星")
private Integer rating;
/**
* 父评论ID0或null表示一级评论
*/
private Long parentId;
}

View File

@ -0,0 +1,87 @@
package org.leocoder.heritage.domain.model.vo.portal;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author Leocoder
* @description [评论项展示VO]
*/
@Data
public class CommentItemVo {
/**
* 评论ID
*/
private Long id;
/**
* 用户ID
*/
private Long userId;
/**
* 用户昵称
*/
private String userName;
/**
* 用户头像
*/
private String userAvatar;
/**
* 目标类型heritageinheritornewsevent
*/
private String targetType;
/**
* 目标ID
*/
private Long targetId;
/**
* 评论内容
*/
private String content;
/**
* 评分1-5星仅针对非遗项目
*/
private Integer rating;
/**
* 父评论ID0表示一级评论
*/
private Long parentId;
/**
* 点赞数
*/
private Integer likeCount;
/**
* 当前用户是否已点赞
*/
private Boolean isLiked = false;
/**
* 创建时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 回复列表仅一级评论包含
*/
private List<CommentItemVo> replies;
/**
* 回复数量
*/
private Integer replyCount = 0;
}

View File

@ -0,0 +1,41 @@
package org.leocoder.heritage.domain.model.vo.portal;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* @author Leocoder
* @description [评论列表查询VO]
*/
@Data
public class CommentQueryVo {
/**
* 页码
*/
private Integer pageNum = 1;
/**
* 每页数量
*/
private Integer pageSize = 10;
/**
* 目标类型heritageinheritornewsevent
*/
@NotBlank(message = "目标类型不能为空")
private String targetType;
/**
* 目标ID
*/
@NotNull(message = "目标ID不能为空")
private Long targetId;
/**
* 排序方式latest-最新hottest-最热默认最新
*/
private String sortType = "latest";
}

View File

@ -0,0 +1,99 @@
package org.leocoder.heritage.domain.model.vo.portal;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [活动详情展示VO]
*/
@Data
public class EventDetailVo {
/**
* 活动ID
*/
private Long id;
/**
* 活动标题
*/
private String title;
/**
* 活动摘要
*/
private String summary;
/**
* 活动详情
*/
private String content;
/**
* 封面图
*/
private String coverImage;
/**
* 活动地点
*/
private String location;
/**
* 开始时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime;
/**
* 结束时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime;
/**
* 最大参与人数
*/
private Integer maxParticipants;
/**
* 当前参与人数
*/
private Integer currentParticipants;
/**
* 报名开始时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime registrationStart;
/**
* 报名结束时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime registrationEnd;
/**
* 状态upcomingongoingfinishedcancelled
*/
private String status;
/**
* 浏览量
*/
private Integer viewCount;
/**
* 是否已报名
*/
private Boolean isRegistered = false;
/**
* 是否可以报名
*/
private Boolean canRegister = false;
}

View File

@ -0,0 +1,89 @@
package org.leocoder.heritage.domain.model.vo.portal;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [活动列表展示VO]
*/
@Data
public class EventListVo {
/**
* 活动ID
*/
private Long id;
/**
* 活动标题
*/
private String title;
/**
* 活动摘要
*/
private String summary;
/**
* 封面图
*/
private String coverImage;
/**
* 活动地点
*/
private String location;
/**
* 开始时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime;
/**
* 结束时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime;
/**
* 最大参与人数
*/
private Integer maxParticipants;
/**
* 当前参与人数
*/
private Integer currentParticipants;
/**
* 报名开始时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime registrationStart;
/**
* 报名结束时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime registrationEnd;
/**
* 状态upcomingongoingfinishedcancelled
*/
private String status;
/**
* 浏览量
*/
private Integer viewCount;
/**
* 是否已报名
*/
private Boolean isRegistered = false;
}

View File

@ -0,0 +1,32 @@
package org.leocoder.heritage.domain.model.vo.portal;
import lombok.Data;
/**
* @author Leocoder
* @description [活动列表查询VO]
*/
@Data
public class EventQueryVo {
/**
* 页码
*/
private Integer pageNum = 1;
/**
* 每页数量
*/
private Integer pageSize = 10;
/**
* 状态upcoming-即将开始ongoing-进行中finished-已结束不传则查询所有
*/
private String status;
/**
* 关键词搜索
*/
private String keyword;
}

View File

@ -0,0 +1,31 @@
package org.leocoder.heritage.domain.model.vo.portal;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
/**
* @author Leocoder
* @description [活动报名请求VO]
*/
@Data
public class EventRegistrationVo {
/**
* 活动ID
*/
@NotNull(message = "活动ID不能为空")
private Long eventId;
/**
* 联系电话
*/
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
private String phone;
/**
* 备注信息
*/
private String remark;
}

View File

@ -0,0 +1,61 @@
package org.leocoder.heritage.domain.model.vo.portal;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [收藏项展示VO]
*/
@Data
public class FavoriteItemVo {
/**
* 收藏ID
*/
private Long id;
/**
* 目标类型heritageinheritornews
*/
private String targetType;
/**
* 目标ID
*/
private Long targetId;
/**
* 目标标题/名称
*/
private String targetTitle;
/**
* 目标封面图/头像
*/
private String targetCover;
/**
* 目标描述/简介
*/
private String targetDescription;
/**
* 目标浏览量
*/
private Integer targetViewCount;
/**
* 目标点赞数
*/
private Integer targetLikeCount;
/**
* 收藏时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,26 @@
package org.leocoder.heritage.domain.model.vo.portal;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* @author Leocoder
* @description [收藏操作请求VO]
*/
@Data
public class FavoriteOperateVo {
/**
* 目标类型heritageinheritornews
*/
@NotBlank(message = "目标类型不能为空")
private String targetType;
/**
* 目标ID
*/
@NotNull(message = "目标ID不能为空")
private Long targetId;
}

View File

@ -0,0 +1,27 @@
package org.leocoder.heritage.domain.model.vo.portal;
import lombok.Data;
/**
* @author Leocoder
* @description [我的收藏列表查询VO]
*/
@Data
public class FavoriteQueryVo {
/**
* 页码
*/
private Integer pageNum = 1;
/**
* 每页数量
*/
private Integer pageSize = 10;
/**
* 目标类型heritageinheritornews不传则查询所有
*/
private String targetType;
}

View File

@ -0,0 +1,132 @@
package org.leocoder.heritage.domain.model.vo.portal;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [非遗项目详情展示VO]
*/
@Data
public class HrtHeritageDetailVo {
/**
* 主键ID
*/
private Long id;
/**
* 项目名称
*/
private String name;
/**
* 英文名称
*/
private String nameEn;
/**
* 分类traditional-crafttraditional-art等
*/
private String category;
/**
* 级别worldnationalprovincialmunicipalcounty
*/
private String level;
/**
* 省份
*/
private String province;
/**
* 城市
*/
private String city;
/**
* 项目介绍
*/
private String description;
/**
* 历史渊源
*/
private String history;
/**
* 技艺特点
*/
private String skills;
/**
* 文化意义
*/
private String significance;
/**
* 封面图
*/
private String coverImage;
/**
* 图片集合JSON数组
*/
private String images;
/**
* 视频URL
*/
private String videoUrl;
/**
* 标签逗号分隔
*/
private String tags;
/**
* 状态active-正常传承endangered-濒危
*/
private String status;
/**
* 浏览量
*/
private Integer viewCount;
/**
* 点赞数
*/
private Integer likeCount;
/**
* 收藏数
*/
private Integer favoriteCount;
/**
* 评论数
*/
private Integer commentCount;
/**
* 是否精选0-1-
*/
private Integer isFeatured;
/**
* 创建时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 更新时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
}

View File

@ -0,0 +1,101 @@
package org.leocoder.heritage.domain.model.vo.portal;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [非遗项目列表展示VO]
*/
@Data
public class HrtHeritageListVo {
/**
* 主键ID
*/
private Long id;
/**
* 项目名称
*/
private String name;
/**
* 英文名称
*/
private String nameEn;
/**
* 分类traditional-crafttraditional-art等
*/
private String category;
/**
* 级别worldnationalprovincialmunicipalcounty
*/
private String level;
/**
* 省份
*/
private String province;
/**
* 城市
*/
private String city;
/**
* 项目介绍
*/
private String description;
/**
* 封面图
*/
private String coverImage;
/**
* 标签逗号分隔
*/
private String tags;
/**
* 状态active-正常传承endangered-濒危
*/
private String status;
/**
* 浏览量
*/
private Integer viewCount;
/**
* 点赞数
*/
private Integer likeCount;
/**
* 收藏数
*/
private Integer favoriteCount;
/**
* 评论数
*/
private Integer commentCount;
/**
* 是否精选0-1-
*/
private Integer isFeatured;
/**
* 创建时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,72 @@
package org.leocoder.heritage.domain.model.vo.portal;
import lombok.Data;
/**
* @author Leocoder
* @description [非遗项目查询条件VO]
*/
@Data
public class HrtHeritageQueryVo {
/**
* 页码
*/
private Integer pageNum = 1;
/**
* 每页数量
*/
private Integer pageSize = 10;
/**
* 项目名称模糊查询
*/
private String name;
/**
* 分类traditional-crafttraditional-art等
*/
private String category;
/**
* 级别worldnationalprovincialmunicipalcounty
*/
private String level;
/**
* 省份
*/
private String province;
/**
* 城市
*/
private String city;
/**
* 状态active-正常传承endangered-濒危
*/
private String status;
/**
* 标签模糊匹配
*/
private String tag;
/**
* 关键词搜索名称描述历史等字段
*/
private String keyword;
/**
* 排序字段view_countlike_countfavorite_countcreate_time
*/
private String sortField = "create_time";
/**
* 排序方式ascdesc
*/
private String sortOrder = "desc";
}

View File

@ -0,0 +1,127 @@
package org.leocoder.heritage.domain.model.vo.portal;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [传承人详情展示VO]
*/
@Data
public class HrtInheritorDetailVo {
/**
* 主键ID
*/
private Long id;
/**
* 姓名
*/
private String name;
/**
* 英文名
*/
private String nameEn;
/**
* 性别1-2-
*/
private Integer gender;
/**
* 出生年份
*/
private Integer birthYear;
/**
* 头像
*/
private String avatar;
/**
* 关联非遗项目ID
*/
private Long heritageId;
/**
* 传承项目名称
*/
private String heritageName;
/**
* 传承人级别nationalprovincial等
*/
private String level;
/**
* 省份
*/
private String province;
/**
* 城市
*/
private String city;
/**
* 个人简介
*/
private String introduction;
/**
* 传承故事
*/
private String story;
/**
* 主要成就
*/
private String achievements;
/**
* 代表作品JSON数组
*/
private String works;
/**
* 图片集合JSON数组
*/
private String images;
/**
* 视频URL
*/
private String videoUrl;
/**
* 浏览量
*/
private Integer viewCount;
/**
* 点赞数
*/
private Integer likeCount;
/**
* 是否精选0-1-
*/
private Integer isFeatured;
/**
* 创建时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 更新时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
}

View File

@ -0,0 +1,96 @@
package org.leocoder.heritage.domain.model.vo.portal;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [传承人列表展示VO]
*/
@Data
public class HrtInheritorListVo {
/**
* 主键ID
*/
private Long id;
/**
* 姓名
*/
private String name;
/**
* 英文名
*/
private String nameEn;
/**
* 性别1-2-
*/
private Integer gender;
/**
* 出生年份
*/
private Integer birthYear;
/**
* 头像
*/
private String avatar;
/**
* 关联非遗项目ID
*/
private Long heritageId;
/**
* 传承项目名称
*/
private String heritageName;
/**
* 传承人级别nationalprovincial等
*/
private String level;
/**
* 省份
*/
private String province;
/**
* 城市
*/
private String city;
/**
* 个人简介
*/
private String introduction;
/**
* 浏览量
*/
private Integer viewCount;
/**
* 点赞数
*/
private Integer likeCount;
/**
* 是否精选0-1-
*/
private Integer isFeatured;
/**
* 创建时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,62 @@
package org.leocoder.heritage.domain.model.vo.portal;
import lombok.Data;
/**
* @author Leocoder
* @description [传承人查询条件VO]
*/
@Data
public class HrtInheritorQueryVo {
/**
* 页码
*/
private Integer pageNum = 1;
/**
* 每页数量
*/
private Integer pageSize = 10;
/**
* 姓名模糊查询
*/
private String name;
/**
* 传承人级别nationalprovincial等
*/
private String level;
/**
* 省份
*/
private String province;
/**
* 城市
*/
private String city;
/**
* 关联非遗项目ID
*/
private Long heritageId;
/**
* 关键词搜索姓名简介传承故事等字段
*/
private String keyword;
/**
* 排序字段view_countlike_countcreate_time
*/
private String sortField = "create_time";
/**
* 排序方式ascdesc
*/
private String sortOrder = "desc";
}

View File

@ -0,0 +1,32 @@
package org.leocoder.heritage.domain.model.vo.portal;
import lombok.Data;
/**
* @author Leocoder
* @description [前台用户登录返回-返回类]
*/
@Data
public class HrtLoginResultVo {
/**
* 访问令牌
*/
private String token;
/**
* Token名称
*/
private String tokenName;
/**
* Token有效期单位
*/
private Long tokenTimeout;
/**
* 用户信息
*/
private HrtUserInfoVo userInfo;
}

View File

@ -0,0 +1,30 @@
package org.leocoder.heritage.domain.model.vo.portal;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
/**
* @author Leocoder
* @description [前台用户登录-模型][Vo类]
*/
@Data
public class HrtLoginVo {
/**
* 账号用户名/邮箱/手机号
*/
@NotBlank(message = "请输入账号")
private String account;
/**
* 密码
*/
@NotBlank(message = "请输入密码")
private String password;
/**
* 记住登录默认为false
*/
private Boolean rememberMe = false;
}

View File

@ -0,0 +1,55 @@
package org.leocoder.heritage.domain.model.vo.portal;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
/**
* @author Leocoder
* @description [前台用户注册-模型][Vo类]
*/
@Data
public class HrtRegisterVo {
/**
* 用户名
*/
@Length(min = 3, max = 16, message = "用户名长度为 3-16 位")
@Pattern(regexp = "^[A-Za-z0-9_]+$", message = "用户名格式为数字、字母及下划线")
@NotBlank(message = "请输入用户名")
private String username;
/**
* 密码
*/
@Length(min = 6, max = 20, message = "密码长度为 6-20 位")
@NotBlank(message = "请输入密码")
private String password;
/**
* 确认密码
*/
@NotBlank(message = "请输入确认密码")
private String confirmPassword;
/**
* 邮箱
*/
@Email(message = "邮箱格式不正确")
private String email;
/**
* 手机号
*/
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
private String phone;
/**
* 昵称必填
*/
@NotBlank(message = "请输入昵称")
private String nickname;
}

View File

@ -0,0 +1,88 @@
package org.leocoder.heritage.domain.model.vo.portal;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [前台用户信息-返回类]
*/
@Data
public class HrtUserInfoVo {
/**
* 用户ID
*/
private Long id;
/**
* 用户名
*/
private String username;
/**
* 昵称
*/
private String nickname;
/**
* 头像URL
*/
private String avatar;
/**
* 邮箱
*/
private String email;
/**
* 手机号
*/
private String phone;
/**
* 性别0-未知1-2-
*/
private Integer gender;
/**
* 生日
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private LocalDate birthday;
/**
* 省份
*/
private String province;
/**
* 城市
*/
private String city;
/**
* 状态0-禁用1-正常
*/
private Integer status;
/**
* 最后登录IP
*/
private String loginIp;
/**
* 最后登录时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime loginTime;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,26 @@
package org.leocoder.heritage.domain.model.vo.portal;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* @author Leocoder
* @description [点赞操作请求VO]
*/
@Data
public class LikeOperateVo {
/**
* 目标类型heritageinheritornewscomment
*/
@NotBlank(message = "目标类型不能为空")
private String targetType;
/**
* 目标ID
*/
@NotNull(message = "目标ID不能为空")
private Long targetId;
}

View File

@ -0,0 +1,27 @@
package org.leocoder.heritage.domain.model.vo.portal;
import lombok.Data;
/**
* @author Leocoder
* @description [我的评论列表查询VO]
*/
@Data
public class MyCommentQueryVo {
/**
* 页码
*/
private Integer pageNum = 1;
/**
* 每页数量
*/
private Integer pageSize = 10;
/**
* 目标类型heritageinheritornewsevent不传则查询所有
*/
private String targetType;
}

View File

@ -0,0 +1,78 @@
package org.leocoder.heritage.domain.model.vo.portal;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [我的活动报名项展示VO]
*/
@Data
public class MyEventRegistrationItemVo {
/**
* 报名ID
*/
private Long id;
/**
* 活动ID
*/
private Long eventId;
/**
* 活动标题
*/
private String eventTitle;
/**
* 活动封面图
*/
private String eventCoverImage;
/**
* 活动地点
*/
private String eventLocation;
/**
* 活动开始时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime eventStartTime;
/**
* 活动结束时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime eventEndTime;
/**
* 活动状态upcomingongoingfinishedcancelled
*/
private String eventStatus;
/**
* 报名状态pendingapprovedrejectedcancelled
*/
private String registrationStatus;
/**
* 联系电话
*/
private String phone;
/**
* 备注信息
*/
private String remark;
/**
* 报名时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,27 @@
package org.leocoder.heritage.domain.model.vo.portal;
import lombok.Data;
/**
* @author Leocoder
* @description [我的活动报名列表查询VO]
*/
@Data
public class MyEventRegistrationVo {
/**
* 页码
*/
private Integer pageNum = 1;
/**
* 每页数量
*/
private Integer pageSize = 10;
/**
* 报名状态pendingapprovedrejectedcancelled不传则查询所有
*/
private String status;
}

View File

@ -0,0 +1,91 @@
package org.leocoder.heritage.domain.model.vo.portal;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [新闻详情展示VO]
*/
@Data
public class NewsDetailVo {
/**
* 新闻ID
*/
private Long id;
/**
* 标题
*/
private String title;
/**
* 摘要
*/
private String summary;
/**
* 内容
*/
private String content;
/**
* 封面图
*/
private String coverImage;
/**
* 作者
*/
private String author;
/**
* 来源
*/
private String source;
/**
* 分类newsactivitynotice
*/
private String category;
/**
* 标签逗号分隔
*/
private String tags;
/**
* 浏览量
*/
private Integer viewCount;
/**
* 点赞数
*/
private Integer likeCount;
/**
* 是否置顶0-1-
*/
private Integer isTop;
/**
* 当前用户是否已点赞
*/
private Boolean isLiked = false;
/**
* 当前用户是否已收藏
*/
private Boolean isFavorited = false;
/**
* 发布时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime publishTime;
}

View File

@ -0,0 +1,76 @@
package org.leocoder.heritage.domain.model.vo.portal;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [新闻列表展示VO]
*/
@Data
public class NewsListVo {
/**
* 新闻ID
*/
private Long id;
/**
* 标题
*/
private String title;
/**
* 摘要
*/
private String summary;
/**
* 封面图
*/
private String coverImage;
/**
* 作者
*/
private String author;
/**
* 来源
*/
private String source;
/**
* 分类newsactivitynotice
*/
private String category;
/**
* 标签逗号分隔
*/
private String tags;
/**
* 浏览量
*/
private Integer viewCount;
/**
* 点赞数
*/
private Integer likeCount;
/**
* 是否置顶0-1-
*/
private Integer isTop;
/**
* 发布时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime publishTime;
}

View File

@ -0,0 +1,32 @@
package org.leocoder.heritage.domain.model.vo.portal;
import lombok.Data;
/**
* @author Leocoder
* @description [新闻列表查询VO]
*/
@Data
public class NewsQueryVo {
/**
* 页码
*/
private Integer pageNum = 1;
/**
* 每页数量
*/
private Integer pageSize = 10;
/**
* 分类newsactivitynotice不传则查询所有
*/
private String category;
/**
* 关键词搜索
*/
private String keyword;
}

View File

@ -0,0 +1,19 @@
package org.leocoder.heritage.domain.model.vo.portal;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
/**
* @author Leocoder
* @description [更新头像VO]
*/
@Data
public class UserAvatarUpdateVo {
/**
* 头像URL
*/
@NotBlank(message = "头像URL不能为空")
private String avatar;
}

View File

@ -0,0 +1,33 @@
package org.leocoder.heritage.domain.model.vo.portal;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
/**
* @author Leocoder
* @description [修改密码VO]
*/
@Data
public class UserPasswordUpdateVo {
/**
* 旧密码
*/
@NotBlank(message = "旧密码不能为空")
private String oldPassword;
/**
* 新密码
*/
@NotBlank(message = "新密码不能为空")
@Size(min = 6, max = 20, message = "新密码长度必须在6-20个字符之间")
private String newPassword;
/**
* 确认新密码
*/
@NotBlank(message = "确认密码不能为空")
private String confirmPassword;
}

View File

@ -0,0 +1,55 @@
package org.leocoder.heritage.domain.model.vo.portal;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import java.time.LocalDate;
/**
* @author Leocoder
* @description [修改个人资料VO]
*/
@Data
public class UserProfileUpdateVo {
/**
* 昵称
*/
private String nickname;
/**
* 邮箱
*/
@Email(message = "邮箱格式不正确")
private String email;
/**
* 手机号
*/
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
private String phone;
/**
* 性别0-未知1-2-
*/
private Integer gender;
/**
* 生日
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private LocalDate birthday;
/**
* 省份
*/
private String province;
/**
* 城市
*/
private String city;
}

View File

@ -0,0 +1,73 @@
package org.leocoder.heritage.domain.model.vo.portal;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [用户个人资料展示VO]
*/
@Data
public class UserProfileVo {
/**
* 用户ID
*/
private Long id;
/**
* 用户名
*/
private String username;
/**
* 昵称
*/
private String nickname;
/**
* 头像URL
*/
private String avatar;
/**
* 邮箱
*/
private String email;
/**
* 手机号
*/
private String phone;
/**
* 性别0-未知1-2-
*/
private Integer gender;
/**
* 生日
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private LocalDate birthday;
/**
* 省份
*/
private String province;
/**
* 城市
*/
private String city;
/**
* 注册时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,37 @@
package org.leocoder.heritage.domain.model.vo.portal;
import lombok.Data;
/**
* @author Leocoder
* @description [用户统计信息VO]
*/
@Data
public class UserStatsVo {
/**
* 浏览历史数量
*/
private Long viewHistoryCount = 0L;
/**
* 评论数量
*/
private Long commentCount = 0L;
/**
* 点赞数量
*/
private Long likeCount = 0L;
/**
* 收藏数量
*/
private Long favoriteCount = 0L;
/**
* 活动报名数量
*/
private Long eventRegistrationCount = 0L;
}

View File

@ -0,0 +1,51 @@
package org.leocoder.heritage.domain.model.vo.portal;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [浏览历史项展示VO]
*/
@Data
public class ViewHistoryItemVo {
/**
* 浏览历史ID
*/
private Long id;
/**
* 目标类型heritageinheritornewsevent
*/
private String targetType;
/**
* 目标ID
*/
private Long targetId;
/**
* 目标标题/名称
*/
private String targetTitle;
/**
* 目标封面图/头像
*/
private String targetCover;
/**
* 目标描述/简介
*/
private String targetDescription;
/**
* 浏览时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime viewTime;
}

View File

@ -0,0 +1,27 @@
package org.leocoder.heritage.domain.model.vo.portal;
import lombok.Data;
/**
* @author Leocoder
* @description [浏览历史查询VO]
*/
@Data
public class ViewHistoryQueryVo {
/**
* 页码
*/
private Integer pageNum = 1;
/**
* 每页数量
*/
private Integer pageSize = 10;
/**
* 目标类型heritageinheritornewsevent不传则查询所有
*/
private String targetType;
}

View File

@ -0,0 +1,103 @@
package org.leocoder.heritage.domain.pojo.portal;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [评论实体类]
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("hrt_comment")
public class HrtComment implements Serializable {
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 用户ID
*/
@NotNull(message = "用户ID不能为空")
@TableField("user_id")
private Long userId;
/**
* 目标类型heritageinheritornewsevent
*/
@NotBlank(message = "目标类型不能为空")
@TableField("target_type")
private String targetType;
/**
* 目标ID
*/
@NotNull(message = "目标ID不能为空")
@TableField("target_id")
private Long targetId;
/**
* 评论内容
*/
@NotBlank(message = "评论内容不能为空")
@TableField("content")
private String content;
/**
* 评分1-5星仅针对非遗项目
*/
@TableField("rating")
private Integer rating;
/**
* 父评论ID0表示一级评论
*/
@TableField("parent_id")
private Long parentId;
/**
* 点赞数
*/
@TableField("like_count")
private Integer likeCount;
/**
* 状态0-待审核1-已通过2-已拒绝
*/
@TableField("status")
private Integer status;
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
/**
* 删除标记0-已删除1-未删除
*/
@TableLogic
@TableField("del_flag")
private Integer delFlag;
}

View File

@ -0,0 +1,151 @@
package org.leocoder.heritage.domain.pojo.portal;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [活动实体类]
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("hrt_event")
public class HrtEvent implements Serializable {
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 活动标题
*/
@NotBlank(message = "活动标题不能为空")
@TableField("title")
private String title;
/**
* 活动摘要
*/
@TableField("summary")
private String summary;
/**
* 活动详情
*/
@TableField("content")
private String content;
/**
* 封面图
*/
@TableField("cover_image")
private String coverImage;
/**
* 活动地点
*/
@TableField("location")
private String location;
/**
* 开始时间
*/
@TableField("start_time")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime;
/**
* 结束时间
*/
@TableField("end_time")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime;
/**
* 最大参与人数
*/
@TableField("max_participants")
private Integer maxParticipants;
/**
* 当前参与人数
*/
@TableField("current_participants")
private Integer currentParticipants;
/**
* 报名开始时间
*/
@TableField("registration_start")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime registrationStart;
/**
* 报名结束时间
*/
@TableField("registration_end")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime registrationEnd;
/**
* 状态upcomingongoingfinishedcancelled
*/
@TableField("status")
private String status;
/**
* 浏览量
*/
@TableField("view_count")
private Integer viewCount;
/**
* 发布状态0-草稿1-已发布
*/
@TableField("publish_status")
private Integer publishStatus;
/**
* 创建人
*/
@TableField("create_by")
private String createBy;
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 更新人
*/
@TableField("update_by")
private String updateBy;
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
/**
* 删除标记0-已删除1-未删除
*/
@TableLogic
@TableField("del_flag")
private Integer delFlag;
}

View File

@ -0,0 +1,82 @@
package org.leocoder.heritage.domain.pojo.portal;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [活动报名实体类]
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("hrt_event_registration")
public class HrtEventRegistration implements Serializable {
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 用户ID
*/
@NotNull(message = "用户ID不能为空")
@TableField("user_id")
private Long userId;
/**
* 活动ID
*/
@NotNull(message = "活动ID不能为空")
@TableField("event_id")
private Long eventId;
/**
* 报名状态pending-待审核approved-已通过rejected-已拒绝cancelled-已取消
*/
@TableField("status")
private String status;
/**
* 联系电话
*/
@TableField("phone")
private String phone;
/**
* 备注信息
*/
@TableField("remark")
private String remark;
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
/**
* 删除标记0-已删除1-未删除
*/
@TableLogic
@TableField("del_flag")
private Integer delFlag;
}

View File

@ -0,0 +1,65 @@
package org.leocoder.heritage.domain.pojo.portal;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [收藏实体类]
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("hrt_favorite")
public class HrtFavorite implements Serializable {
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 用户ID
*/
@NotNull(message = "用户ID不能为空")
@TableField("user_id")
private Long userId;
/**
* 目标类型heritageinheritornews
*/
@NotBlank(message = "目标类型不能为空")
@TableField("target_type")
private String targetType;
/**
* 目标ID
*/
@NotNull(message = "目标ID不能为空")
@TableField("target_id")
private Long targetId;
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 删除标记0-已删除1-未删除
*/
@TableLogic
@TableField("del_flag")
private Integer delFlag;
}

View File

@ -0,0 +1,197 @@
package org.leocoder.heritage.domain.pojo.portal;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [非遗项目实体类]
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("hrt_heritage")
public class HrtHeritage implements Serializable {
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 项目名称
*/
@NotBlank(message = "项目名称不能为空")
@TableField("name")
private String name;
/**
* 英文名称
*/
@TableField("name_en")
private String nameEn;
/**
* 分类traditional-crafttraditional-art等
*/
@NotBlank(message = "分类不能为空")
@TableField("category")
private String category;
/**
* 级别worldnationalprovincialmunicipalcounty
*/
@NotBlank(message = "级别不能为空")
@TableField("level")
private String level;
/**
* 省份
*/
@TableField("province")
private String province;
/**
* 城市
*/
@TableField("city")
private String city;
/**
* 项目介绍
*/
@TableField("description")
private String description;
/**
* 历史渊源
*/
@TableField("history")
private String history;
/**
* 技艺特点
*/
@TableField("skills")
private String skills;
/**
* 文化意义
*/
@TableField("significance")
private String significance;
/**
* 封面图
*/
@TableField("cover_image")
private String coverImage;
/**
* 图片集合JSON数组
*/
@TableField("images")
private String images;
/**
* 视频URL
*/
@TableField("video_url")
private String videoUrl;
/**
* 标签逗号分隔
*/
@TableField("tags")
private String tags;
/**
* 状态active-正常传承endangered-濒危
*/
@TableField("status")
private String status;
/**
* 浏览量
*/
@TableField("view_count")
private Integer viewCount;
/**
* 点赞数
*/
@TableField("like_count")
private Integer likeCount;
/**
* 收藏数
*/
@TableField("favorite_count")
private Integer favoriteCount;
/**
* 评论数
*/
@TableField("comment_count")
private Integer commentCount;
/**
* 是否精选0-1-
*/
@TableField("is_featured")
private Integer isFeatured;
/**
* 排序权重
*/
@TableField("sort_order")
private Integer sortOrder;
/**
* 发布状态0-草稿1-已发布
*/
@TableField("publish_status")
private Integer publishStatus;
/**
* 创建人
*/
@TableField("create_by")
private String createBy;
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 更新人
*/
@TableField("update_by")
private String updateBy;
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
/**
* 删除标记0-已删除1-未删除
*/
@TableLogic
@TableField("del_flag")
private Integer delFlag;
}

View File

@ -0,0 +1,189 @@
package org.leocoder.heritage.domain.pojo.portal;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [传承人实体类]
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("hrt_inheritor")
public class HrtInheritor implements Serializable {
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 姓名
*/
@NotBlank(message = "姓名不能为空")
@TableField("name")
private String name;
/**
* 英文名
*/
@TableField("name_en")
private String nameEn;
/**
* 性别1-2-
*/
@TableField("gender")
private Integer gender;
/**
* 出生年份
*/
@TableField("birth_year")
private Integer birthYear;
/**
* 头像
*/
@TableField("avatar")
private String avatar;
/**
* 关联非遗项目ID
*/
@TableField("heritage_id")
private Long heritageId;
/**
* 传承项目名称
*/
@TableField("heritage_name")
private String heritageName;
/**
* 传承人级别nationalprovincial等
*/
@TableField("level")
private String level;
/**
* 省份
*/
@TableField("province")
private String province;
/**
* 城市
*/
@TableField("city")
private String city;
/**
* 个人简介
*/
@TableField("introduction")
private String introduction;
/**
* 传承故事
*/
@TableField("story")
private String story;
/**
* 主要成就
*/
@TableField("achievements")
private String achievements;
/**
* 代表作品JSON数组
*/
@TableField("works")
private String works;
/**
* 图片集合JSON数组
*/
@TableField("images")
private String images;
/**
* 视频URL
*/
@TableField("video_url")
private String videoUrl;
/**
* 浏览量
*/
@TableField("view_count")
private Integer viewCount;
/**
* 点赞数
*/
@TableField("like_count")
private Integer likeCount;
/**
* 是否精选0-1-
*/
@TableField("is_featured")
private Integer isFeatured;
/**
* 排序权重
*/
@TableField("sort_order")
private Integer sortOrder;
/**
* 发布状态0-草稿1-已发布
*/
@TableField("publish_status")
private Integer publishStatus;
/**
* 创建人
*/
@TableField("create_by")
private String createBy;
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 更新人
*/
@TableField("update_by")
private String updateBy;
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
/**
* 删除标记0-已删除1-未删除
*/
@TableLogic
@TableField("del_flag")
private Integer delFlag;
}

View File

@ -0,0 +1,65 @@
package org.leocoder.heritage.domain.pojo.portal;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [点赞实体类]
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("hrt_like")
public class HrtLike implements Serializable {
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 用户ID
*/
@NotNull(message = "用户ID不能为空")
@TableField("user_id")
private Long userId;
/**
* 目标类型heritageinheritornewscomment
*/
@NotBlank(message = "目标类型不能为空")
@TableField("target_type")
private String targetType;
/**
* 目标ID
*/
@NotNull(message = "目标ID不能为空")
@TableField("target_id")
private Long targetId;
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 删除标记0-已删除1-未删除
*/
@TableLogic
@TableField("del_flag")
private Integer delFlag;
}

View File

@ -0,0 +1,142 @@
package org.leocoder.heritage.domain.pojo.portal;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [新闻资讯实体类]
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("hrt_news")
public class HrtNews implements Serializable {
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 标题
*/
@NotBlank(message = "标题不能为空")
@TableField("title")
private String title;
/**
* 摘要
*/
@TableField("summary")
private String summary;
/**
* 内容
*/
@TableField("content")
private String content;
/**
* 封面图
*/
@TableField("cover_image")
private String coverImage;
/**
* 作者
*/
@TableField("author")
private String author;
/**
* 来源
*/
@TableField("source")
private String source;
/**
* 分类newsactivitynotice
*/
@TableField("category")
private String category;
/**
* 标签逗号分隔
*/
@TableField("tags")
private String tags;
/**
* 浏览量
*/
@TableField("view_count")
private Integer viewCount;
/**
* 点赞数
*/
@TableField("like_count")
private Integer likeCount;
/**
* 是否置顶0-1-
*/
@TableField("is_top")
private Integer isTop;
/**
* 发布时间
*/
@TableField("publish_time")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime publishTime;
/**
* 发布状态0-草稿1-已发布
*/
@TableField("publish_status")
private Integer publishStatus;
/**
* 创建人
*/
@TableField("create_by")
private String createBy;
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 更新人
*/
@TableField("update_by")
private String updateBy;
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
/**
* 删除标记0-已删除1-未删除
*/
@TableLogic
@TableField("del_flag")
private Integer delFlag;
}

View File

@ -0,0 +1,143 @@
package org.leocoder.heritage.domain.pojo.portal;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [前台用户实体类]
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("hrt_user")
public class HrtUser implements Serializable {
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 用户名唯一
*/
@NotBlank(message = "用户名不能为空")
@TableField("username")
private String username;
/**
* 密码加密
*/
@NotBlank(message = "密码不能为空")
@TableField("password")
private String password;
/**
* 昵称
*/
@TableField("nickname")
private String nickname;
/**
* 头像URL
*/
@TableField("avatar")
private String avatar;
/**
* 邮箱唯一
*/
@Email(message = "邮箱格式不正确")
@TableField("email")
private String email;
/**
* 手机号唯一
*/
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
@TableField("phone")
private String phone;
/**
* 性别0-未知1-2-
*/
@TableField("gender")
private Integer gender;
/**
* 生日
*/
@TableField("birthday")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private LocalDate birthday;
/**
* 省份
*/
@TableField("province")
private String province;
/**
* 城市
*/
@TableField("city")
private String city;
/**
* 状态0-禁用1-正常
*/
@TableField("status")
private Integer status;
/**
* 最后登录IP
*/
@TableField("login_ip")
private String loginIp;
/**
* 最后登录时间
*/
@TableField("login_time")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime loginTime;
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
/**
* 删除标记0-已删除1-未删除
*/
@TableLogic
@TableField("del_flag")
private Integer delFlag;
/**
* 备注
*/
@TableField("remark")
private String remark;
}

View File

@ -0,0 +1,72 @@
package org.leocoder.heritage.domain.pojo.portal;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author Leocoder
* @description [浏览历史实体类]
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("hrt_view_history")
public class HrtViewHistory implements Serializable {
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 用户ID
*/
@NotNull(message = "用户ID不能为空")
@TableField("user_id")
private Long userId;
/**
* 目标类型heritageinheritornewsevent
*/
@NotBlank(message = "目标类型不能为空")
@TableField("target_type")
private String targetType;
/**
* 目标ID
*/
@NotNull(message = "目标ID不能为空")
@TableField("target_id")
private Long targetId;
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
* 更新时间最后浏览时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
/**
* 删除标记0-已删除1-未删除
*/
@TableLogic
@TableField("del_flag")
private Integer delFlag;
}