The Software Training Repository was built to address the issue of the rapid evolution and ever-changing landscape of software technologies, frameworks, and tools used in the software development process. With the consistent introduction of new updates to existing tools on a daily basis, it is often difficult for a software engineer to keep up to date with the latest emerging technologies or changes in existing solutions. Whilst there are sources of information available on the web, as a student without the necessary experiences, it can often be difficult to determine the legitimacy and appropriateness of the claims of such sources.
The Software Training Repository seeks to provide students and individuals with access to a centralized, reliable, and up to date source of information. The core of the system aims to be a community-driven hub, with students and staff being able to contribute their understanding and knowledge of various frameworks, technologies, and tools through articles and discussion forums. New articles are able to be published by students with students also being able to modify existing articles by adding new or editing outdated information.
- Working demo: https://api.cervidae.com.au/ (For admin login, the username and password are both "admin2". For student login, you can either register a new account or use the username: lisalisa and password: 123456)
- Documentations: Confluence
- RS handover report can be found at COMP900822021SM1RS_handover.pdf
https://confluence.cis.unimelb.edu.au:8443/display/COMP900822021SM1RR/Deployment+Guides
1. User
The student and moderators should be able to register account and login. The administrator should be able to manage users’ accounts.
- Note that due to the limitation of unimelb database access, from sprint 3, we gave up developing the user story 1.0 (Login via unimelb account) and replaced it with user story 1.1 (Register account)
2. Subject
Subject is a major component of the website. The subject page should contain a subject description and the related articles and tools recommand by the website moderators. All users should be able to view the subject pages that they subscribe to. And the moderators should be able to create, delete, edit subjects, add sections to subjects and review all pending articles under each subject.
3. Article
Articles is a criticle function for the website to thrive. All users can create new articles and edit exsiting articles to share their ideas. However, any edictions made by students need to be reviewed by website moderators, and the moderators may approve or reject those editions. Besides users can attach tags to an article, in that case, other users will be able to search those articles based on their tags. Meanwhile, users will also be able to seach articles base on the keywords in their title.
4. Comment
Comment is a function for users to provide feedbacks to contents in the website. Users should be able to leave comments to articles and reply to other comments.
5. Homepage
After login to the website, users will be directed to their homepage. From their homepage, users should be able to see all subjects enrolled by the user. And for moderators, they should also be able to see the subjects moderated by them.
6. Profile
Users should have their own profile pages where they can check all the articles (and pending articles for students) they have created.
Server (Front_end/Front_end/src/)
- app.js: The front end of the application, handles routing to different pages.
Utils (Front_end/Front_end/src/utils/): Contains Utility classes for use by other classes.
- utils/AuthService.js: Performs the authentication to the backend and stores role and authorization details.
- utils/request.js: Formatted http request for use by other classes.
- utils/tools.js: Tools for adding and getting parameters to and from urls.
components (Front_end/Front_end/src/components/): Contains components used on all pages.
- components/Footer.js: The footer used on every page.
- components/NavBar.js: The implementation for the Navbar used on every page.
container (Front_end/Front_end/src/container/): Contains details for every page functionality.
addSection (Front_end/Front_end/src/container/addSection/): Contains class with logic for adding sections.
- addSection/AddSection.jsx: Contains logic for adding sections.
addUserPage (Front_end/Front_end/src/container/addSection/): Contains class with logic for adding users.
- addUserPage/AddUser.jsx: Handles logic for adding sections.
ArticlePage (Front_end/Front_end/src/container/ArticlePage/): Contains the classes for the page for viewing articles.
- ArticlePage/Article.jsx: Handles the container for the viewer and associated buttons.
- ArticlePage/EditorComponent.jsx: Actual reader component, set up for read only access.
- ArticlePage/LikeButton.jsx: users can click the button to like or unlike the article.
- ArticlePage/Bookmark.jsx: users can click the bookmark button to bookmark or unbookmark the article.
Comment (Front_end/Front_end/src/container/Comment/): Contains the comment components on pages.
- Comment/Comment.jsx: Handles the container for comment system and post function of users.
- Comment/SubComment.jsx:Represents individual comment item .
- Comment/SubCommentItem.jsx:Replys the comments of other users.
CreateArticlePage (Front_end/Front_end/src/container/CreateArticlePage/): Handles the page for creating articles, set up differently from editing existing articles.
- CreateArticlePage/CreateArticlePage.jsx: Handles the container for the viewer and associated buttons.
- CreateArticlePage/EditorComponent.jsx: Actual reader component, set up for editing.
- CreateArticlePage/tagComponent.jsx: Handles adding and removing tags from articles.
EditArticlePage (Front_end/Front_end/src/container/EditArticlePage/): Contains classes for editing articles.
- EditArticlePage/EditorPage.jsx: Handles the container for the viewer and associated buttons.
- EditArticlePage/EditorComponent.jsx: Actual reader component, set up for editing.
- EditArticlePage/tagComponent.jsx: Handles adding and removing tags from articles.
EditingSectionPage (Front_end/Front_end/src/container/addSection/): Contains class for editing sections.
- EditingSectionPage/EditingSection.jsx: Contains logic for editing sections within subjects.
FAQPage (Front_end/Front_end/src/container/FAQPage/): Contains the page for frequently asked questions (FAQ) to help use get familiar with the system.
- FAQPage/FAQ.jsx: FAQ page contains content to help users get familiar with the system.
HomePage (Front_end/Front_end/src/container/addSection/): Contains the homepage.
- HomePage/Home.jsx: Contains logic for the homepage, displaying subjects for each user.
LoginPage (Front_end/Front_end/src/container/LoginPage/): Contains class that displays the login page.
- LoginPage/Login.jsx: Contains logic for logging in.
PendingPage (Front_end/Front_end/src/container/PendingPage/): Contains classes related to pending articles for moderators.
- PendingPage/detailedPendingPage.jsx: Handles the container for the viewer and associated buttons for a pending article.
- PendingPage/EditorComponent.jsx: Actual reader component, set up for read only.
- PendingPage/pendingArticleComponent.jsx: Component representing a pending article in the list.
- PendingPage/PendingPage.jsx: Displays list of pending articles for a subject, for moderator to approve.
ProfilePage (Front_end/Front_end/src/container/ProfilePage/): Contains classes relating to the profile page, which displays all articles published by the user.
- ProfilePage/EditorComponent.jsx: Actual reader component, set up for editing.
- ProfilePage/ModeratorProfilePage.jsx: Profile page for moderator, Displays list of pending articles with options to approve.
- ProfilePage/ProfilePendingArticleComponent.jsx: Component representing a pending article in the list.
- ProfilePage/StudentProfilePage.jsx: Profile page for students, like moderator page but displaying unapproved articles with option to edit.
RegisterPage (Front_end/Front_end/src/container/RegisterPage/): Contains class for registring a new user.
- RegisterPage/Register.jsx: Displays registration page.
SearchPage (Front_end/Front_end/src/container/SearchPage/): Contains page for searching all articles.
- SearchPage/search.jsx: Displays search options and field.
SubjectPage (Front_end/Front_end/src/container/SubjectPage/): Contains class for displaying details for a subject.
- SubjectPage/Subject.jsx: Displays the articles and details related to a subject.
WelcomePage (Front_end/Front_end/src/container/WelcomePage/): Contains the landing splash page.
- WelcomePage/WelcomePage.jsx: Landing page.
User experince testing has been performed The exported version of our user experience testing can be found in this folder.
Server (backend/Back_end/)
- app.js: Working as a web server, it listens to the request sent by each connected client and be ready to respond to it. It also builds a connection with database to allow data CRUD.
Routers (backend/Back_end/routers/): Defines a series of routers that redirect HTTP requests from the front-end to the corresponding back-end controllers based on the suffix of the request.
- routers/article.js: Redirects the incoming HTTP requests with suffix of “/article” to their corresponding functions in the article controller.
- routers/auth.js: Redirects the incoming HTTP requests with suffix of “/article” to their corresponding functions in the article controller.
- routers/comment.js: Redirects the incoming HTTP requests with suffix of “/article” to their corresponding functions in the article controller.
- routers/search.js: Redirects the incoming HTTP requests with suffix of “/article” to their corresponding functions in the article controller.
- routers/section.js: Redirects the incoming HTTP requests with suffix of “/article” to their corresponding functions in the article controller.
- routers/subject.js: Redirects the incoming HTTP requests with suffix of “/article” to their corresponding functions in the article controller.
- routers/tool.js: Redirects the incoming HTTP requests with suffix of “/article” to their corresponding functions in the article controller.
- routers/user.js: Redirects the incoming HTTP requests with suffix of “/article” to their corresponding functions in the article controller.
Middlewares (backend/Back_end/middlewares/): Contains classes that use to verify the identity of request owners and gurantee the security of the website.
- middlewares/auth.js: Contains a function to allow users to login safely, and generate an authentication token that can verity the users’ identity for their following operations.
- middlewares/verifyToken.js:
Controllers (backend/Back_end/controllers/): Defines a series of functions that take the HTTP requests redirected by routers, process the requests, and generate HTTP responds to send back to the front-end.
- controllers/article.js: Contains functions that handles the incoming HTTP requests related to articles. (e.g. publish new articles, approve pending articles, etc.)
- controllers/comment.js: Contains functions that handles the incoming HTTP requests related to comments. (e.g. post new comments of an article, delete or update an existing comment, etc.)
- controllers/search.js: Contains functions that handles the incoming HTTP requests related to search. (e.g. search an article by keywords, etc.)
- controllers/section.js: Contains functions that handles the incoming HTTP requests related to section. (e.g. add an section of article to a subject, add a comment section to an article, etc.)
- controllers/subject.js:Contains functions that handles the incoming HTTP requests related to subjects. (e.g. create or update a subject, etc.)
- controllers/tool.js: Contains functions that handles the incoming HTTP requests related to tools. (e.g. add a new tool, etc.)
- controllers/user.js: Contains functions that handles the incoming HTTP requests related to users. (e.g. user subscribe a subject, etc.)
Proxies (backend/Back_end/proxies/): Each class corresponds to a database document and works as an intermediate layer to provide the necessary functions for the system to communicate with that database.
- proxies/article.js: Provides necessary CRUD function for article documents in mongoDB.
- proxies/comment.js: Provides necessary CRUD function for comment documents in mongoDB.
- proxies/section.js: Provides necessary CRUD function for section documents in mongoDB.
- proxies/subject.js: Provides necessary CRUD function for subject documents in mongoDB.
- proxies/tool.js: Provides necessary CRUD function for tool documents in mongoDB.
- proxies/user.js: Provides necessary CRUD function for user documents in mongoDB.
The database model are defined in the backend/Back_end/models/ folder using Mongoose framework.
- models/article.js: Defines the Article and the PendingArticle mongoose model.
- models/comment.js: Defines the Comment mongoose model and some functions auto-triggered functions related to the model.
- models/section.js: Defines the Section mongoose model.
- models/subject.js: Defines the Subject mongoose model and some functions auto-triggered functions related to the model.
- models/tool.js: Defines the Tool model and some functions auto-triggered functions related to the model.
- models/user.js: Defines the User mongoose model.
The updated and new documents from semester 1 of COMP90082 are described below:
-
The updated database schema can be found at database_schema.pdf
-
The information about MongoDB, database validation rules and scripts, and cache/redis can be found at Database_and_redis.pdf
-
The information about CI/CD overview, Deployment Instructions and Deployment instances can be found at deployment_instructions.pdf
-
The unit test, integration test, and acceptance test documents of sprint 1 and sprint 2 for database and deployment can be found at Database_Deployment_testing_for_both_sprints.pdf
-
The changelog of the inception phase and sprint 1 and sprint 2 for database and deployment can be found at Database_and_deployment_changelog.pdf
The document details of previous project are shown in the diagram below:
Api testing has been performed using post man collections The exported version of our api testing can be found in this folder.
Test Id | Test Case | Status | Result |
1.1.1 | When the student fill in the userid (899909) ,username(john doe) and password (password), a new student account should be created and the account should be able to use for login | pass | A new account has been created and was able to login successfully |
1.1.2 | When the student fill in the userid(899909) or username which already existed in the system,
the system should display an error. |
fail | The system was stuck in the register page and does not respond with error. |
1.2.1 | When the student/moderator fill in the correct account(student) and password(123) on the Login page,
the student/moderator's homepage will be shown on the website. |
pass | Successfully login to the system |
1.2.2 | When the student/moderator fill in the wrong account(student) and password(899) on the Login page,
the student/moderator will get an error message telling him/her the provided account information is wrong. |
pass | Responded with error message |
1.3.1 | (admin login info(username admin2 password admin2))
When the administrator clicks the "User Management" button on the home page, the administrator should be able to add a new user into the system. |
fail | Admin login was successful but when adding a student type into the system the system responded with error. |
2.1.1 | When the moderator clicks "Add Subject" on his/her Homepage and provides a unique subject code and other relevant information, the subject will be successfully created. | pass | Moderator was able to successfully add subject. |
2.1.2 | When the moderator clicks "Add Subject" on his/her Homepage and provides a duplicate subject code and other relevant information, the subject will not be successfully created. | fail | Adding subject has been re directed to the subject page and it does not respond error. |
2.2.1 | When the moderator clicks edit page layout in the subject page and continues by clicking "Add new section" moderator add a new section detail and publish , a new section should be created for the subject. | pass | A new section was added to the subject |
2.2.2 | When the moderator click edit page layout in the subject page and continue by clicking "Add new section" moderator add a new section detail and cancelA new section should be created for the subject | pass | Nothing happen the operation has been cancel |
2.3.1 | When the moderator clicks "Delete" in the Edit Subject Page Layout page, and confirms the confirmation message in the pop-up window, the section will be successfully deleted. | pass | The section has been deleted |
2.3.2 | When the moderator clicks "Delete" in the Edit Subject Page Layout page, and cancels the confirmation message in the pop-up window, the section will not be successfully deleted. | pass | The operation has been cancel |
2.4.1 | When the moderator clicks "Pending Submissions" in the subject page, the moderator should be able to view pending submissions submitted by student in the page | pass | Moderator was able to view pending submission |
2.4.2 | When the moderator clicks approve for one of the pending submission, the moderator should be able to see the approve article in the subject page | pass | Moderator was able to approve th article and the article is now in the subject list |
2.4.3 | When the moderator clicks delete for one of the pending submission, the pending article should be deleted from the page | pass | Moderator deleted the article and the article is gone |
2.5.1 | When the student clicks the subject on his/her Homepage, the student will be directed to the subject page and see all the related materials on the Subject page. | pass | The page was redirected to subject page |
2.5.2 | When the moderator clicks the subject on his/her Homepage, the moderator will be directed to the subject page and see all the related materials on the Subject page as well as other moderator-exclusive options. | pass | The page was redirected to subject page for moderator with new options |
3.1.1 | When the moderator/student clicks "Add new article" and click "Publish", the article should be created on the subject page. | pass | The article has been created |
3.1.2 | When the student clicks "Add new article" and clicks "Publish", the pending article should be created and the moderator should be ready to review. | pass | The article was added to pending article list |
3.2.1 | When the student clicks the "Edit Article" button on that article's page, makes a modification, and click Save, the article will be created as a pending article. | fail | The edited article was created as pending article(note but the created pending article cannot be approve) |
3.2.2 | When the moderator clicks the "Edit Article" button on that article's page, makes a modification, and clicks Save, the article will be created and published directly. | pass | The article was edited |
3.2.3 | When the moderator clicks the "Edit Article" button on that article's page, makes a modification, but clicks Cancel, the article will not be created. | pass | The operation has been cancel |
3.3.1 | When the moderator clicks the "Edit Article" button on that article's page, add or delete a new tag, the tag should be added to the article. | pass | A new tag was added to the article |
3.3.2 | When the student clicks the "Edit Article" button on that article's page, add or delete a new tag, the article should be added as a pending article for the moderator to review. | fail | The article was created as pending article(note but the created pending article cannot be approve) |
3.4.1 | When the moderator clicks the "Pending Article Submission" button on the Subject page, the moderator will see a list of all the current pending articles on that subject. | pass | Moderator can see list of pending article |
3.5.1 | When the moderator clicks approve for one of the pending submission, the moderator should be able to see the approve article in the subject page | pass | Moderator was able to approve the article and the article was added to the list |
3.5.2 | When the moderator clicks delete for one of the pending submissions, the pending article should be deleted from the page. | pass | Moderator was able to delete the article |
3.6.1 | When the moderator clicks the "Reject" button of a pending article on the Pending Articles Submission page, the pending article will be rejected and will not be published. | pass | Moderator has rejected an article and is not being added |
3.7.1 | When the moderator clicks search(SWEN90014) and types some content in the search bar, the related articles should be shown in the search list. | fail | The article list appear.(note the search can only able to find articles based on the tag) |
3.7.2 | When the moderator clicks search and types some content in the search bar and chooses the type of the content, the related articles should be shown in the search list. | fail | The article list appear ((note the search can only able to find articles based on the tag) |
3.8.1 | When the student/moderator searches the tags in the search bar, the student/moderator can find all articles tagged with the target tag. | pass | The article list appear if it is search with the tag |
4.1.1 | When the student/moderator type comment and post, the comment should be shown on the article page | fail | The comment can be added in recently created article but was not able to added in other type of article |
4.2.1 | When the student/moderator clicks the "Delete" button on his/her own comment, the comment will be successfully deleted. | fail | Created comment cannot be deleted |
4.3.1 | When the student/moderator click "reply" and type content and click "Post", the comment should be shown on the article page | fail | Comment can be reply if there is the comment that is created but due to some comment function not working fully hard to test the full scope |
5.1.1 | When the student/moderator goes to his/her Homepage, all the subjects enrolled/moderated by the student/moderator will be listed there. | pass | All the subject that is enrolled in or moderate by can be found |
8.1.1 | When the student/moderator clicks profile on the right side of the navigation bar, the student/moderator should be able to view the published and pending articles that they did. | pass | Moderator and student can see the publish and pending list |