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
2.1 KiB
58 lines
2.1 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("/homepage")
|
|
async def get_homepage_data():
|
|
# 获取博客数据
|
|
select_blog = """
|
|
SELECT blogs.id, blogs.blogtitle, blogs.blogcontent, blogs.create_at, blogs.imglink,
|
|
blogs.wordcount, blogtypes.typename, JSON_ARRAYAGG(labels.labelname) AS labelnames
|
|
FROM blogs
|
|
LEFT JOIN `blogtypes` ON blogs.typeid = blogtypes.id
|
|
LEFT JOIN blog_label ON blog_label.blogid = blogs.id
|
|
LEFT JOIN labels ON blog_label.labelid = labels.id
|
|
GROUP BY blogs.id, blogs.blogtitle, blogs.blogcontent, blogs.create_at, blogs.imglink,
|
|
blogs.wordcount, blogtypes.typename
|
|
ORDER BY create_at DESC
|
|
"""
|
|
blog_list = fetch_all(select_blog)
|
|
|
|
# 获取日记数据
|
|
select_diary = """
|
|
SELECT diarys.id, diarys.diarytitle, diarys.diarycontent, diarys.imglink,
|
|
diarytypes.typename, diarys.create_at, diarys.update_at
|
|
FROM diarys
|
|
LEFT JOIN diarytypes ON diarys.typeid = diarytypes.id
|
|
ORDER BY create_at DESC
|
|
"""
|
|
diary_list = fetch_all(select_diary)
|
|
|
|
# 合并博客和日记数据,按照创建日期降序排序
|
|
combined_data = sorted(blog_list + diary_list, key=lambda x: x['create_at'], reverse=True)
|
|
|
|
return {"data": combined_data}
|