diff --git a/doc/sprint4/NFR.pdf b/doc/sprint4/NFR.pdf new file mode 100644 index 00000000..77931327 Binary files /dev/null and b/doc/sprint4/NFR.pdf differ diff --git a/doc/sprint4/RPM.md b/doc/sprint4/RPM.md new file mode 100644 index 00000000..888bc59f --- /dev/null +++ b/doc/sprint4/RPM.md @@ -0,0 +1,120 @@ +# Release Plan + +## Release Name: Course_Matrix_V1.5.0 + +## 1. Release Objectives for Sprint 4 + +### 1.1 Goals + +- Refine timetable features + + - Enhance timetable UI + - Resolve any known bugs + - Timetable share + - Timetable compare + - Cap number of user timetables + - Timetable favourites + - Fix timetable generation flow + +- Build upon AI-powered assistant: + + - AI Chatbot can various timetable functions + - AI Chatbot refinement. + - Resolve any potential bugs in chatbot. + +- Project Deployment: + - Project has a usable dockerfile + - Project is running on a VM instance + - Project on update is automatically tested + - Project auto redeploys on update +- Unit Testing: + - Project functions (frontend and backend) will have and pass unit/integration tests written for them + +### 1.2 Metrics for Measurement + +- **Timetable Management** + + - Users can generate, create, modify, and delete timetables and event entries without errors. + - Timetable UI has been enhanced with newest design + - Timetables can be shared between users + - Timetables can be compared to one another + - Cap number of times tables per user + - Timetables can be favourited + - Timetable generate will not have overlapping timetable entries + +- **AI Assistant Features** + + - AI can be queried to generate timetables, delete timetables, show user timetables and more. + +- **Deployment Features** + - Project when deployed is deployed using a docker image + - Project when deployed is accessible online on a virtual Machine + - Project when updated is automatically unit tested + - Project when updated and passing unit tests is auto-redeployed +- **Unit Testing** +- Project functions are unit/integration tested so that their behaviour is clear and potential bugs are caught +- Project functions passes unit/integration tests so bug free functionality is ensured + +## 2. Release Scope + +- **Timetable Management** + + - Share your timetable with other users + - Favourite timetables for quick access + - Compare your timetable with other timetables + - Update and refine timetable UI + +- **AI Assistant** + + - AI-Powered timetable generation, deletion, and queries + +- **Deployment** + + - Project runs on a docker image + - Project is accessible on the web while running on a VM instance + - Project on update is automatically tested + - Project auto redeploys on update that passes tests + +- **Unit Testing** + - Project functions (frontend and backend) are unit/integration tested + +### 2.2 Excluded Features + +- Currently no excluded features this sprint + +### 2.3 Bug Fixes + +- Fix text highlight on edit username +- Creating timetable with same name causes user to be stuck in loading screen +- Semester button non functional +- Timetable generation sometimes doesn’t generate all meeting sections (and no error msg) +- Generate flow cannot edit manually after generation +- Timetable only generate partially +- Fix time strings sent to timetable generate +- Timetable title max char limit +- Reading week inclusion +- AI hallucinating courses +- Favourite not functional +- Last edited not being updated properly +- Hide restriction config for manual flow & prevent modification of restrictions in edit flow +- Add select all button +- Fix misc. Bugs in generation flow +- Hotfix 1.0.5 Restriction form type toggle persists old values +- Deployment timezone being incorrect +- Fix frontend unit test mocking + +### 2.4 Non-Functional Requirements + +- **Testing** + + - Further integration and unit tests need to be added for both our frontend and backend + +- **CI/CD Workflow** + - We need a CI/CD pipeline for our application so that only the latest functional version of our application is running at all times. + +### 2.5 Dependencies and Limitations + +- The AI assistant relies on querying an external vector database and OpenAI. Bothe of these are online resources so if they are down our feature will be down as well. +- The Timetable relies solely on the internal course database and installed dependencies. It does not fetch web-based content. +- Unit testing relies solely on internal functions and installed dependencies. It does not fetch any web-based content. +- The deployment relies on fetching the latest project version from github and (if it passes all unit tests) deploys the latest version on our google cloud virtual machine instance using docker hub storing the various images of our application. diff --git a/doc/sprint4/System Design.pdf b/doc/sprint4/System Design.pdf new file mode 100644 index 00000000..5df9978c Binary files /dev/null and b/doc/sprint4/System Design.pdf differ diff --git a/doc/sprint4/burndown.pdf b/doc/sprint4/burndown.pdf new file mode 100644 index 00000000..d3c098dc Binary files /dev/null and b/doc/sprint4/burndown.pdf differ diff --git a/doc/sprint4/images/Blocked_ticket.png b/doc/sprint4/images/Blocked_ticket.png new file mode 100644 index 00000000..a74939af Binary files /dev/null and b/doc/sprint4/images/Blocked_ticket.png differ diff --git a/doc/sprint4/images/Blocking_tickets.png b/doc/sprint4/images/Blocking_tickets.png new file mode 100644 index 00000000..cc7ce174 Binary files /dev/null and b/doc/sprint4/images/Blocking_tickets.png differ diff --git a/doc/sprint4/images/Burndown.png b/doc/sprint4/images/Burndown.png new file mode 100644 index 00000000..7665826d Binary files /dev/null and b/doc/sprint4/images/Burndown.png differ diff --git a/doc/sprint4/images/JIRA_Backlog.png b/doc/sprint4/images/JIRA_Backlog.png new file mode 100644 index 00000000..2e4b70c2 Binary files /dev/null and b/doc/sprint4/images/JIRA_Backlog.png differ diff --git a/doc/sprint4/images/Ticket_Description_and_Child_Issue.png b/doc/sprint4/images/Ticket_Description_and_Child_Issue.png new file mode 100644 index 00000000..9f0fe4df Binary files /dev/null and b/doc/sprint4/images/Ticket_Description_and_Child_Issue.png differ diff --git a/doc/sprint4/images/Ticket_Detail.png b/doc/sprint4/images/Ticket_Detail.png new file mode 100644 index 00000000..e909a2d3 Binary files /dev/null and b/doc/sprint4/images/Ticket_Detail.png differ diff --git a/doc/sprint4/images/Ticket_Workflow.png b/doc/sprint4/images/Ticket_Workflow.png new file mode 100644 index 00000000..52bc8283 Binary files /dev/null and b/doc/sprint4/images/Ticket_Workflow.png differ diff --git a/doc/sprint4/images/account_schema.png b/doc/sprint4/images/account_schema.png new file mode 100644 index 00000000..a82bbbeb Binary files /dev/null and b/doc/sprint4/images/account_schema.png differ diff --git a/doc/sprint4/images/course_filter.png b/doc/sprint4/images/course_filter.png new file mode 100644 index 00000000..2898b1bc Binary files /dev/null and b/doc/sprint4/images/course_filter.png differ diff --git a/doc/sprint4/images/course_information.png b/doc/sprint4/images/course_information.png new file mode 100644 index 00000000..d871e1f7 Binary files /dev/null and b/doc/sprint4/images/course_information.png differ diff --git a/doc/sprint4/images/course_schema.png b/doc/sprint4/images/course_schema.png new file mode 100644 index 00000000..3fbed2f6 Binary files /dev/null and b/doc/sprint4/images/course_schema.png differ diff --git a/doc/sprint4/images/courses.png b/doc/sprint4/images/courses.png new file mode 100644 index 00000000..999815e0 Binary files /dev/null and b/doc/sprint4/images/courses.png differ diff --git a/doc/sprint4/images/image.png b/doc/sprint4/images/image.png new file mode 100644 index 00000000..5ec3c7ac Binary files /dev/null and b/doc/sprint4/images/image.png differ diff --git a/doc/sprint4/images/user_delete.png b/doc/sprint4/images/user_delete.png new file mode 100644 index 00000000..227b1aad Binary files /dev/null and b/doc/sprint4/images/user_delete.png differ diff --git a/doc/sprint4/images/user_edit.png b/doc/sprint4/images/user_edit.png new file mode 100644 index 00000000..78424513 Binary files /dev/null and b/doc/sprint4/images/user_edit.png differ diff --git a/doc/sprint4/iteration-04.plan.md b/doc/sprint4/iteration-04.plan.md new file mode 100644 index 00000000..7223abfa --- /dev/null +++ b/doc/sprint4/iteration-04.plan.md @@ -0,0 +1,156 @@ +# Course Matrix + +## Iteration 04 + +- **Start date**: 03/21/2025 +- **End date**: 04/04/2025 + +## 1. Process + +### 1.1 Roles & Responsibilities + +#### Epic 1: Scheduler + +**Team Members:** Austin, Minh, and Thomas + +- Develop a calendar interface that allows users to favourite their calendars. +- Develop an interface that allows users to share their calendars with one another. +- Develop an algorithm that allows users to compare two different timetables together. + +#### Epic 2: AI Assistant + +**Team Members:** Kevin + +- Develop an AI-powered chat interface that can create, delete, and show user timetables. +- Refine AI-powered chat interface so that querying for database information is more reliable and understandable + +- **Note taking & Documentation**: Minh, Masahisa, and Thomas + - Taking notes during stand-ups + - Create sprint 4 documentation: iteration-plan-04, RPM, and sprint-04 review + - Update System Design Document + +In addition to their specific roles, all team members have a collective responsibility to support and assist other team members to ensure that the goals (listed in section 2.1) are achieved and develop a working prototype. + +#### Epic 3: Deployment + +**Team Members:** Masahisa + +- Create a dockerfile such that our application can be run on a docker image with application setup being done automatically. +- Ensure that our application’s docker image runs on a VM instance accessible on the web. +- Ensure that our deployed project automatically redeploys when a new version of our application is pushed that passes all unit testing. +- Ensure that our application images are stored on dockerhub with a version tag and a master branch holding the latest version. + +#### Epic 4: Unit Testing + +**Team Members:** Austin, Minh, Thomas, Kevin + +- Create unit tests for our application functions (timetable, ai assistant, user stories, etc.) such that their functionality is clear and bug free. + +#### 1.2 Events + +- **Initial planning meeting**: + + - Location: Virtual + - Time: 3/22/2025 + - Purposes: + - Go over the sprint 4 requirements + - Define tasks and responsibilities for each team member + +- **Stand up meeting**: + + - Location: Online or in-person depending on members availability + - Time: Every Tuesday from 12 pm to 1 pm, Thursday and Sunday from 9 pm to 10 pm + - Purposes + - Progress updates: What has each member done since the last stand-up + - Determine the next steps and deadlines + - Discuss current blockers and possible solutions + +- **Final review meeting** + - Location: Online + - Time: 4/04/2025 + - Purposes: + - Review features and deliverables implemented in sprint 4 + - Determine changes that need to be made in sprint 4 + +#### 1.3 Artifacts + +- Our team will track the progress through Jira + + - Each user story will be uploaded to Jira as a ticket: + + - Categorized in the backlog by its epic, and execution sprint + + ![JIRA Backlog](./images/JIRA_Backlog.png) + + - Ticket details include: estimated story point to determine its priority, assignees + + ![Ticket Detail](./images/Ticket_Detail.png) + + - Tickets of large user stories will be broken down into smaller child issues + + ![Ticket Description and Child Issue](./images/Ticket_Description_and_Child_Issue.png) + + - Each ticket will also show: + + - Other tickets blocked by it + + ![Blocked tickets](./images/Blocked_ticket.png) + + - Other tickets blocking it + + ![Blocking tickets](./images/Blocking_tickets.png) + + - Additional tasks required during the development process will also be submitted as a task ticket on JIRA for tracking. + - Students or groups of students will be assigned first to epic and then to the specific user story. + - Workflow + + ![Ticket Workflow](./images/Ticket_Workflow.png) + +- Furthermore, we will implement a Burndown Chart, which will be included as `burndown.pdf` by the end of the sprint. This chart will also feature comments on the sprint's progress and a velocity comparison. +- Below is an example Burndown Chart from Sprint 0: + +![Burndown Chart](./images/Burndown.png) + +## 2. Product + +#### 2.1 Goal and Tasks + +**1. Develop product features for the product demo:** + +- _Epic 1: Scheduler_ + + - Timetable Compare: [SCRUM-62](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-62) + - Timetable Favourite: [SCRUM-57](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-57) + - Timetable Export/Share: + [SCRUM-58](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-58) + +- _Epic 2: AI Assistant_ + + - Delete confirmation for chatbot: + [SCRUM-148](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-148) + - Prevent Chatbot from creating more than 1 timetable at once: + [SCRUM-149](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-149) + +- _Epic 3: CI/CD Pipeline_ + - Project Deployment: + [SCRUM-130](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-130) + - Assignment 2 Completion: [SCRUM-163](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-163) + +**3. Create sprint 4 documentation:** +[SCRUM-176](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-176) + +#### 2.2 Artifacts + +### Pages/Features + +#### Scheduler + +- Option to favourite timetables for quick access. +- Option to share/export timetable to other users +- Option to compare two separate timetables +- Enhance frontend UI to be more usable + +#### AI Assistant + +- Ability to generate, delete, create, view timetables and more using AI chatbot +- Deleting anything with chatbot must only be done after another user confirmation diff --git a/doc/sprint4/schedule.pdf b/doc/sprint4/schedule.pdf new file mode 100644 index 00000000..1983023d Binary files /dev/null and b/doc/sprint4/schedule.pdf differ diff --git a/doc/sprint4/sprint-04.review.md b/doc/sprint4/sprint-04.review.md new file mode 100644 index 00000000..35cd651a --- /dev/null +++ b/doc/sprint4/sprint-04.review.md @@ -0,0 +1,101 @@ +# Course Matrix/term-group-project-c01w25-project-course-matrix + +## Iteration 04 - Review & Retrospect + +When: 4/04/2025 at 9:00 pm + +Where: Online + +## Process - Reflection + +In Sprint 4, our team focused on finishing up any trailing features and then refining our application so that it has as few bugs as possible. Additionally, we refined our UI and added additional tests to resolve any potential bugs. +Our team successfully generated and implemented the following features: + +- Refined timetable operations via AI +- Timetable compare +- Timetable share +- Timetable favourite +- Additional unit/integration testing our application + +By the end of sprint 4 we were able to complete all of our features, with the majority of our time this sprint spent finding and resolving bugs or adding additional unit/integration tests. + +Our timetable is now fully functional, now with additional features. Users can now share their timetables with other users using their emails. Additionally, users can favourite and compare their timetables. + +Our AI assistant’s functionality has been expanded upon and refined. Now, when sensitive operations are performed by our AI, various safeguards have been added (e.g. when deleting a timetable a further confirmation must be done). Additionally, various queries that could potentially break the chatbot have been patched. + +The setup for deploying our application has been completed, with the latest functional version of our application already deployed on google cloud with a CI/CD pipeline. Currently, if a new change is pushed to main and it passes all tests the application is then deployed on our google cloud virtual machine. + +In conclusion, during sprint 4 our application has been finished and further refined. + +### Decisions that turned out well + +1. **Finishing User Stories** + +One decision that turned out well for us was finishing as many user stories as possible in the previous sprints. By doing this we were able to focus the majority of our efforts this sprint in refining all our user stories making our application the best possible version of itself. We resolved countless bugs, pushed QOL features, and optimized our application greatly. + +2. **Rehearsing our Presentation** + +For our sprint 4 presentation, we decided to complete both the slides and the script ahead of time. This allowed us to rehearse our presentation multiple times and refine it to perfection. Due to this our presentation was excellent. + +### Decisions that did not turn out as well as we hoped + +1. **Leaving Sprint 4 Deliverables for Later** + +During sprint 4 we left completing our deliverables for later (e.g. NFR). We thought that focusing on refining our application should come first. This meant that we had to scramble to complete our sprint 4 documentations near the end of the sprint. This led to potential oversights in our documentation. + +2. **We didn’t use TDD** + +We set up our tests for our application quite late into its development. This meant that almost all of our tests were redundant, with us discovering bugs manually and the tests only being useful in defining our application’s behaviour. + +## Product - Review + +#### Goals and/or tasks that were met/completed + +- Fix text highlight on edit username [SCRUM-131](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-131) +- Project deployment [SCRUM-130](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-130) +- Timetable sharing [SCRUM–58](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-58) +- Timetable favourite [SCRUM-57](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-57) +- Timetable Compare [SCRUM-62](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-62) +- Timetable Frontend Enhancements [SCRUM-145](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-145) +- Fix creating Timetable with same name causes user to be stuck in loading screen [SCRUM-146](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-146) +- Fix semester button non-functional [SCRUM-147](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-147) +- Delete confirmation for chatbot [SCRUM-148](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-148) +- Prevent chatbot from creating more than 1 timetable in a single cmd [SCRUM-149](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-149) +- Fix timetable generate flow cannot edit manually after generation [SCRUM-150](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-150) +- Fix timetable generation only generate partially [SCRUM-153](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-153) +- Fix time strings sent to timetable generate [SCRUM-154](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-154) +- Timetable generation refinement [SCRUM-155](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-155) +- Timetable title max char limit [SCRUM-156](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-156) +- Reading week inclusion for timetable [SCRUM-157](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-157) +- Fix AI Hallucinating courses [SCRUM-158](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-158) +- Timetables limit [SCRUM-159](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-159) +- Fix favourite non functional [SCRUM-161](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-161) +- Assignment 2 Completion [SCRUM-163](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-163) +- Hide restriction config for manual flow & prevent modification of restrictions in edit flow [SCRUM-166](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-166) +- Comparing shared timetables [SCRUM–167](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-167) +- Add select all button [SCRUM-169](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-169) +- Clean UserMenu so there are no useless fields [SCRUM-170](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-170) +- Fix Misc. BUgs in Generation Flow [SCRUM-171](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-171) +- Image improvements + logo + frontend tweaks [SCRUM-168](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-168) +- Presentation [SCRUM-172](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-172) +- Fix Restriction for type toggle persists old values [SCRUM-173](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-173) +- Deployment Time Zone Hotfix [SCRUM-174](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-174) +- Refactor constants.ts [SCRUM-177](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-177) +- Finish auth.test.ts tests [SCRUM-178](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-178) +- Fix frontend unit test mocking [SCRUM-179](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-179) +- Add more frontend tests [SCRUM-175](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-175) +- Backend integration tests [SCRUM-180](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-180) +- Speed up test execution by running all tests serially in the current process [SCRUM-181](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-181) +- Add some more frontend integration tests [SCRUM-182](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-182) +- Organize backend tests into unit and integration tests [SCRUM-183](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-183) +- Update REAME setup [SCRUM–184](https://cscc01-course-matrix.atlassian.net/browse/SCRUM-184) + +#### Goals and/or tasks that were planned but not met/completed + +We completed everything and are the best team. + +## Meeting Highlights + +We have decided to do the following from here on out: + +1. Study hard for our CSCC01 final exam.