Requirements - swe574-team2/swe574_team2 GitHub Wiki

Functional Requirements

Registration and Login

  • As a user, I want to register by choosing my own credentials, so that I can use the application.

  • As a user, I want to login to the application, so that I can access my personal space.

  • As a user, I want to logout from the application, so that I can be sure someone else using the same computer cannot access my private space.

  • As a user, I want to be able to set my password if I forget it, so that I can keep accessing my personal space.

User

  • As a user, I want to access my profile, so that I can change my username, email address and profile picture.

  • As a user, I want to follow the desired users on the platform, so that I can see their posts on my personal space.

  • As a user, I want to unfollow the desired users on the platform, so that I will not see their posts on my personal space.

  • As a user, I want to filter out the posts of a specific user, so that I can see the posts of desired user in a grouped way.

Posts

  1. A post shall mandatorily have a title, link and description.

  2. A post shall optionally have an image.

  3. If the post doesn’t have an image, there shall be no default image in the post.

  4. A post shall belong to one or more spaces (it shall belong to at least one space).

  5. In the post’s preview; the title, link and description of the post doesn’t have to be shown in full if they’re too long.

  6. Title, link and description of the post shall be shown in full in the post’s own page.

  7. If available, the post should show a preview of the page when the cursor is hovered over the post’s link.

  8. A post shall have descriptive or informative tags (Wikidata entities).

  9. When clicked on the post’s link, the post shall redirect to the linked webpage.

  10. A post shall be liked or commented by other users based on the space policy and post owner’s preferences.

  11. A post shall be posted publicly to a space, or be kept private in the post owner’s personal space.

  12. A post shall be added to (or removed from) favorite posts.

  13. A post and its different parts (image, parts of image, link, title, description etc.) shall be annotated.

  14. A post shall not be edited once posted.

  15. A post shall be deleted by its owner.

  16. A post shall be deleted by space owner or moderators based on the space policy.

  17. If a post contains the same link as another post shared in the "same space", the user should be informed about the link duplication and give confirmation if they want to share another post with the same link.

Tags

-Users should be able to create two types of tags: descriptive and informative.

-Users should be able to create their informative tags while posting a new link. Users should be able to provide a name for the tag.

-Users must be able to create informative tags such as 'to watch', 'interesting', 'good quality', 'needs improvement', etc.

-Users should be able to associate multiple tags, both descriptive and informative, with each link they post.

-Descriptive tags should be created via Wikidata, and users should be able to search and select tags from the existing Wikidata database.

-The system must provide auto-completion suggestions for tag names based on the keywords entered by the user.

-The system should be scalable to handle increasing numbers of users and tags in the future.

-The system should be reliable and ensure that all tags are accurately associated with the corresponding links.

-The system must store the tag name, tag type, and associated links for each tag created by a user.

Space and Homepage

  • As a user, I want to see the posts of the users that I follow, so that I will not be distracted by the posts that I am not interested in.

  • As a user, I want to see the posts recently shared by all users, so that I will be able to catch up with the popular topics.

  • As a user, I want to filter out the posts of a specific user, so that I will be able to see the desired user's posts in a grouped way.

  • As a user, I want to reach my saved posts, so that I don't forget something important for me.

  • As a user, I want to filter out the posts with respect to a desired tag, so that I will be able to see the posts about similar topics together.

  • As a user, I want to search for the posts including a desired keyword, so that I will be able to filter out the posts having a specific keyword.

  • As a user, I want to see other's comments on the shared posts, so that I can read what others think about the topic.

  • As a user, I want to like / unlike a post, so that I can encourage other users about sharing valuable content and enable users of the platform to be aware of valuable sharings.

