Сервис для приема и обработки заявок от клиентов на ремонт и дизайн квартир , а также планирование и заказ изделий для них. Сервис состоит из 2х компонентов - API и суперадминка.
docker-compose up
- Разработать архитектуру БД (20)
- Создать таблицы (4)
- Определить связи между сущностями (4)
- Создать столбцы (12)
- Суперадминка (8)
- Подготовить демонстрацию для суперадминки
- Развернуть ActiveAdmin (2)
- Развернуть FlaskAdmin (5)
- Создать модели (4-8)
- Настроить бехейверы на операции CRUD (8)
- Настроить связи между моделями (4)
- Создать стандартные страницы с CRUD на каждую модель (8)
- Создать меню (2)
- Подготовить демонстрацию для суперадминки
- API
- Выбрать технологии для реализации API (2)
- Создать swagger файл (8-16)
- Сгенерировать на основе файла CRUD операции для моделей (2)
- Сделать регистрацию по емейлу паролю (3)
- Сделать авторизацию по емейлу паролю (2)
- Сделать восстановление по емейлу (8)
- Добавить к методам API роли пользователей (8)
База данных структурирована таким образом, что бы задействовать как можно меньше таблиц. Для этого используются полиморфные связи, на некоторых таблицах, которые могут быстро расти. Причиной такого решения является то, что можно партиционировать большие таблицы или перемещать их на другие ноды БД, что бы снизить нагрузку. Так же можно на отдельные ноды таблиц использовать репликацию, для анализа данных и выполнения сложных запросов, которые сильно потребляют ресурсы сервера. Таким образом можно не беспокоиться о масштабировании БД и отдельных таблиц.
Например у нас есть сущности:
- Изображения
- Документы
- 3D бандлы
Все сущности являются файлами с разным разрешением, но принадлежат разным моделям. Таким образом, вместо создания таблиц для связки сущностей, для которых могут быть применимы:
- Товары
- good_images
- Портфолио
- portfolio_images
- Услуги
- service_documents
- Проекты
- project_images
- project_documents
- Согласования
- harmonization_images
- harmonization_documents
- harmonization_bundles
используются не 8 таблиц, а 1, по признаку поля на указание нужной сущности. Например:
- files(parent_type="Portfolio", parent_id="111", type="image")
- files(parent_type="Good", parent_id="222", type="image")
- files(parent_type="Service", parent_id="333", type="document")
Полиморфные связи используются для таблиц:
- goods - Товары
- files - Файлы