个人项目记录5 - 11/20所完成内容

102 阅读4分钟

时间统计模块

后端

  • 1.修正list参数all 出现null的问题 原因:(1) 新增用户时未设置show short entries(是否显示时常不足1分钟的时间条目)这一项的默认值;(2)loginUserResp这个dto中也未设置这个属性;

  • 2.解决 查出某个分类已统计的时间总和的问题

  • 问题: 这里我需要用jpa查询部分字段,于是我在jpa中写了如下内容

@Modifying
@Query(value ="select  category_id, duration from time_entry  where user_id= :userId ", nativeQuery = true)
List<TimeEntry> findCatAndDurByUserId(String userId);
复制代码

事实证明,这样是不行的,即使写了select category_id, duration,jpa还是会尝试为entity获取所有的列数据,所以它不会不断报错Column 'cxxx' not found.

解决: 参考这里解决问题

我使用了最高赞的方法。 (1)在timeentry的entity类中增加一个接口。

public interface ProjectCategoryIdAndDuration{
   String getCategoryId();
   Long getDuration();
}

(2)在接口中把返回类型改为这个接口类型

@Modifying
@Query(value ="select id, category_id, duration from time_entry  where user_id= :userId ", nativeQuery = true)
List<TimeEntry.ProjectCategoryIdAndDuration> findCatAndDurByUserId(String userId);
  • 3. 分类获取改为按创建时间升序排序
  • 4. 解决获取duration时category id为null的问题
  • 问题分析 发现还是2中获取部分字段有问题
List<TimeEntry.ProjectCategoryIdAndDuration> entries = repository.findCatAndDurByUserId(userId);
for (TimeEntry.ProjectCategoryIdAndDuration entry : entries) {
    System.out.println(entry.getCategoryId()); //null
    System.out.println(entry.getDuration());
}

这里我确保数据库数据是不为空的,奇怪的是,属性只有一个单词的话,都是能正常读取的,例如start属性。

最后改成了这样倒是能正常获取,虽然绝对不是一个好的解决方法...但先不在这个问题上耗时间了

@Modifying
@Query(value ="select t from TimeEntry t where t.userId = :userId ")
List<TimeEntry.ProjectCategoryIdAndDuration> findCatAndDurByUserId(String userId);
  • 5. 解决删除分类报错No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call

解决:加上@Transactional即可

前端

  • 1. 修正计算duration的代码。
  • 2. 统一删除分类方面前后端api并测试删除
  • 3. 测试编辑分类
  • 4. 删除后原分类项目的处理 整理思路是每次获取数据后,都要和cat比对,如果项目的cat id不存在,那么就把它变为“默认分类” (1)分类的duration被加到默认分类上 (2)时间条目显示默认分类

用户模块

前端

  • 1. 修正修改goal的自定义文本框获取modalvalue为null的问题, 这部分主要参考了vue的官方文档这里
  • 2. 修正goal自定义文本框无法focus的问题
      this.$nextTick(() => {
        this.$refs.goalInput.$refs.textarea.focus()  // textarea是自定义多行文本框中的ref,而goalInput是父组件中的ref
      })
    
  • 3. 加上提交后不能为空的校验
  • 4. 找回密码
    • 4.1找回密码页面改为用手机号找回,页面改善
    • 4.2 相关校验和方法写完
    • 4.3测试相关功能

后端

  • 1. 用户注册时设置默认goal
  • 2. 更新goal的api
  • 3. 更新用户其他资料(头像外)
    • 3.1 将邮箱改为手机号,并将手机号改为不可修改
    • 3.2 修正更改是否显示短条目的问题(传递的数据始终是true,最终发现原因是一处拼写错误...)
    • 3.3 增加修改密码的api调用和重新登录跳转
    • 3.4 修正方法中一些冗余的部分,去掉删除账号功能
  • 4.找回密码功能
    • 4.1 找回密码相关api写完
    • 4.2 短信验证码获取增加按时间倒序排序
    • 4.3 问题:短信验证码设置的是5分钟有效,用户在1分钟后可以重新获取,此时如果最新的验证码已使用,前面5分钟内未使用的验证码还可以继续使用。应该考虑每次发送验证码后,把前面的验证码都变成已使用状态。我想的方法是每次新增后,把5分钟的前面一条设置为已使用。

待办模块

后端

  1. 获取某月还有未完成待办的日期

思路:设置一个todo_memo表,里面存储每天todo是否全部都做完(allDone字段)。每次添加一个todo时,把对应memo表当天更新为allDone为false,每次标记一个todo为完成时,用jpa的exists查询当天是否还有未完成的待办,没有的话,把allDone设置为true。

子步骤:

    • 1.1 memo表和实体类,repository, service, controller
    • 1.2 增添todo时更新或新增memo条目,并且设置allDone为false。
    • 1.4 删除todo时查找memo表;
    • 1.5 更新todo完成状态时查找memo表;

前端

  1. 获取某月还有未完成待办的日期页面显示

加入拖动滑块验证的功能????