Доработать бекенд Nodejs Express Api

30 000 руб. за проект
28 декабря 2023, 21:16 • 19 откликов • 189 просмотров
Техническое задание
1.1) Модерация Заявок.
Автоматическая отправка на модерацию всех новых заявок пользователей(заявки все равно публикуются):
добавить в базу данных "bool on_moderation".

Возвращать Заявки на обработку для модерации: GET /api/v1/moderator/applications/pending.
Реализовать фильтры для удобства модерации: принятые, отклоненные, заблокированные, заявки на рассмотрении, жалобы.

Принятие Заявки: POST /api/v1/moderators/applications/:applicationId/accept.
Входные данные: id Заявки.
Модератор может принять заявку, после чего ей присваивается статус on_moderation=0.
Обновить данные в БД, что заявка принята, внести дату время, ID модератора.

Отклонение Заявки с Комментарием: POST /api/v1/moderators/applications/:applicationid/reject.
Входные данные: текст.
Модератор может отклонить заявку с возможностью оставить комментарий (причина отклонения).
Комментарий содержит информацию о заявке (ID), текст комментария, дата и время, ID модератора.
Система отправляет email с комментарием для пользователя, создавшего данную заявку.
У заявки меняется статус на rejected (перестает отображаться везде, кроме у автора).
Обновить данные в БД, что заявка отклонена, внести дату время, модератора, текст.
Комментарий модератора сохранить в БД.

1.2) Модерация новых аккаунтов.
Автоматическая отправка на модерацию всех новых аккаунтов:
добавить в базу данных "bool on_moderation".

Возвращать аккаунты на обработку для модерации: GET /api/v1/moderator/applications/pending.
Реализовать фильтры для удобства модерации: принятые, отклоненные, заблокированные, аккаунты на рассмотрении.

Одобрение аккаунта: POST /api/v1/moderators/applications/:accountId/accept.
Входные данные: id Аккаунта.
Модератор может одобрить аккаунт, после чего ему присваивается статус on_moderation=0.
Обновить данные в БД, что аккаунт отмодерирован, внести дату время, ID модератора.

Отклонение аккаунта с Комментарием: POST /api/v1/moderators/applications/:applicationid/reject.
Входные данные: текст.
Модератор может отклонить аккаунт с возможностью оставить комментарий (причина отклонения).
Комментарий содержит информацию о аккаунте (ID), текст комментария, дата и время, ID модератора.
Система отправляет email с комментарием для пользователя, создавшего данный аккаунт.
У аккаунта меняется поле fully registrated в 0, что заставляет пользовтаеля вводить данные еще раз.
Обновить данные в БД, что аккаунт обнулен, внести дату время, модератора, текст.
Комментарий модератора сохранить в БД.

1.3) Получение статуса "Проверенная компания".
Реализовать систему верификации компаний с использованием фотографий для подачи Запроса, рассмотрения их модераторами, и отправки комментариев по электронной почте.

Функционал:
Сущность модератора (на основе уже сделанного user) + имя, фамилия, фотография.
Для модератора предоставляется доступ к списку заявок ждущих проверки и к списку компаний, ждущих подтверждение статуса "проверенная компания".
Эндпоинт для подачи запроса на верификацию: POST /api/v1/company/verification.
Входные данные: скан правоуставливающих документов компании, текст.
Сделать дополнительную таблицу в базе данных.

Таблица БД:
ID Запроса (id);
ID Компании (company_id);
Статус Запроса (status,принята, отклонена, на рассмотрении и т.д.);
Дата/Время Подачи (submission_datetime);
Фотографии Компании (company_photos);
Текст запроса (text);
модератор (moderator_id) default- null.

Принятие Запроса "Проверенная компания":
Возможность модератору принять заявку. POST /api/v1/moderators/applications/:applicationId/accept
Заявка становится отмеченной как "принята".
Компании выдается статус проверенной компании.

