diff --git a/.cursorrules b/.cursorrules index 06a625d..e27756b 100644 --- a/.cursorrules +++ b/.cursorrules @@ -59,4 +59,17 @@ ## 10. 版本控制 - 使用Git进行版本控制 - 遵循语义化版本规范 -- 重要配置文件加入版本控制 \ No newline at end of file +- 重要配置文件加入版本控制 + +## 11. 文件操作 +- 当需要复制文件时,使用 `command cp` 命令 +- 如果发现目录不存在,首先确认自己当前目录是否正确 +- 如果需要创建目录,使用 `command mkdir -p` 命令 +- 不要尝试重新安装开发依赖工具,比如jdk, node,python等 + +## 前端开发 +- 前端使用vue3开发 +- 代码必须严格遵守 eslint 规则 +- 前端项目使用yarn打包,用最新的4.x版 +- 前端项目根目录下需要有`.yarn.yml`配置文件 +- 前端启动开发服务器,需要把切换到前端目录以及启动开发服务器两个命令合并执行 \ No newline at end of file diff --git a/backend/pom.xml b/backend/pom.xml index 1405523..5819900 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -83,6 +83,11 @@ jackson-databind ${jackson.version} + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + ${jackson.version} + diff --git a/backend/src/main/java/com/fasterxml/jackson/databind/JsonTypeHandler.java b/backend/src/main/java/com/fasterxml/jackson/databind/JsonTypeHandler.java deleted file mode 100644 index b7ceb08..0000000 --- a/backend/src/main/java/com/fasterxml/jackson/databind/JsonTypeHandler.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.fasterxml.jackson.databind; - -import java.sql.CallableStatement; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import org.apache.ibatis.type.BaseTypeHandler; -import org.apache.ibatis.type.JdbcType; - -/** - * 自定义的 JSON 类型处理器 - */ -public class JsonTypeHandler extends BaseTypeHandler { - private static final ObjectMapper MAPPER = new ObjectMapper(); - - @Override - public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) - throws SQLException { - try { - ps.setString(i, MAPPER.writeValueAsString(parameter)); - } catch (Exception e) { - throw new SQLException("Error converting JSON to String", e); - } - } - - @Override - public Object getNullableResult(ResultSet rs, String columnName) throws SQLException { - return parse(rs.getString(columnName)); - } - - @Override - public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException { - return parse(rs.getString(columnIndex)); - } - - @Override - public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { - return parse(cs.getString(columnIndex)); - } - - private Object parse(String json) throws SQLException { - try { - if (json == null || json.isEmpty()) { - return null; - } - return MAPPER.readValue(json, Object.class); - } catch (Exception e) { - throw new SQLException("Error converting String to JSON", e); - } - } -} \ No newline at end of file diff --git a/backend/src/main/java/ltd/qubit/survey/common/mybatis/InstantTypeHandler.java b/backend/src/main/java/ltd/qubit/survey/common/mybatis/InstantTypeHandler.java new file mode 100644 index 0000000..327f4ea --- /dev/null +++ b/backend/src/main/java/ltd/qubit/survey/common/mybatis/InstantTypeHandler.java @@ -0,0 +1,39 @@ +package ltd.qubit.survey.common.mybatis; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.time.Instant; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; + +/** + * Instant类型处理器 + */ +public class InstantTypeHandler extends BaseTypeHandler { + @Override + public void setNonNullParameter(PreparedStatement ps, int i, Instant parameter, JdbcType jdbcType) + throws SQLException { + ps.setTimestamp(i, Timestamp.from(parameter)); + } + + @Override + public Instant getNullableResult(ResultSet rs, String columnName) throws SQLException { + Timestamp timestamp = rs.getTimestamp(columnName); + return timestamp != null ? timestamp.toInstant() : null; + } + + @Override + public Instant getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + Timestamp timestamp = rs.getTimestamp(columnIndex); + return timestamp != null ? timestamp.toInstant() : null; + } + + @Override + public Instant getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + Timestamp timestamp = cs.getTimestamp(columnIndex); + return timestamp != null ? timestamp.toInstant() : null; + } +} \ No newline at end of file diff --git a/backend/src/main/java/ltd/qubit/survey/model/Option.java b/backend/src/main/java/ltd/qubit/survey/model/Option.java index 40301ee..f704614 100644 --- a/backend/src/main/java/ltd/qubit/survey/model/Option.java +++ b/backend/src/main/java/ltd/qubit/survey/model/Option.java @@ -1,6 +1,6 @@ package ltd.qubit.survey.model; -import java.time.LocalDateTime; +import java.time.Instant; import lombok.Data; /** @@ -36,5 +36,5 @@ public class Option { /** * 创建时间 */ - private LocalDateTime createdAt; + private Instant createdAt; } \ No newline at end of file diff --git a/backend/src/main/java/ltd/qubit/survey/model/Question.java b/backend/src/main/java/ltd/qubit/survey/model/Question.java index 2e06c26..3df9dbd 100644 --- a/backend/src/main/java/ltd/qubit/survey/model/Question.java +++ b/backend/src/main/java/ltd/qubit/survey/model/Question.java @@ -1,6 +1,6 @@ package ltd.qubit.survey.model; -import java.time.LocalDateTime; +import java.time.Instant; import lombok.Data; /** @@ -46,5 +46,5 @@ public class Question { /** * 创建时间 */ - private LocalDateTime createdAt; + private Instant createdAt; } \ No newline at end of file diff --git a/backend/src/main/java/ltd/qubit/survey/model/SurveyResponse.java b/backend/src/main/java/ltd/qubit/survey/model/SurveyResponse.java index e961eea..e360f78 100644 --- a/backend/src/main/java/ltd/qubit/survey/model/SurveyResponse.java +++ b/backend/src/main/java/ltd/qubit/survey/model/SurveyResponse.java @@ -1,6 +1,6 @@ package ltd.qubit.survey.model; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.List; import lombok.Data; @@ -37,5 +37,5 @@ public class SurveyResponse { /** * 创建时间 */ - private LocalDateTime createdAt; + private Instant createdAt; } \ No newline at end of file diff --git a/backend/src/main/java/ltd/qubit/survey/model/User.java b/backend/src/main/java/ltd/qubit/survey/model/User.java index 86c8192..6dca0fa 100644 --- a/backend/src/main/java/ltd/qubit/survey/model/User.java +++ b/backend/src/main/java/ltd/qubit/survey/model/User.java @@ -1,6 +1,6 @@ package ltd.qubit.survey.model; -import java.time.LocalDateTime; +import java.time.Instant; import lombok.Data; /** @@ -36,5 +36,5 @@ public class User { /** * 创建时间 */ - private LocalDateTime createdAt; + private Instant createdAt; } \ No newline at end of file diff --git a/backend/src/main/java/ltd/qubit/survey/service/impl/OptionServiceImpl.java b/backend/src/main/java/ltd/qubit/survey/service/impl/OptionServiceImpl.java index 82680b8..9727847 100644 --- a/backend/src/main/java/ltd/qubit/survey/service/impl/OptionServiceImpl.java +++ b/backend/src/main/java/ltd/qubit/survey/service/impl/OptionServiceImpl.java @@ -1,6 +1,6 @@ package ltd.qubit.survey.service.impl; -import java.time.LocalDateTime; +import java.time.Instant; import java.util.List; import java.util.Optional; import lombok.RequiredArgsConstructor; @@ -19,7 +19,7 @@ public class OptionServiceImpl implements OptionService { @Override public Option create(Option option) { - option.setCreatedAt(LocalDateTime.now()); + option.setCreatedAt(Instant.now()); optionDao.insert(option); return option; } @@ -58,7 +58,7 @@ public class OptionServiceImpl implements OptionService { @Override public List