从0解构tinyWeb项目--(Day:10)

今日任务

中间五一节玩了几天,隔了很久才完成

今日内容

CreateFocusSession(创造专注记录)

写法模式和以前很像没什么多说的

专注时间设置最少1分钟最长4个小时

GetTodayFocus(获取今天的专注记录)

tagsummary对应这个表

stduysession是这个表

那么这个函数中,用s变量range每一条专注记录,把所有专注记录的时长s.duration累加到totalseconds

前面的tagmap是一个以tag名为下标,然后tag对应的tagsummary汇总表为值的哈希表

那么再把每个已有s的tag名的汇总表赋值给ts,如果tag名找得到就赋值ts不然就else新创建表

这个依然是同一个tag名的专注时间累加到ts.seconds,else新创建表同样的逻辑

最后bytag表计算percentage

时长大于0就可以计算占比,形成多个tagsummay列表

最终组装成bytag表在response中上传

GetFocusSummary(获取指定多少天的专注总览)

这里前面的历史总计没有时间限制,默认的查询所有记录,

后面的sql查询条件就较多了 这个select是需要查询的列有哪些,这里有day,totalseconds,sessioncount

相当于把上面这个三个列的头确定了

然后where就是限制条件查哪里的这里明确了查对应的用户id,然后AND date >= DATE_SUB(CURDATE(), INTERVAL ? DAY),这里"CURDATE()"代表今天的日期,"?"是占位符后面days会赋值,"interval ?day"相当于经过多少天的意思,

"DATE_SUB(CURDATE(), INTERVAL ? DAY)"意思就是今天之前"?"那天的日期(如果"?"的值为30,就是从今天往前数三十天那一天的时期),这里的意思就是查询的日期要大于那一天,

最终的意思就是查询前30天的记录 然后group("date")这里是以日期分组 DESC代表降序(从大到小)

Rows是gorm的方法,启动查询

单日的统计表

后续defer rows.Close代表当程序执行完后最后再关闭,延迟关闭。其实就是关闭数据库连接池中的一个链接,归还一个链接。

这里scan三个变量填入的是上面对应的select的三个数据,然后这里scan是在循环内的,说明每一行都需要填入。 rows.next相当循环变量,一旦下一行没有数据才终止,

然后这里再格式化处理一下数据,然后把每一行数据逐一装入定义好的dailystatitem表

最后再响应json数据

GetFocusHistory(获取以前具体某一天的专注记录详情)

这个也是都是常见的写法

先通过find自动把数据库对应数据映射到这个session表,然后后续通过循环sessions补充details表 最后响应返回details表

CreateTag(创造标签)

当err信息中有"Duplicate"或者"unique"时,表示重复或者不是唯一的意思,就是指tag名重复

GetTags(获取标签)

今日练习

模拟标签占比

SQL查询

相关推荐
王文?问3 分钟前
ESP32-S3 实战教程:本地语音识别控制 Web 塔防游戏,从固件到前端完整跑通
前端·游戏·语音识别
小张小张爱学习11 分钟前
Spring Boot 多线程并发入门教程:ThreadPoolTaskExecutor + CompletableFuture
java·spring boot·后端
ST——Jess11 分钟前
2026年度传统文化数字化与命理科技(Ethno-tech)行业趋势研究报告:专业级数智工作台的技术壁垒与评测标准
人工智能·科技·算法·架构
西安邮电大学14 分钟前
Redis核心数据结构以及应用场景
java·redis·后端·其他·面试
Hoshizola17 分钟前
uniapp与蓝牙设备连接详细步骤
前端·uni-app
小马爱打代码20 分钟前
TiDB 架构解析
架构
优雅格子衫22 分钟前
uniapp 拍照相册选取后超级好用的裁剪组件,增加水印完全自定义
开发语言·前端·javascript·uni-app·vue
Dxy123931021627 分钟前
HTML如何写鼠标事件
前端·html·计算机外设
AskHarries32 分钟前
做 SaaS 还是做 App
后端
AI砖家39 分钟前
前端 JavaScript 异步处理全方案详解:从回调到 Observable
开发语言·前端·javascript