Skip to content
 
 

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 

Repository files navigation

InDreams FastAPI

Описание

В данной контрольной точке вам предстоит разработать API сервиса обмена снами. Вдохновением выступил известный в нулевые года "цитатник рунета". Там не было возможности оставлять комментарии, можно было лишь менять рейтинг, то есть функционал достаточно простой, подходящий для обучения. Здесь вас ждет примерно то же, только вместо рейтинга будут лайки, а вместо цитат - сны пользователей.

В этой контрольной точке есть два уровня сложности: базовый (до 17 баллов) и сложный (до 25 баллов). Из базового уровня исключены отношения многие-ко-многим, функционал лайков и биографии пользователя. Выбирая сложный уровень, будьте готовы, что за простые задания вы получите чуть меньше баллов, а добирать их придётся изучая документацию, блоги, ютюб и гитхаб.

Если вы выбрали базовый уровень, переключитесь на ветку basic, создайте от нее свою ветку с фамилией и работайте в ней. Аналогично для ветки full.

git switch <basic/full-выбери-меня>
git switch -c <фамилия-измени-меня>

Критерии оценивания базового уровня

Задание Критерий приемки Балл
1. Регистрация pytest, postman
1.1 Реализована регистрация с корректными данными 1
1.2 Реализована обработка некорректных входных данных и дубликатов 1
2. Логин pytest, postman
2.1 Реализован логин с корректными данными 1
2.2 Реализована обработка некорректных данных 1
3. Пользователи pytest, postman
3.1 Залогиненный пользователь получает информацию о себе 1
3.2 Гость не может получить информацию 1
4. Чтение снов pytest, postman
4.1 Реализован пагинированный вывод списка снов 1
4.2 Реализована фильтрация по автору 1
4.3 Реализовано получение сна по идентификатору, обработка несуществующего идентификатора 1
5. Создание снов pytest, postman
5.1 Залогиненный пользователь может создавать новые сны 1
5.2 Гость не может создавать новые сны 1
5.3 Реализована обработка некорректных данных и дубликатов 1
6. Удаление снов pytest, postman
6.1 Залогиненный пользователь может удалять свои сны 1
6.2 Залогиненный пользователь не может удалять чужие сны 1
6.3 Гость не может удалять сны 1
6.4 Реализована обработка некорректных данных 1
  • плюс 1 балл за форматирование, отсутствие ошибок линтера и форматтера
  • минус 1 балл в случае отправки ответа не через гитхаб

Критерии оценивания сложного уровня

Задание Критерий приемки Балл
1. Аутентификация и пользовательская модель pytest, postman
1.1 Реализована регистрация с корректными данными, есть обработка плохих случаев 1
1.2 Реализован логин с корректными данными, есть обработка плохих случаев 1
1.3 Залогиненный пользователь получает информацию о себе, гость не может получить информацию 1
1.4 Залогиненный пользователь может обновлять информацию о себе 1
2. Сны pytest, postman
2.1 Реализован пагинированный вывод списка снов с фильтрацией по автору и поиском по описанию 2
2.2 Реализован вывод любимых снов пользователя 1
2.3 Реализовано получение сна по идентификатору, есть обработка плохих случаев 1
2.4 Залогиненный пользователь может создавать новые сны, гость не может создавать новые сны, есть обработка плохих случаев 1
2.5 Залогиненный пользователь может удалять свои сны, есть обработка плохих случаев 1
2.6 Залогиненный пользователь не может удалять чужие сны; гость не может удалять сны 1
2.7 Залогиненный пользователь может добавлять сны в любимые, удалять сны из любимых, есть обработка плохих случаев 2
3. Дополнительный функционал ручная проверка
3.1 Реализована ролевая модель (пользователь / суперпользователь) 2
3.2 Реализована и внедрена (где требуется) зависимость для проверки роли 1
3.3 Суперпользователь может удалять любые сны 1
3.4 Любой иной ролевый функционал на ваш выбор 1
4. Тестирование ручная проверка
4.1 Для пункта 3.3 написаны api-тесты на pytest, дополнены фикстуры 1
4.2 Для пункта 3.3 создан документ в коллекции postman, написаны тесты 1
5. Архитектура ручная проверка
5.1 Изучите лучшие практики работы с FastAPI, используя блоги, ютюб и популярные репозитории гитхаба. Вам могут встретиться различные архитектурные подходы, например, "чистая архитектура" или "domain-driven design". Выберите источник вдохновения и интегрируйте идеи в этот проект (лучше в отдельной ветке для экспериментов). Если не найдется ничего достойного, можете (а) выделить дополнительный слой "репозиторий", куда вынести непосредственную работу через курсор и сессии, а очищенные сервисы выделите в зависимости, (б) попробовать библиотеки для реализации полноценного dependency injection 4
  • плюс 1 балл за форматирование, отсутствие ошибок линтера и форматтера
  • минус 1 балл в случае отправки ответа не через гитхаб

