Добавление эндпоинта общей статистики

This commit is contained in:
2025-12-20 01:00:46 +03:00
parent e7f2987eea
commit 64a46645c5
2 changed files with 26 additions and 3 deletions
+2
View File
@@ -142,3 +142,5 @@ erDiagram
- **PostgreSQL**: Сильная, открытая реляционная система управления базами данных. - **PostgreSQL**: Сильная, открытая реляционная система управления базами данных.
- **Docker**: Платформа для разработки, распространения и запуска приложений в контейнерах. - **Docker**: Платформа для разработки, распространения и запуска приложений в контейнерах.
- **Docker Compose**: Инструмент для определения и запуска многоконтейнерных приложений Docker. - **Docker Compose**: Инструмент для определения и запуска многоконтейнерных приложений Docker.
- **Tailwind**: CSS-фреймворк, позволяющий стилизовать веб-интерфейсы, применяя готовые низкоуровневые классы.
- **Cash**: Микро JavaScript-библиотека, созданная как очень быстрая и компактная альтернатива jQuery.
+23 -2
View File
@@ -7,8 +7,10 @@ from fastapi import APIRouter, Request
from fastapi.params import Depends from fastapi.params import Depends
from fastapi.responses import FileResponse, JSONResponse, RedirectResponse from fastapi.responses import FileResponse, JSONResponse, RedirectResponse
from fastapi.templating import Jinja2Templates from fastapi.templating import Jinja2Templates
from sqlmodel import Session, select, func
from library_service.settings import get_app from library_service.settings import get_app, get_session
from library_service.models.db import Author, Book, Genre, User
router = APIRouter(tags=["misc"]) router = APIRouter(tags=["misc"])
@@ -70,8 +72,27 @@ async def favicon():
@router.get( @router.get(
"/api/info", "/api/info",
summary="Информация о сервисе", summary="Информация о сервисе",
description="Возвращает информацию о системе", description="Возвращает общую информацию о системе",
) )
async def api_info(app=Depends(lambda: get_app())): async def api_info(app=Depends(lambda: get_app())):
"""Эндпоинт информации об API""" """Эндпоинт информации об API"""
return JSONResponse(content=get_info(app)) return JSONResponse(content=get_info(app))
@router.get(
"/api/stats",
summary="Статистика сервиса",
description="Возвращает статистическую информацию о системе",
)
async def api_stats(session: Session = Depends(get_session)):
"""Эндпоинт стстистика системы"""
authors = select(func.count()).select_from(Author)
books = select(func.count()).select_from(Book)
genres = select(func.count()).select_from(Genre)
users = select(func.count()).select_from(User)
return JSONResponse(content={
"authors": session.exec(authors).one(),
"books": session.exec(books).one(),
"genres": session.exec(genres).one(),
"users": session.exec(users).one(),
})