Skip to content

ivan-telepop/pagination-fastapi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Test Task

Изначально это было тестовое задание на вакансию "бекенд разработчик", но я его оставил как паттерн части проекта - пагинация данных.


Приложение в котором есть:

  • Модель ОРМ определена - 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

Запуск на python3.12.9:

  • Клонируем себе 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 или Redoc http://127.0.0.1:8000/redoc


Warning

Некоторые части кода, функции и тесты написаны для mocking и актуальны для текущих данных в БД или в качестве демонстрации. Не для продакшн проектов.


Превью

Требовалось создать:

Допустим что есть у нас таблица posts с полями:

  • id — уникальный идентификатор
  • category — категория (строка)
  • content — текст

И нам нужно:

  1. Определить модель SQLAlchemy для таблицы (можно с доп. сущностями).
  2. Реализовать асинхронную функцию, которая: Фильтрует по: категории, ключевым словам в content (LIKE/ILIKE; полнотекстовый поиск — бонус). Поддерживает пагинацию (limit, offset). Выполняет обработку записей «на лету»: Например, подсчёт частоты слов, извлечение тегов и т.д. Данные могут быть объёмные — важно не загружать всё сразу, использовать построчную/пакетную обработку. (Опционально) сохраняет результат обработки в БД или возвращает его в ответе.
  3. (По желанию) реализовать endpoint (например, в FastAPI), принимающий параметры фильтрации и пагинации и возвращающий результат.

Ключевые критерии оценки:

SQLAlchemy: корректная модель, асинхронный доступ. Фильтрация: по категории и ключевым словам, поддержка расширенных методов — плюс. Пагинация: обязательно; вместе с метаданными (общее число записей). Оптимизация: построчная или батчевая обработка, без загрузки всей таблицы в память Обработка: осмысленная логика (например, анализ текста), а не просто чтение. Код: читаемость, структура, PEP8. Приветствуются базовые тесты и модульность.


About

test-task

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages