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

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
+3 -1
View File
@@ -103,7 +103,7 @@ erDiagram
int id PK "ID автора"
string name "Имя автора"
}
BOOK {
int id PK "ID книги"
string title "Название книги"
@@ -142,3 +142,5 @@ erDiagram
- **PostgreSQL**: Сильная, открытая реляционная система управления базами данных.
- **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.responses import FileResponse, JSONResponse, RedirectResponse
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"])
@@ -70,8 +72,27 @@ async def favicon():
@router.get(
"/api/info",
summary="Информация о сервисе",
description="Возвращает информацию о системе",
description="Возвращает общую информацию о системе",
)
async def api_info(app=Depends(lambda: get_app())):
"""Эндпоинт информации об API"""
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(),
})