A4 - 异步计算今日是否完成新学计划,复习计划

A4 - 异步计算今日是否完成新学计划,复习计划

黄鹏宇 348 2023-03-04

一、最终目标

[
  {
   date:"20230304",
   userID:"",
   bookCode:"" // 当前学习的词书code
   needReviewCount:9,// 今日须复习的卡片数,
   reviewCount:1, //已复习的卡片数,
   practiceTodayCardCount:10,  //完成新学的卡片数,
   hasFinishReviewPlan:true,   //是否完成复习计划,
   hasFinishLearningPlan:true,  //是否完成新学计划
  }
]

二、这几个数的来源与变更

1. 创建

在拉取homeData时,判断今日是否存在,如不存在,则创建

{
   date:"20230304",
   userID:"xxx",
   bookCode:"xxx" 
   needReviewCount:9,
   reviewCount:0,
   practiceTodayCardCount:0, 
   hasFinishReviewPlan:true, // 这里判断needReviewCount==0
   hasFinishLearningPlan:false,  
}

2. 变更

在practice以后,进行变更。

须计算出,本次新学的卡片数、完成复习的卡片数、状态

  1. 今日完成的新学卡片数
    1. practice_card_record表,获取今日的练习记录[practiceCardIDList]
    2. 本次完成的新学卡片数:获取这些Card中,练习次数==1,且bookCode == currentCode的数量,
    3. 用本次完成数,加上数据库中的practiceTodayCardCount,得到今日的完成的新学卡片数
  2. 完成复习的卡片数
    完成复习的卡片数 = 今日初始的needReviewCount - 当前剩余的须复习的卡片数
  3. 状态
    1. hasFinishLearningPlan:practiceTodayCardCount >= planCount
    2. hasFinishReviewPlan:needReviewCount==0

三、能否计算出历史的数据?

1. 已有数据

  1. 每次的练习记录
  2. 卡片的创建记录

2. 创建

根据practice_card_record表,去重date的cardID,即一张卡片单日练习多次,也只算一次。
粗糙的:
如果practice_date == card.createDate,则新学数++
否则,复习数++