Отклонение Запроса "Проверенная компания":
Возможность модератору отклонить заявку после рассмотрения. POST /api/v1/moderators/applications/:applicationId/reject
Входные данные: текст
Запрос становится отмеченным как "отклонен".
Отправка email пользователю с комментарием.
Комментарий модератора сохранить в бд.

1.4) Жалобы.
Методы Жалобы:
Добавить методы для подачи жалоб от авторизованных пользователей.

Таблица в Базе Данных:
Добавить таблицу "complaints" в базу данных для хранения информации о жалобах.

Поля Таблицы "complaints":
complaint_id: Уникальный идентификатор жалобы.
reporter_id: Идентификатор пользователя, подающего жалобу.
reported_type: Тип объекта жалобы (аккаунт компании (company), аккаунт бригады (team), заявка (order).
reported_id: Идентификатор объекта жалобы (team/company_id; (order_id)
datetime: Дата и время подачи жалобы.
comment: Текстовый комментарий к жалобе от авторизированного пользователя.
confirmation_status: Подтверждение текущего статуса заявки для предотвращения повторной проверки.
moderation_status: Статус модерации (отмодерировано, на рассмотрении).

1.5) Методы для Модератора.
Возвращение всех комментариев модерации: GET /api/v1/moderator/comments/history/:userId.
Возможность просмотра модератором всех комментариев, оставленных при рассмотрении заявок от конкретного пользователя.

Блокировка Пользователя: POST /api/v1/moderator/users/:userId/block
Модератор может заблокировать пользователя, что приводит к скрытию профиля и всех его заявок.
Система отправляет email заблокированному пользователю.

Реализовать механизм уведомлений модераторов о поступлении новых жалоб для своего рассмотрения.
Вести логи жалоб для последующего анализа и улучшения системы.

Параллельная модерация:
Разработать механизм модерации с возможностью нескольким модератором работать параллельно
метод возврата заявок для проверки(с пагинацией) при возврате заявок обновляет столбец базы данных, добавляет id модератора и время начала модерации. Не возвращает другим модераторам заявки с назначенным модератором.
Периодическая проверка таблицы, если есть заявки которые назначены за администратором больше N времни, вернуть поле с id модератора в NULL (указывает что заявка снова свободна к рассмотрению)

Доступ к Чату:
GET /api/v1/moderator/chat/:userId
Получение доступа к чату компаний/бригад

Доступ к Заявкам за Компанию:
GET /api/v1/moderator/company/applications/:userId
Получение доступа к заявкам за компанию для просмотра всех заявок, включая заблокированные.

Доступ к Откликам за Исполнителя:
GET /api/v1/moderator/performer/applications/:userId
Получение доступа к откликам за исполнителя для просмотра и управления откликами.

Доступ к Рейтингу:
GET /api/v1/moderator/rating/:userId
Получение доступа к рейтингу для просмотра и анализа рейтингов пользователей и компаний.

Доступ к старым комментариям, отправленных пользователю в ходе предыдущей модерации:
GET /api/v1/moderator/comments/:userId/previous

Блокировка Пользователя и его ресурсов:
PUT /api/v1/moderator/users/:userId/block
Блокировка пользователя со всеми его ресурсами (заявками, откликами, рейтингом, диалогами).
Заблокированные ресурсы не отображаются пользователям, но остаются в базе данных.

Разблокировка пользователей:
PUT /api/v1/moderator/users/:userId/unblock
Разблокирование ресурсов пользователя после блокировки.

2) Задержка завершения работы.
Реализация Задержки:
Время задержки устанавливается в N количество часов.
Работа не может быть принята раньше, чем через указанное количество часов после начала работы (order_status "in_work").
При попытке принять работу до истечения времени задержки, система должна выдавать сообщение о невозможности принятия с оставшимся временем.

3) Обновление Specification.
Добавление в PUT /me/team:
Расширение функциональность запроса PUT /me/team для возможности обновления Specification.
входные данные: массив из id.

4) Уведомления о Новых Заявках.
Разработать механизм регулярных уведомлений об появлении новых заявок с определенной периодичностью (раз в N часов).

