You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.9 KiB
58 lines
1.9 KiB
from fastapi import Depends, APIRouter, status, Query, Path, HTTPException
|
|
from internal.models import *
|
|
from internal.database import fetch_one, fetch_all, execute_query, response_success, raise_if_exists, raise_if_not_found
|
|
from dependencies import get_current_active_user
|
|
from collections import defaultdict
|
|
|
|
router = APIRouter(
|
|
prefix="/statistics",
|
|
tags=['统计']
|
|
)
|
|
# 统计编辑量
|
|
|
|
|
|
@router.get("/list")
|
|
async def statistic_list():
|
|
select_query = """SELECT DATE(create_at) AS date,COUNT(*) AS writCount FROM
|
|
(SELECT create_at FROM diarys
|
|
UNION ALL
|
|
SELECT create_at FROM blogs) AS combined
|
|
GROUP BY DATE
|
|
ORDER BY DATE DESC;"""
|
|
statistic_list = fetch_all(select_query)
|
|
return response_success(statistic_list, "statistic get list success")
|
|
|
|
# 记录所有blog和diary数据
|
|
|
|
|
|
@router.get("/comments")
|
|
async def get_homepage_data():
|
|
select_blog = """
|
|
select id,blogtitle,blogcontent,imglink,create_at,update_at from blogs ORDER BY create_at DESC;
|
|
"""
|
|
blog_list = fetch_all(select_blog)
|
|
|
|
# 获取日记数据
|
|
select_diary = """
|
|
select id,diarytitle,diarycontent,imglink,create_at,update_at from diarys ORDER BY create_at DESC;
|
|
"""
|
|
diary_list = fetch_all(select_diary)
|
|
|
|
# 按日期分组数据
|
|
grouped_data = defaultdict(lambda: {'blogs': [], 'diaries': []})
|
|
|
|
for blog in blog_list:
|
|
date_key = blog['create_at'].date()
|
|
grouped_data[date_key]['blogs'].append(blog)
|
|
|
|
for diary in diary_list:
|
|
date_key = diary['create_at'].date()
|
|
grouped_data[date_key]['diaries'].append(diary)
|
|
|
|
# 将分组后的数据转换为列表并按日期排序
|
|
result = [
|
|
{'date': date, 'blogs': data['blogs'], 'diaries': data['diaries']}
|
|
for date, data in sorted(grouped_data.items(), key=lambda x: x[0], reverse=True)
|
|
]
|
|
|
|
return {"data": result}
|