В ходе проекта разрабатывается backend для корпоративного новостного портала. Backend портала будет строится на микросервисной архитектуре и включать в себя два сервиса, взаимодействующих друг с другом.
- User-service: Мастер-сервис, состоящий из CRUD операций с пользовательскими данными портала, а также имеющий функционал регистрации, авторизации и аутентификации пользователя.
- News-service: Сервис-потребитель, в котором осуществляются операции с новостным контентом.
Разрабатываемые сервисы должны позволить реализовать следующие пользовательские истории:
- Как редактор новостей, я хочу писать новостной контент и публиковать его для всех пользователей портала, чтобы делится публичной информацией с другими пользователями портала. (Не обязательно в MVP)
- Как модератор, я хочу проводить модерацию новостного контента, чтобы проверять публикуемую информацию на соответствие правилам портала. (Не обязательно в MVP)
- Как читатель, я хочу читать новостной контент, чтобы знакомиться с публичной информацией на портале.
- Как читатель, я хочу лайкать и писать комментарии к новостному контенту, чтобы делиться обратной связью. (Комментарии не обязательно в MVP)
- Как пользователь портала, я хочу настраивать свой профиль, указывать информацию о себе, устанавливать аватар, чтобы выделить свою уникальность перед другими пользователями.
- Как администратор, я хочу без ограничений управлять новостным контентом, профилями пользователей, их комментариями, чтобы производить сопровождение портала в ходе эксплуатации.
Примечание: Функционал MVP рассчитан на разработку в соло.
- Пользователь впервые зашел на портал.
- Портал распознал пользователя как неавторизованного и предложил авторизоваться.
- Пользователь не имеет данных авторизации, и переходит к регистрации.
- Портал открыл форму регистрации для пользователя.
- Пользователь вводит авторизационные данные.
- Портал создал учетную запись и первичный токен авторизации для пользователя.
- Пользователь впервые зашел на портал.
- Портал распознал пользователя как неавторизованного и предложил авторизоваться.
- Пользователь ввел свой логин и пароль.
- Портал проверил комбинацию логина и пароля и авторизовал пользователя.
- Если комбинация неверная, пользователю показана ошибка.
- Редактор новостей зашел на портал в управление новостями.
- Портал проверил, что у редактора есть права на управление новостями.
- Если прав нет, система не допустит пользователя к разделу.
- Редактор приступил к написанию новой новости и сохранил ее.
- Портал сохранил новость на статусе draft.
- Редактор опубликовал новость.
- Портал перевела новость на статус published или moderation в зависимости от роли редактора (доверенный или не доверенный автор соответственно).
- Модератор новостей зашел на портал в управлении новостями.
- Портал проверил, что у модератора есть права на управление новостями.
- Если прав нет, система не допустит пользователя к разделу.
- В разделе для модератора доступен дополнительный функционал с показом новостей на модерации.
- Модератор просматривает содержание новости и проверяет на соответствие правила портала.
- Если замечаний нет, модератор публикует новости.
- Если есть замечаний, модератор может редактировать новость или вернуть на статус draft.
- Читатель зашел на портал.
- Портал открыл ленту новостей, в которой показывается список новостей с их аннотацией.
- Читатель может применить настройки к списку новостей:
- Пагинация по 10, 25 или 50 новостей;
- Фильтрация по автору;
- Фильтрация по датам;
- Фильтрация предметной области;
- При применении настроек к списку, система показывает список новостей с обновленными настройками.
- Читатель открывает отдельную статью.
- Портал открыл полный контент новости.
- Читатель открыл полный контент новости.
- Читатель кликнул на кнопку для проставления лайка.
- Портал засчитал новости лайк.
- Читатель написал к новости комментарий.
- Портал отобразил в новости новый комментарий от читателя.
- Любой пользователь портал может открыть свой или чужой профиль.
- Портал откроет подробную информацию о профиле.
- Если открыт профиль текущего пользователя, то доступен функционал редактирования.
- Пользователь при редактировании профиля может изменить информацию о себе и поставить/изменить/удалить аватар.
- Портал должен иметь функционал регистрации и авторизации пользователя.
- У каждого пользователя должен быть определен набор прав, которые ограничивают или расширяют доступный ему функционал на портале.
a. Перечень минимальных прав:
i. Читатель – возможность чтения новостей, проставление лайков и оставление комментариев.
ii. Редактор – доступ к функционалу управления статьями (может управлять только статьями, в которых является автором). Может писать статьи и отправлять на модерацию. (Не обязательно в MVP)
iii. Доверенный редактор – доступ к функционалу управления статьями (может управлять только статьями, в которых является автором). Может писать статьи и отправлять на публикацию без модерации. (Не обязательно в MVP)
iv. Модератор – в функционале управления статьями доступен функционал по модерации новостей. Может опубликовать новость на модерации, внести в нее изменения, отправить в draft. (Не обязательно в MVP)
v. Администратор – может просматривать, редактировать и удалять любой контент портала. Может назначать и снимать права у других пользователей. Может изменять профиль других пользователей.
- На портале должно быть возможность размещать новостной контент.
- На каждую новость должна быть возможность оставлять комментарии и лайкать. (комментари не обязательно в MVP)
- По каждому пользователю портала должна быть доступна информация, которую пользователь о себе оставил, а также показываться его аватар (при наличии).
- Пользователь может редактировать свой профиль и устанавливать аватар в виде изображений в формате jpeg и png.
- Часть функционала по авторизации и управлению пользователями должна быть переиспользуема и расширяема для возможности подключения дополнительных сервисов и функционала.
- Авторизация пользователей должна производиться по REST API и выполнена с использованием JWT Токена. Передаваться токен должен через cookie или header.
- Межсервисное взаимодействие должно происходить через gRPC.
User-service REST
- Авторизация (передается логин и пароль, и при верной комбинации возвращается токен);
- Регистрация (передается логин и пароль, возвращается токен) User-service gRPC
- Верификация пользователя по токену (возвращает информацию о пользователей и его правах);
- Получить список пользователей;
- Получить детализацию пользователя по ID;
- Создать пользователя;
- Редактировать пользователя;
- Удалить пользователя;
- Загрузить аватар пользователя;
- Удалить аватар пользователя; News-service REST
- Получить список новостей (с информацией об авторе и количеством лайков/комментариев);
- Получить детализацию новости (с лайками, комментариями и авторами комментариев);
- Создать новость;
- Редактировать новость;
- Удалить новость;
- Создать лайк;
- Удалить лайк;
- Создать комментарий (с информацией об авторе);
- Удалить комментарий;
Привет!
1. Провалидируй еще раз, чтобы REST был для взаимодействия пользователя (браузера) с бэкэндом, а для взаимодействия сервисов между собой - gRPC
2. Давай добавим асинхронный воркер какой-нибудь. Например, сделаем ручку для получения самых залайканных постов (этот список должен формироваться в фоне не синхронно) ЛИБО сделаем удаление постов старее месяца (на твое усмотрение)
3. Предлагаю порезать роли (их много, оставим админа и читателя), убрать возможность комментирования и удаления новостей
В остальном выглядит отлично. Если все успеем, то лучше добавим функционал (роли, комментарии и т д)
Аватарки тоже можно не сразу добавлять, а если время останется. Чтобы все время не ушло на работу с объектным хранилищем
JWT приватный ключ в юзер сервисе, публичный ключ в новостном
Хендлеры для админки на отдельном порту
Роуты с админкой на отдельном закрытом порту