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

8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
  1. from fastapi import Depends, APIRouter, status, Query, Path, HTTPException
  2. from internal.models import *
  3. from internal.database import fetch_one, fetch_all, execute_query, response_success, raise_if_exists, raise_if_not_found
  4. from dependencies import get_current_active_user
  5. from collections import defaultdict
  6. router = APIRouter(
  7. prefix="/statistics",
  8. tags=['统计']
  9. )
  10. # 统计编辑量
  11. @router.get("/list")
  12. async def statistic_list():
  13. select_query = """SELECT DATE(create_at) AS date,COUNT(*) AS writCount FROM
  14. (SELECT create_at FROM diarys
  15. UNION ALL
  16. SELECT create_at FROM blogs) AS combined
  17. GROUP BY DATE
  18. ORDER BY DATE DESC;"""
  19. statistic_list = fetch_all(select_query)
  20. return response_success(statistic_list, "statistic get list success")
  21. # 记录所有blog和diary数据
  22. @router.get("/comments")
  23. async def get_homepage_data():
  24. select_blog = """
  25. select id,blogtitle,blogcontent,imglink,create_at,update_at from blogs ORDER BY create_at DESC;
  26. """
  27. blog_list = fetch_all(select_blog)
  28. # 获取日记数据
  29. select_diary = """
  30. select id,diarytitle,diarycontent,imglink,create_at,update_at from diarys ORDER BY create_at DESC;
  31. """
  32. diary_list = fetch_all(select_diary)
  33. # 按日期分组数据
  34. grouped_data = defaultdict(lambda: {'blogs': [], 'diaries': []})
  35. for blog in blog_list:
  36. date_key = blog['create_at'].date()
  37. grouped_data[date_key]['blogs'].append(blog)
  38. for diary in diary_list:
  39. date_key = diary['create_at'].date()
  40. grouped_data[date_key]['diaries'].append(diary)
  41. # 将分组后的数据转换为列表并按日期排序
  42. result = [
  43. {'date': date, 'blogs': data['blogs'], 'diaries': data['diaries']}
  44. for date, data in sorted(grouped_data.items(), key=lambda x: x[0], reverse=True)
  45. ]
  46. return {"data": result}