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

相关推荐
问商十三载22 分钟前
RAG的适用边界在哪里?2026年价值与局限详解
大数据·前端·人工智能
zzzll111130 分钟前
SpringBoot 入门与实践指南
java·spring boot·后端
誰能久伴不乏35 分钟前
深入解析 C++ STL 底层原理:从设计哲学到内存收割机
c++·架构·stl
newerp1 小时前
Go :结构体嵌入、sort.Interface 与 io.Reader/Writer
后端
爱勇宝1 小时前
人生没有最好的年龄,只有最好的状态
前端
SamDeepThinking1 小时前
如何维持缓存的一致性?
后端·面试·程序员
泡海椒1 小时前
还在手动把 Postman 和浏览器的 curl 转成 Java 代码?这个框架让你一键粘贴直接用
后端
幼儿园技术家1 小时前
前端 Node 全家桶
前端·js or ts
用户8181870627461 小时前
第13章 死锁诊断实战
后端
无人生还1 小时前
从 Vue3 到 React · 快速上手系列第 9 篇:自定义 Hook(对标 Composables)
前端·vue.js·react.js