Giter Club home page Giter Club logo

classroom_backend's Introduction

Репозиторий с исходным кодом бэк-энда classroom

Стэк

Основа

python3.9+

FastAPI - https://fastapi.tiangolo.com/ (Основной веб фреймворк)

SQLAlchemy (asyncpg) - https://www.sqlalchemy.org/ (ORM)

pydantic - https://pydantic-docs.helpmanual.io/ (Сериализация, схемы)

alembic - https://alembic.sqlalchemy.org/en/latest/ (Миграции)

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

pytest - https://docs.pytest.org/en/6.2.x/contents.html (Основной фреймворк для тестов) faker - https://zetcode.com/python/faker/ (Фейковые данные) pytest-asyncio - https://pypi.org/project/pytest-asyncio/ factory-boy - https://factoryboy.readthedocs.io/en/stable/ (автоматическая генерация фикстур)

Актуальные версии всех библиотек указаны в pyproject.toml (dependencies)

Развернуть проект

Локально

  1. Заранее создать базу в PostgreSQL и прописать данные с пользователем, самой бд и портами в src/core/config/.env примеры можно брать из .envexample в той же директории.

  2. Установить виртуальное окружение

  • sudo apt-get update && sudo apt-get -y upgrade

  • sudo-apt-get install -y python3-venv

  • poetry install

  • (Желательно) Прогнать тесты, убедиться что всё работает: poetry run pytest

  • Если всё нормально poetry run auvicorn app:app --reload

В докере

  1. Выполнить шаг 0 в локальной настройке, только в отдельном контейнере постгреса.
  • sudo apt-get update && sudo apt-get -y upgrade
  • sudo-apt-get install docker docker-compose
  • docker run --rm -ti -p 8000:8000 --name classroom classroom/classroom_back:latest

Миграции

Локально

  • С установленными пакетами и активированным виртуальным окружением: (После изменений в моделях) alembic revision --autogenerate -m <Имя миграции, например "добавлено поле email">

  • После предыдущего пункта: alembic upgrade head

В докере

  • Повторить предыдущий шаг через docker exec -it classroom-back <команда>

TODO:

  • Репозитории должны инжектится в сервисы через DI.
  • Логирование, возможно подключить сентри
  • Pre-commit: Black и isort сильно конфликтуют, длинная строка с одним импортом не даёт сделать коммит
  • Создавать диалог может только ученик с преподавателем, надо запрещать всем подряд начинать диалоги с кем попало
  • Переделать чат на вебсокетах? Слишком большое количество подключений одновременно не убьёт сервер?
  • Проверить везде DI, не создавать нигде объекты вручную (возможно только тесты)
  • Почистить ненужные методы в сервисах и моделях
  • релогинить при смене имейла и запрашивать активацию по новой (срочно)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.