Настройка и запуск

Есть два пути: uv-way и old-way. Если есть проблемы с установкой библиотек, выбирайте old-way. Если у вас есть проблемы с uv - также выбирайте old-way. Иначе - выбирайте uv-way.

uv-way

Установка uv

# windows

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# unix

curl -LsSf https://astral.sh/uv/install.sh | sh

Перезапустите терминал (либо редактор кода), проверьте работоспособность

# windows / unix

uv

Если uv откликнулся, продолжайте двигаться по пути. Иначе переходите на old-way.

Виртуальное окружение и зависимости

Удалите директорию venv, выполните следующие команды

# windows / unix

uv sync # установка зависимостей
uv venv # активация виртуального окружения

Переменные окружения

Переменные окружения служат для задания конфигураций и чувствительных данных. В этом проекте к ним относятся путь к файловой базе данных, соли для хеширования и шифрования, а также флаг для режима отладки. Чтобы разработчик знал, какие именно поля ему нужно заполнить, обычно в репозитории находится файл с примером, здесь это .env.example.

Скопируйте его содержимое в файлы .env.local и .env.testing следующими командами

# windows

copy .env.example .env.local # создание файла для окружения разработки
copy .env.example .env.testing # создание файла для окружения тестирования
# unix

cp .env.example .env.local # создание файла для окружения разработки
cp .env.example .env.testing # создание файла для окружения тестирования

Теперь внесите в созданные файлы настройки для DATABASE_URI, JWT_SECRET_KEY, PASSWORD_SALT, DEBUG.

Рекомендации:

  • используйте разные DATABASE_URI для окружений разработки и тестирования;
  • JWT_SECRET_KEY и PASSWORD_SALT генерируйте командой, указанной в .env.example (под windows она будет работать через git bash);
  • флаг DEBUG установите в true для окружения разработки, в false для окружения тестирования.

Инициализация базы данных и наполнение данными

# windows / unix
uv run python -m app.database.seed

Запуск сервера

# windows / unix
uv run uvicorn app.main:app --reload

Добро пожаловать в документацию по ссылке http://localhost:8000/docs!

old-way

Виртуальное окружение и зависимости

Создайте виртуальное окружение (если редактор кода не создал его автоматически).

# windows

python -m venv .venv
# unix

python3 -m venv .venv

Активируйте его

# windows

.venv\Scripts\activate
# unix

source .venv\bin\activate

Установите зависимости

# windows

(.venv) pip install -r requirements.txt
# unix

(.venv) python3-pip install -r requirements.txt

Если наблюдаются проблемы со скачиванием библиотек и вы не знаете / не можете их обойти, скопируйте содержимое директории site-packages в .venv\Lib\site-packages на Windows либо .venv\lib\...\site-packages на Unix.

Переменные окружения

Переменные окружения служат для задания конфигураций и чувствительных данных. В этом проекте к ним относятся соли для хеширования и шифрования. Чтобы разработчик знал, какие именно поля ему нужно заполнить, обычно в репозитории находится файл с примером, здесь это .env.example.

Скопируйте его содержимое в файл .env следующей командой

# windows

(.venv) copy .env.example .env
# unix

(.venv) cp .env.example .env

Теперь внесите в созданные файлы настройки для JWT_SECRET_KEY и PASSWORD_SALT. Генерируйте их командой, указанной в .env.example (под windows она будет работать через git bash).

Инициализация базы данных и наполнение данными

# windows
(.venv) python -m app.database.seed

# unix
(.venv) python3 -m app.database.seed

Запуск сервера

# windows / unix
(.venv) fastapi dev

Если сервер не запустился, попробуйте альтернативную команду

# windows
(.venv) py -m fastapi dev
# unix
(.venv) python3 -m fastapi dev

Добро пожаловать в документацию по ссылке http://localhost:8000/docs!

Тестирование

API-тесты с Newman

# windows / unix

npx newman run postman_collection.json --global-var "API_URL=http://127.0.0.1:8000" --global-var="USERNAME=john.doe" --global-var="PASSWORD=password"

Автотесты с Pytest

# uv-way
pytest

# old-way
uv run pytest

Форматирование

# uv-way
uv run ruff format app

# old-way
ruff format app

Линтинг

Рафф-линтинг

# uv-way
uv run ruff check app

# old-way
ruff check app

Статический анализ

# uv-way
uv run mypy app

# old-way
mypy app

About

IThub Санкт-Петербург: 2 курс, Весна 2026

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors