Бекенд для мобильного приложения

Цена договорная
01 апреля 2021, 17:57 • 15 откликов • 76 просмотров
Необходимо реализовать бекенд для мобильного приложения. Желательно на Django Rest Framework + Elasticsearch но рассматриваем и другой стек. Вся разработка в докере. GraphQL либо джсон, обязательно swagger , redoc либо аналоги.

USER
- id
- full name (firstname, lastnamr)
- email (varchar)
- phone (varchar)

CATEGORY:
- id
- title (varchar)
- parent_id (nullable, int)

PRODUCT
- id
- title (varchar)
- description (text)
- price (float)
- old_price (nullable) (float)
- size_id (nullable, int)
- color_id (nullable, int)
- original_url (varchar)
- brand_id (nullable, int)
- shopify_id (nullable, varchar)


CATEGORY_PRODUCT:
- id
- product_id
- category_id (продукт может быть нескольких категория одновременно)

FAVORITES:
- id
- user_id (int)
- product_id (int)

BRAND:
- id
- title (varchar)


COLOR:
- id
- title (varchar)

SIZE:
- id
- title (varchar)

IMAGE:
- id (int)
- product_id (varchar)
- position (nullable)
- url (varchar)


EDITOR_PICKS:
- id
- product_id


CAROUSEL:
- id
- product_id
- title (varchar)


=== Открытые эндпойинты: ===

/user/create - обязательное поле только full name, может быть пустым, возвращает токен для миддлвары

middleware auth - по токену из апи выше

=== Закрытые эндпоинты: ===

- /user/update (обновляем свои данные через POST)

- /products?page=%d&price_min=1&price_max=20000&category_ids=1,2,3,4,5&size_ids=1,2,3,4,5&color_ids=6,7,8,9&search_string=%s&sort=%s

**** Все поля в этом эндпойинте опциональны. Сортировка по цене, и по дате добавления. Поиск выполняется по title, description, brand. перформанс важен, поиск должен делаться среди 10-20к продуктов.

=> output (X products of page, поля: id, title, price, oldprice, size id, title, color id, title, images urls)

- /favorites - клон products только выбираются продукты из избранного данного пользователя (автентификация через миддлвару)

- /favorite/add?product_id=%d добавляет в избранное для текущего юзера

- /favorite/delete?product_id=%d удаляет из избранного для текущего юзера


=== АДМИНКА ===

В админке, стандартно, надо мочь CRUD для всех сущностей, сортировка, поиск.
Админ должен мочь добавить/убрать товар в Editor-Picks, разные карусели, и в разные категории (товар может быть более чем в одной категории).
У товара может быть несколько цветов, размеров и брендов.


О проекте - проект собирает товары через scrapy и добавляет, обновляет их в базу. База разрастается до 10к и более, поэтому в идеале надо сделать минимальный фаззинг на псевдосущностях что оно не ляжет на большом кол-ве товаров.