From 64a46645c59c595b614e741908c52f68d4644460 Mon Sep 17 00:00:00 2001 From: wowlikon Date: Sat, 20 Dec 2025 01:00:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=8D=D0=BD=D0=B4=D0=BF=D0=BE=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=20=D0=BE=D0=B1=D1=89=D0=B5=D0=B9=20=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D1=82=D0=B8=D1=81=D1=82=D0=B8=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++- library_service/routers/misc.py | 25 +++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 847f633..88a7d65 100644 --- a/README.md +++ b/README.md @@ -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. diff --git a/library_service/routers/misc.py b/library_service/routers/misc.py index b1b96fc..0362408 100644 --- a/library_service/routers/misc.py +++ b/library_service/routers/misc.py @@ -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(), + })