- There are three user roles. Admin, managers, users. And also there are guests who are not logged in.
- Admin can manage everything – users, articles and categories.
- Managers can only manage articles.
- Admin, managers can do whatever user does.
- Guest can view only few articles.
- All users can view articles
- There should be CRUD APIs for all.
- /articles/home API should return articles for the categories and users they have followed, for guest users, they should return latest 5 articles. If user doesn’t have any follows, it should return latest 5 articles.
- GET /articles API should support sort by latest, number of comments, and number of favorites, search by title.
- User has a username, name, bio, profile photo. Username should be unique. It should only contain English lowercase letters, numbers, underscore.
- Create a separate endpoint for uploading profile photo.
- On register page, user has to provide username, name and password. Profile photo optional.
- On profile page, user can update name, bio, profile photo.
- In change password page, they can change their password.
- Users can post new articles
- Users can follow categories, or they can also follow other users.
- User should be able to see his followers.
- Admin can create category. Category doesn’t have a tree structure.
- Category has only a title.
- Article has title, category, a list of tags, content
- Users can create a new blog and publish immediately, or they can mark them as draft and publish later.
- User can comment on an article.
- User can like an article.
- When a user favorite an article, the author of the article should get a notification. The notification should look like this. “Smith liked your article – title of article”
- When a user comment on an article, the author of the article should get notification “Smith commented on your article.”
- When someone write comment and mention some user, the user should get notification as well. “Smith mentioned you on his comment”
- When a user log in, he should be able to see the notifications.
- When the user click on specific notification, it should redirect to the article page.