Изначально это было тестовое задание на вакансию "бекенд разработчик", но я его оставил как паттерн части проекта - пагинация данных.
Приложение в котором есть:
- Модель ОРМ определена - app.models.models
- Функции / интерфейс в модуле - app.dbapi.crud .
- Эндпоинт определен. Определил дополнительные эндпоинты - app.main
- List Posts
- Get Post Stats
- Get All Posts
- На борту есть Swagger / Redoc
- Можно воспользоваться скриптом populate_recs.py который наполнит базу данных рандомными строковыми данными.
Tip
Если нужны данные в базе данных то лучше перед запуском проекта выполниь скрипт который наполнит БД моковыми данными
python populate_recs.py
-
Клонируем себе
git clone https://github.com/ivanIStereotekk/exp-garant.git -
Устанавливаем зависимости
pip install -r requirements.txt -
Переходим в папку с проектом
cd ./app -
Запускаем проект
uvicorn main:app --reload -
В браузере открываем Swagger
http://127.0.0.1:8000/docsили Redochttp://127.0.0.1:8000/redoc
Warning
Некоторые части кода, функции и тесты написаны для mocking и актуальны для текущих данных в БД или в качестве демонстрации. Не для продакшн проектов.
Допустим что есть у нас таблица posts с полями:
- id — уникальный идентификатор
- category — категория (строка)
- content — текст
И нам нужно:
- Определить модель SQLAlchemy для таблицы (можно с доп. сущностями).
- Реализовать асинхронную функцию, которая: Фильтрует по: категории, ключевым словам в content (LIKE/ILIKE; полнотекстовый поиск — бонус). Поддерживает пагинацию (limit, offset). Выполняет обработку записей «на лету»: Например, подсчёт частоты слов, извлечение тегов и т.д. Данные могут быть объёмные — важно не загружать всё сразу, использовать построчную/пакетную обработку. (Опционально) сохраняет результат обработки в БД или возвращает его в ответе.
- (По желанию) реализовать endpoint (например, в FastAPI), принимающий параметры фильтрации и пагинации и возвращающий результат.
SQLAlchemy: корректная модель, асинхронный доступ. Фильтрация: по категории и ключевым словам, поддержка расширенных методов — плюс. Пагинация: обязательно; вместе с метаданными (общее число записей). Оптимизация: построчная или батчевая обработка, без загрузки всей таблицы в память Обработка: осмысленная логика (например, анализ текста), а не просто чтение. Код: читаемость, структура, PEP8. Приветствуются базовые тесты и модульность.
