feat: 完善后端架构和service层实现

- 创建完整的entity实体类体系,包括所有业务实体
- 实现BaseEntity基类,统一管理公共字段
- 创建雪花算法ID生成器和自动填充处理器
- 简化所有mapper接口,只继承BaseMapper
- 重构service层,使用LambdaQueryWrapper进行数据库操作
- 创建BasePageRequest分页查询基类
- 完善用户上下文管理和JWT认证
- 新增WebSocket聊天功能和相关控制器
- 更新前端配置和组件,完善用户认证流程
- 同步数据库建表脚本
This commit is contained in:
2025-07-24 00:37:23 +08:00
parent 645036fcd2
commit 880e0e3c88
87 changed files with 8114 additions and 1106 deletions
@@ -0,0 +1,97 @@
package com.emotion.dto.websocket;
import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* WebSocket聊天请求对象
*
* @author emotion-museum
* @date 2025-07-23
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ChatRequest {
/**
* 消息内容
*/
@NotBlank(message = "消息内容不能为空")
private String content;
/**
* 发送者ID
*/
@NotBlank(message = "发送者ID不能为空")
private String senderId;
/**
* 发送者类型
*/
@NotNull(message = "发送者类型不能为空")
private SenderType senderType;
/**
* 消息类型
*/
@NotNull(message = "消息类型不能为空")
private MessageType messageType;
/**
* 会话ID(可选)
*/
private String conversationId;
/**
* 发送时间戳
*/
private Long timestamp;
/**
* 发送者类型枚举
*/
public enum SenderType {
USER("用户"),
GUEST("访客"),
AI("AI助手"),
SYSTEM("系统");
private final String description;
SenderType(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
/**
* 消息类型枚举
*/
public enum MessageType {
TEXT("文本消息"),
IMAGE("图片消息"),
FILE("文件消息"),
SYSTEM("系统消息"),
HEARTBEAT("心跳消息");
private final String description;
MessageType(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
}
@@ -0,0 +1,46 @@
package com.emotion.dto.websocket;
import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import javax.validation.constraints.NotBlank;
/**
* WebSocket连接请求对象
*
* @author emotion-museum
* @date 2025-07-23
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ConnectRequest {
/**
* 用户ID
*/
private String userId;
/**
* 用户名
*/
private String username;
/**
* 客户端类型
*/
private String clientType;
/**
* 客户端版本
*/
private String clientVersion;
/**
* 连接时间戳
*/
private Long timestamp;
}
@@ -0,0 +1,130 @@
package com.emotion.dto.websocket;
import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import java.time.LocalDateTime;
/**
* WebSocket消息对象
*
* @author emotion-museum
* @date 2025-07-23
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WebSocketMessage {
/**
* 消息ID
*/
private String messageId;
/**
* 会话ID
*/
private String conversationId;
/**
* 消息类型
*/
private MessageType type;
/**
* 消息内容
*/
private String content;
/**
* 发送者ID
*/
private String senderId;
/**
* 发送者类型
*/
private SenderType senderType;
/**
* 消息状态
*/
private MessageStatus status;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 扩展数据
*/
private Object data;
/**
* 消息类型枚举
*/
public enum MessageType {
TEXT("文本消息"),
TYPING("正在输入"),
SYSTEM("系统消息"),
ERROR("错误消息"),
HEARTBEAT("心跳消息"),
CONNECTION("连接消息"),
AI_THINKING("AI思考中");
private final String description;
MessageType(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
/**
* 发送者类型枚举
*/
public enum SenderType {
USER("用户"),
GUEST("访客"),
AI("AI助手"),
SYSTEM("系统");
private final String description;
SenderType(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
/**
* 消息状态枚举
*/
public enum MessageStatus {
SENDING("发送中"),
SENT("已发送"),
DELIVERED("已送达"),
READ("已读"),
FAILED("发送失败");
private final String description;
MessageStatus(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
}