Space Contributor Policies

  1. Any member of the space:
  • Any member of the space can create new posts and add them to the space.

  • They can edit or delete their own posts.

  • They can view and interact with other posts within the space, such as commenting or adding annotations.

  • They cannot edit or delete posts created by other members.

  1. Only users who have been granted posting rights:
  • The owner of the space can grant posting rights to specific users.

  • Users with posting rights can create new posts and add them to the space.

  • They can edit or delete their own posts.

  • They can view and interact with other posts within the space, such as commenting or adding annotations.

  • They cannot edit or delete posts created by other users without posting rights.

  • The owner of the space can revoke posting rights at any time.

  1. Only moderators:
  • The owner of the space can assign moderator roles to specific users.

  • Moderators can create new posts and add them to the space.

  • They can edit or delete any posts within the space.

  • They can view and interact with other posts within the space, such as commenting or adding annotations.

  • They can warn and remove abusive content from posts.

  • They can warn users who are disruptive, such as posting way too many things, or duplicates, etc.

  • They can block users who continue to post inappropriate content despite warnings.

  • They can permanently remove users who have been blocked.

Recommendations

  • The user should be able to see recommendation in a separate page.

  • The user should be able to see recommendation with the same qualities as posts. --

  • The user should be able to like and comment on recommendations.--

  • The system should be able to recommend posts which are liked by connections of the user.

  • The system should list posts according to their liked counts.

  • The system should be able to generate recommendations quickly and accurately. --

  • The system should be able to handle peak usage times and be available to ensure a smooth user experience --

Badges

  1. Badges must be earned at the space level.

  2. Users can earn badges in the categories of "the owner of the most liked post", "the person who shared the most posts (top contributor)", "regular contributor ".

  3. A moderator can give an “original” badge to a desired post/user in the space.

  4. Each badge must have an icon.

  5. A user should be able to have more than one badge.

  6. A user should be able to earn badges in different spaces.

  7. Badges earned by the user should be displayed on the profile page next to each space name they have joined.

  8. When clicking on each of the badges that a user has won, all posts that earn this badge should be displayed in the relevant space.

  9. “The most liked post” in a space should be displayed with an icon right next to the post title.

Search Functionality

  1. The search function should allow users to search for posts and spaces based on keywords contained within their titles, descriptions, and tags.

  2. The search function should allow users to filter their results by date, relevance, popularity, and other relevant criteria.

  3. The search function should be able to return results for posts and spaces even if the user misspells the keywords or uses synonyms.

  4. The search function should also be able to suggest related posts and spaces to the user based on their search query.

  5. The search function should allow users to search for posts and spaces based on their annotations, either by filtering for specific types of annotations or searching for keywords within the annotations themselves.

  6. The search function should be able to prioritize the results that have been annotated by users with a higher reputation or badge level.

  7. The search function should also allow users to search for posts and spaces based on the user who created them, or the user who contributed to them in some way (such as by annotating or commenting on them).

Warning and Removing People About Abusive Content

Owners can define the policies of the space:

  • The owner of the space can set policies for how contributions can be made to the space.
  1. They can choose who is allowed to create new posts and who has editing and deletion rights for posts.

  2. They can set rules for what type of content is allowed in the space, and what type of content is not allowed.

  3. They can assign roles to members, such as moderators or users with posting rights.

  4. They can change the policies and roles at any time.

  • Moderators can manage and remove abusive content:
  1. Moderators can view all posts within the space.

  2. They can identify posts that violate the policies of the space or contain abusive content.

  3. They can remove or edit posts that violate the policies of the space or contain abusive content.

  4. They can send warnings to users who violate the policies of the space, such as posting duplicates or irrelevant content.

  5. Moderators can track the number of warnings given to users and take further action if necessary.

  • Moderators can warn people who are disruptive:
  1. Moderators can send warnings to users who are disruptive, such as posting way too many things or duplicates.

  2. They can explain to the user what they did wrong and why it is not acceptable.

  3. They can suggest ways for the user to improve their contributions to the space.

  4. If the user continues to be disruptive, moderators can take further action, such as blocking or permanently removing the user from the space.

Non-functional Requirements

  • Passwords shall be kept encrypted in the database, so that anyone cannot reach users' passwords even if a data leak occurs.

  • The application shall be dockerized, so that it can be deployed and run on any platform easily.

  • The application shall be deployed to cloud and assigned a public IP, so that it can be reachable over the internet.

  • Error logs shall be tracked in the system, so that the developer can investigate any problem that occurs in the system.

  • Register, login, post counts shall be reachable, so that the succeess of the the app can be tracked.

  • Annotations on posts shall be made in W3C Web Annotation Data Model.

  • Informative tags on posts should use Wikidata entities as tag names.