从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查询

相关推荐
Java后端的Ai之路1 小时前
大模型数据飞轮核心技术一篇讲透:原理、架构、企业级案例与2026最全实践指南
人工智能·python·架构·数据飞轮
SamDeepThinking2 小时前
程序员如何接受工作内容毫无意义?
java·后端·程序员
测试员周周2 小时前
【AI测试功能3】AI功能测试的三层架构:单元测试 → 集成测试 → E2E测试——AI系统测试金字塔实战指南
开发语言·人工智能·python·功能测试·架构·单元测试·集成测试
_Evan_Yao2 小时前
一文搞懂:AI编程辅助工具——从GitHub Copilot到通义灵码,不同人群如何驾驭AI编程助手?
人工智能·后端·copilot·ai编程
木雷坞2 小时前
边缘视频分析节点断网恢复排查记录
后端
牛蛙点点申请出战2 小时前
IconFontViewer -- 一个可以在 Android Studio 中实时预览 IconFont 的插件
android·前端·intellij idea
2301_771717212 小时前
最近在刷牛客:使用Spring AOP实现性能监控时
java·后端·spring
Java水解2 小时前
深入浅出多包架构(Monorepo)
后端