Skip to content
/ mose Public

University project. Management system build with Django

Notifications You must be signed in to change notification settings

artslob/mose

Repository files navigation

METHODOLOGY OF SOFTWARE ENGINEERING (mose)

pipeline status Coverage Status Code style: black

Проект по предмету "Методология программной инженерии", Университет ИТМО, 2-3 семестр магистратуры, 2019 год.

Преподавательский состав:

  • Клименков Сергей Викторович
  • Цопа Евгений Алексеевич
  • Исаев Илья Владимирович

Бригада 19:

  • Слободкин Артем Юрьевич
  • Корзухин Сергей Владиславович
  • Осадчая Алиса Олеговна

Описание проекта

В мире, описанном в серии книг "Трилогия Бартимеуса" писателя Джонатана Страуда, отсутствует удобный способ коммуникации между волшебником и людьми, которые хотели бы купить у него магическую услугу. Клиенты вынуждены лично обращаться за помощью к волшебнику, что в свою очередь ограничивает количество заявок, которые может обработать волшебник.
Проект представляет новый подход к организации выполнения магических услуг. Данная система будет решать административные задачи по обработке заявок, их хранению и обработке, а также повысит качество обслуживания клиентов волшебника, что позволит повысить прибыль, а у клиентов появится удобный способ оставлять заявки. Система будет хранить файлы окружения (информация о заклинаниях, благовониях и пентаклях), и обеспечивать интерфейс для демонов и администраторов.
Проект позволит открыть новое направление бизнеса для волшебников, сделать сферу оказания магических услуг более понятной и доступной. На рынке появятся новые игроки - агрегаторы, которые будут способствовать развитию данного направления бизнеса.

Installation

Dependencies:

  • docker
  • docker-compose

To run project execute following commands:

cd <project-dir>/docker
# build images and run in detached mode
docker-compose up --build -d
# run django migrations and (optional step) populate database with initial data
docker-compose exec web bash -c "./manage.py migrate && ./manage.py populate_db"

Now you can access these endpoints:

Use cases

  • 1. Логин (вход в систему)
  • 2. Регистрация нового пользователя
  • 3. Создание нового желания
  • 4. Просмотр желаний пользователем
  • 5. Регистрация нового "gifted" пользователя
    1. Добавлены модели Wizard, Student, Spirit.
    2. В админской панели можно создавать и редактировать данные модели.
  • 6. Просмотр списка желаний в очереди
    1. Customer:
      • wishes created by him;
      • wishes created by him and closed;
    2. Wizard:
      • wishes owned by him;
      • wishes in active status and without owner;
    3. Student: wishes assigned to him;
    4. Spirit: wishes assigned to him;
  • 7. Выполнение желания
    1. Описать state машину - как могут изменять состояние желания разные типы пользователей на всём его жизненном цикле.
    2. Реализовать смену состояний.
  • 8. Просмотр заказчиком желания
  • 9. Отмена желания
  • 10. Оплата желания
  • 11. Деавторизация пользователя (выход из системы)
  • 12. Закрытие желания
  • 13. Обработка желания

Testing

Start database and install requirements for python >= 3.6:

docker-compose -f docker/docker-compose.yml up --build -d db
python3 -m pip install -r requirements.txt -r requirements-tests.txt

Run unit tests with coverage report:

coverage run manage.py test --exclude-tag=selenium && coverage report

Run functional tests with selenium (firefox and geckodriver in $PATH are required):

python3 manage.py test --tag=selenium

Run load tests on populated database (go to http://127.0.0.1:8089/ after locust launch):

docker-compose -f docker/docker-compose.yml run --rm web bash -c "./manage.py migrate && ./manage.py populate_db"
python3 manage.py runserver 8000
locust -f wizuber/tests/load_testing.py --host="http://127.0.0.1:8000"

Deployment

Generate ssh keys and copy to server to allow access from CI to deployment server:

mkdir "${HOME}/mose-deploy/"
ssh-keygen -t rsa -b 4096 -C "key for deployment" -f "${HOME}/mose-deploy/id_rsa"
ssh-copy-id -i "${HOME}/mose-deploy/id_rsa.pub" user@target

Now you can use gitlab interface to deploy code or run deploy with local gitlab-runner:

gitlab-runner exec docker deploy-to-helios \
    --env MOSE_DEPLOY_SSH_PRIVATE_KEY="$(cat $HOME/mose-deploy/id_rsa)" \
    --env MOSE_DEPLOY_HELIOS_PORT="..." \
    --env MOSE_DEPLOY_HELIOS_IP="..."

To start server run commands below on helios (university server under 32-bit Solaris 10 aka SunOS 5.10):

source "source-me.sh"
python mose/manage.py migrate
python mose/manage.py populate_db
python mose/manage.py runserver 55671

Create ssh-tunnel on local machine and then go to http://localhost:8001/wizuber/:

ssh -L 8001:localhost:55671 helios

Links to docs:

  1. django-polymorphic
  2. locust.io

Useful links:

  1. How to add permission to user on his creation.
  2. Right way to query for Permission objects.
  3. How to create groups and assign permission during project setup.
  4. How to create custom permissions without binding to specific model.
  5. Using Django auth UserAdmin for a custom user model.
  6. Run Firefox Headless Browser tests on GitLab CI
  7. How to Install PostgreSQL 10 Using Source Code in Linux
  8. Error while loading shared libraries: libpq.so.5
  9. Psycopg runtime requirements

Conventions

Model is name of a model as singular, e.g. Wish or Wizard.

Permission Name Action View Name Template Name Url Name
List ListModel model/list.html list-model
Add Create CreateModel model/create.html create-model
View Detail DetailModel model/detail.html detail-model
Change Update UpdateModel model/update.html update-model
Delete Delete DeleteModel model/delete.html delete-model

About

University project. Management system build with Django

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published