Распределение Заявок при Email-рассылке
использовать контроллер от searchorder с параметрами пользователя(его специализацией, текущим местоположением, желаемым местоположением и границе работ)
Заявки будут распределяться в соответствии с выбранным типом работ и географическими параметрами:
При выборе города оповещаются только бригады в этом городе.
При выборе региона происходит распределение внутри региона.
При выборе федерального округа заявки распределяются по всему округу.
При выборе страны заявки отправляются по всей стране.
Все вышеуказанное включает в себя дополнительный фильтр по специальности.
Рассылка заявок для Исполнителей
Подписка и Отписка
Реализовать методы для подписки и отписки от массовой рассылки заявок.

Подписка на случайные Заявки
Пользователь может подписаться на рандомные заявки, соответствующие выбранном географическим параметрам и специализации.

5) Структура Базы Данных.
Добавить структуру в базе данных для поддержки функционала федерального округа.
Таблица "users" теперь включает дополнительные поля: country, federal_district, region, city.
таблица с данными Стран, федеральный округов,регионов,городов.
Расширить поля пользователя:
country: Страна проживания пользователя.
federal_district: Федеральный округ, к которому относится пользователь.
region: Регион в пределах федерального округа.
city: Город проживания пользователя.
Выбор Федерального Округа:
Взаимодействие с Регионами:
Иерархия:
Обеспечить иерархию выбора страны, федерального округа, региона и города для более точной локализации пользователя.
(выбор каждого пункта уменьшает возможные варианты для следующего, упрощая выбор пользователем.)

Синхронизация Баз с Фронтендом:
Метод для Возврата Списка Возможных Локаций:
GET /api/v1/locations
Возвращает список всех возможных стран, федеральных округов, регионов и городов.
метод для поиска по тексту

6) Поворот Картинки.
Добавление в POST:
Расширить функционал запроса POST для параметра поворота картинки.
POST /api/v1/images/upload
Добавить параметр rotation для указания угла поворота картинки enum {0,1,2,3}(в градусах: 0, 90, 180, 270).
добавить в базу данных информацию о повороте картинки.

Включение в GET:
Расширить функциональность запроса GET для возможности включения параметра поворота картинки.
GET /api/v1/images/:imageId
Добавлен параметр rotation в ответе на запрос GET, указывающий угол поворота картинки.

7) "Сложные плюсики" при отклике на Заявку.
router.get('/:companyId(\\d+)/orders'
Возвращать число новых заявок (order_likes status unviewed)

8) Возврат Рейтинга и количество отзывов.
сделать контроллеры
Добавить возвращение рейтинга и количества отзывов в ответах на запросы.
searchorder
team
company/id/orders
get team likes

автоматического обновления рейтинга после добавления нового отзыва.
POST /api/v1/team/:teamId/likes
POST /api/v1/company/:companyId/orders/:orderId/like

9) Метод для Возврата Рейтинга Пользователя по ID.
GET /api/v1/users/:userId/rating
Возвращает рейтинг и количество отзывов для пользователя с указанным userId.
В ответе возвращаются данные рейтинга из бд по userIdю

10) Добавить вывод гражданства из базы данных.
/api/v1/team/3

11) Починить регистрацию по телефону.
/sign-up/phone

12) Генерация Уникального Имени при Регистрации Компании.
При регистрации компании без ИНН и ОГРН генерировать уникальное имя в формате "Заказчик XXXX", где XXXX - уникальная цифровая последовательность.
Правила Генерации Уникального Имени:
Цифровая последовательность (XXXX) должна быть уникальной для каждой компании.
Примеры
"Заказчик 621", "Заказчик 192","Заказчик 885".

13) Починить oauth vk.
всегда возвращается error=USER_NOT_FOUNDED

14) Не возвращать незарегистрированных пользователей из team?page=1&limit=5
возврат численности бригады и адреса

15) При запросе order/{id} возвращать информацию о последнем времени онлайн пользователя.

