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

相关推荐
唐青枫5 分钟前
别只把大括号当作用域:Zig Block、标签块与控制流实战
后端
日光倾13 分钟前
TypeScript 随手记 —— 1
前端·javascript·typescript
自学it的攻城狮25 分钟前
elpis-core ,koa实现的系统底座, 沉淀80% 的通用能力,剩下20% 用于定制化开发
前端
CappuccinoRose1 小时前
模块化体系
前端·import·export·es modules
AIDANHANG1 小时前
放开靠时间戳对日志前先核请求ID跨服务传播与采样关联
前端·人工智能
TunerT_TQ2 小时前
Microsoft |Playwright CLI 源码静态审阅:从 5 个文件看浏览器自动化工具的工程边界
后端·开源·github
两万五千个小时2 小时前
DeepSeek Harness 从 0 开始:15 schedule 域(定时任务)
人工智能·程序员·架构
JavaGuide2 小时前
84.5K+ Star!这个开源编程 Agent 控制台,能统一管理 Codex、Claude Code,DeepSeek Harness 也能接入
后端·github
swipe3 小时前
RabbitMQ 实战:AI Agent 里异步处理的标配方案(手把手 + 4 种交换机全解析)
后端·面试·langchain