11from sqlalchemy .ext .asyncio import AsyncSession
22from sqlalchemy .future import select
3- from sqlalchemy import func
3+ from sqlalchemy import func , cast , Date
4+ from datetime import datetime , timedelta
45from app .models .model import Note
56from app .schemas .note import NoteCreate , NoteUpdate , NoteFind , NoteResponse
67
@@ -73,3 +74,34 @@ async def find_notes_title_in_db(note_find: NoteFind, db: AsyncSession):
7374 result = await db .execute (stmt )
7475 notes = [row [0 ] for row in result .fetchall ()]
7576 return notes , total_count
77+
78+ async def find_recent_notes_in_db (db : AsyncSession ):
79+ """
80+ 返回近7天内创建的笔记的数目和对应日期
81+ """
82+ # 获取当前日期和7天前的日期
83+ today = datetime .now ().date ()
84+ seven_days_ago = today - timedelta (days = 6 )
85+
86+ # 查询近7天内的笔记数目,按日期分组
87+ stmt = (
88+ select (
89+ cast (Note .create_time , Date ).label ("date" ), # 按日期分组
90+ func .count (Note .id ).label ("count" ) # 统计每日期的笔记数
91+ )
92+ .where (
93+ Note .create_time >= seven_days_ago , # 筛选近7天的笔记
94+ Note .create_time <= today # 包括今天
95+ )
96+ .group_by (cast (Note .create_time , Date )) # 按日期分组
97+ .order_by (cast (Note .create_time , Date )) # 按日期排序
98+ )
99+
100+ # 执行查询
101+ result = await db .execute (stmt )
102+ data = result .fetchall ()
103+
104+ # 格式化结果为字典列表
105+ recent_notes = [{"date" : row .date , "count" : row .count } for row in data ]
106+
107+ return recent_notes
0 commit comments