16) Добавить в возврат метода GET /user/me данные о непрочитанных новых откликах.

17) Починить order/getTeamLikes. На текущий момент возвращает не все отклики бригады.

18) Изменить редактирование заявки, если заявка была откланена модерацией, то при ее редактировании она автоматически НЕ становится видной,
а сначала попадает намодерацию, и уже из результатов модерации появляется или нет.

19) Модифицировать контроллер Searchorder гео.
Добавить функционал посика по гео, страна, фед округ, регион, город
Добавить возможность искать по разным уровням гео, если поиск по фед округу - возвращать
все заявки по всем городам находящимся в составе фед округа

20) Стандартизировать географию.
Создание Заявки:
На странице Компании предусмотрен функционал, позволяющий указать географические параметры работы,
включая город, регион, федеральный округ и страну.

Регистрация бригады:
На странице регистрации бригады предусмотрен функционал,
позволяющий указать географические параметры текущего местоположения и желаемой области работы.

Регистрация компании:
На странице регистрации компании есть поле адрес компании.

сделать методы поиска по введенным данным.
ввели Россию - должен вернутся список включающий только фед области, регионы, города России
ввели Красноярский край - только города Красноярского края

21) Безопасность.
Обнаружение одновременного доступа:
-Разработать механизм, который будет уведомлять администраторов системы в случае обнаружения двух разных аккаунтов, входящих с одного и того же IP-адреса в течение короткого времени.

Обнаружение спамм-акаунтов:
-Реализовать механизм для выявления аккаунтов, отправляющих спам другим пользователям.

Накрутка отзывов:
-Разработать механизм, который оповещает администраторов в случае, если аккаунт ставит отзыв другому аккаунту, используя одинаковые IP-адреса.

Мониторинг активности отзывов аккаунтов:
-Разработать механизм, который выявляет случаи, когда один аккаунт оставляет слишком много отзывов на другой аккаунт.

Капча
Добавить капчу на регистрацию и вход в аккаунт.

Логгирование IP-адресов пользователей.
Реализовать механизм логгирования IP-адресов пользователей для обеспечения безопасности и мониторинга активности.
при доступе к ресурсу зарегистрированного пользователя логгировать IP-адрес в базу данных:

Создать таблицу в базе данных:
База данных должна включать следующие поля:
уникальный идентификатор записи (ID),
id пользователя,
IP-адрес пользователя,
Дата и время лога IP-адреса.

22) Обратная связь.
Описание задачи:
функционал для отправки обратной связи зарегистрированными пользователями с возможностью выбора из следующих тем: Техническая поддержка, Реклама, Предложения по улучшению.
метод для возврата объектов обратной связи (для просмором модерацией) с поддержкой пагинации.
Реализовать метод API для возврата объектов обратной связи с поддержкой пагинации, позволяющий модерацией получать данные порциями.

Создать форму обратной связи с полями для ввода текста обращения, выбора темы (Техническая поддержка, Реклама, Предложения по улучшению)
База данных обратной связи:

Добавить структуру базы данных для хранения обратных связей, включая информацию о тексте, теме, дате отправки и пользователеле.
Метод возврата обратной связи с пагинацией:
Уведомления о Новых Заявках
Разработать механизм регулярных уведомлений об появлении новых заявок с определенной периодичностью (раз в N часов).

------------------------------------------------------------------------------------------------------------------
Специалист уровня не ниже мидла.
Обязательно сохранить общий кодстайл и логику.
Фиксированная оплата без возможности почасовой калькуляции.
Периодический мониторинг выполнения задачи - готовность исполнителя продемонстрировать текущую работу на любом этапе.
Просьба сразу присылать профиль habr/git/портфолио релевантных работ.

Безопасная сделка (комиссия 50/50) или постоплата.
Перевод денежных средств в течении трех дней после сдачи работ, необходимых для проверки.

Рассматриваем долгосрочное сотрудничество на постоянной основе.
По всем вопросам писать сразу в Telegram из профиля.