Repository: AY2425S2-CS2103T-T16-3/tp
Pull request #248: Update UG and DG for schedule
Author: login: DanielJames0302
Created: 2025-04-07T12:06:15Z | Merged: 2025-04-07T14:36:08Z

My updates:
In Developer Guide:
 - Write implementation part for add, delete, clear, list commands for candidates and schedules. 
 - Write manual testing for schedule commands
 - Add plan enhancements for schedule features
 - Add Acknowledge section

In User Guide:
 - Change CANDIDATE_INDEX to INDEX
 - Add SCHEDULE_INDEX
 - Specifiy contraints on date and duration of interview schedule
 - Add some info regarding delete candidate command, of which the associated schedule of a deleted candidate is not gonna be automatically deleted
 


Diff:
diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md
index 67f8b5e08ff..be2a71cd617 100644
--- a/docs/DeveloperGuide.md
+++ b/docs/DeveloperGuide.md
@@ -14,7 +14,21 @@ pageNav: 3
 
 ## **Acknowledgements**
 
-_{ list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well }_
+This project, ***QuickHire***, is built upon the *Address Book Level 3 (AB3)* originally developed by the [SE-EDU initiative](https://se-education.org/). We extend our heartfelt thanks to the AB3 developers for laying the foundation that shaped our project’s structure and functionality.
+
+We also gratefully acknowledge the creators of the following resources, libraries, and tools that were instrumental in bringing ***QuickHire*** to life:
+
+- AB3 Codebase
+
+- JavaFX
+
+- JUnit
+
+- Jackson Library
+
+Their contributions and expertise made our work possible, and we deeply appreciate their support.
+
+Additionally, we would like to acknowledge StackOverflow. We had some inspiration for some of our features from the valuable answers provided by experienced coders in the platform.
 
 --------------------------------------------------------------------------------------------------------------------
 
@@ -127,6 +141,7 @@ The `Model` component,
 * stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).
 * stores the currently 'selected' `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList<Person>` that can be 'observed' e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.
 * stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.
+* stores `Schedule` objects as a separate list which is exposed to outsiders as an unmodifiable `ObservableList<Schedule>` that can be observed.
 * does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components)
 
 <box type="info" seamless>
@@ -146,7 +161,7 @@ The `Model` component,
 
 The `Storage` component,
 * can save both address book data and user preference data in JSON format, and read them back into corresponding objects.
-* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed).
+* inherits from `AddressBookStorage`, `UserPrefStorage`, and `ScheduleBoardStorage` which means it can be treated as either of the three (if only the functionality of only one is needed).
 * depends on some classes in the `Model` component (because the `Storage` component's job is to save/retrieve objects that belong to the `Model`)
 
 ### Common classes
@@ -159,6 +174,60 @@ Classes used by multiple components are in the `seedu.address.commons` package.
 
 This section describes some noteworthy details on how certain features are implemented.
 
+<box type="info" header="**Note**">
+
+`Candidate` are referred to as `Person` throughout the codebase due to legacy design choices.
+</box>
+
+### Add Candidate and Add Interview Schedule feature
+The Add Candidate and Add Schedule features both adhere to the Logic Component format described [above](#logic-component) and share a similar implementation structure. 
+As an example, below is the sequence diagram for the Add Candidate command when the user inputs:
+`add n/Vish p/1293123 e/sample@domain.com a/213123 street j/ProData guy l/Rejected`
+<puml src="diagrams/AddSequenceDiagram.puml" width="650" />
+
+<box type="info" header="**Note**">
+
+The implementation of the Add Schedule feature is similar to that of the example given above. However, instead of calling `hasPerson(...)`, `hasJobRoles(...)`, and `addPerson(...)` methods,
+the methods `hasSameDateTime(...)` and `addSchedule(...)`  in Model component will be called for adding a schedule.
+</box>
+
+### Delete Candidate and Delete Interview Schedule feature
+The Delete Candidate and Delete Schedule features both adhere to the Logic Component format described [above](#logic-component) and share a similar implementation structure.
+As an example, below is the sequence diagram for the Delete Candidate command when the user inputs:
+`delete 1`
+<puml src="diagrams/DeleteSequenceDiagram.puml" width="650" />
+
+<box type="info" header="**Note**">
+
+The implementation of the Delete Schedule feature is similar to that of the example given above. However, instead of calling `getFilteredPersonList()` and `deletePerson(...)` methods,
+the methods `getFilteredScheduleList()` and `deleteSchedule(...)`  in Model component will be called for deleting a schedule.
+</box>
+
+### List Candidates/Interview Schedules and Clear Candidates/Interview Schedules feature
+The List and Clear Candidate/Interview Schedules commands deviate slightly from the Logic Component format [above](#logic-component) because they require no arguments and thus bypass the `Parser`. Since both commands follow the same flow, we’ll illustrate only the sequence diagram for the Clear Candidates command when the user enters:
+`clear`
+<puml src="diagrams/ClearSequenceDiagram.puml" width="650" />
+
+Main execution steps:
+
+1. User Input: The user enters `clear` to clear all candidates.
+
+2. Parsing: `LogicManager` calls `parseCommand("clear")` on `AddressBookParser`.
+
+3. Command Creation: `AddressBookParser` recognizes the `clear` command and directly instantiates `ClearCommand` (no arguments to parse).
+
+4. Execution: `LogicManager` invokes `execute(model)` on the `ClearCommand`.
+
+5. Listing: `ClearCommand` clear the current candidate list and updates the model.
+
+6. Result: `ClearCommand` returns a `CommandResult` indicating success, which `LogicManager` then propagates back to the UI.
+
+<box type="info" header="**Note**">
+
+The implementation of the List Candidates feature is similar to that of the example given above. However, instead of `setAddressBook(...)` method of the Model Component being called, `updateFilteredPersonList(...)` is called. 
+For Listing and Clearing schedules, the methods `updateFilteredScheduleList(...)` and `setScheduleBoard(...)` in Model component will be called respectively.
+</box>
+
 ### Storing data manually
 
 The `Storage` component is used to save data automatically whenever a change to the data occurs. While the same
@@ -481,6 +550,8 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli
 
     * 2c1. QuickHire shows an error message.
 
+   Use case ends.
+
 ---
 
 **Use Case: UC06 - Adding remarks to an applicant**
@@ -576,7 +647,7 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli
 ---
 **Use case: UC11 - Listing interview schedules**
 
-Similar to use case 1 except for using to list schedules
+Similar to use case 01 except for using to list schedules
 
 **Use case: UC12 - Adding an interview schedule**
 
@@ -606,7 +677,7 @@ Similar to use case 03 except for using to delete an interview schedule.
 **Use Case: UC14 - Edit an interview schedule**
 
 **MSS**
-1.  User lists interview schedules (UC11)
+1.  User <u>lists interview schedules (UC11)<u/>
 1.  User requests to edit details of a specific schedule in the list
 1.  QuickHire edits the specified details
 
@@ -627,6 +698,8 @@ Use case ends.
 * 2c. The given parameters are invalid.
 
    * 2c1. QuickHire shows an error message.
+  
+  Use case ends
 
 ---
 
@@ -719,8 +792,51 @@ testers are expected to do more *exploratory* testing.
    1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)<br>
       Expected: Similar to previous.
 
-1. _{ more test cases …​ }_
+### Adding a schedule
+
+1. Adding a schedule that does not overlap with existing schedule
+
+   1. Prerequisites: Interview schedule with date and duration `2025-05-03 09:00 10:00` exists and there is at least 1 candidate in the candidate list.
+   1. Test case: `sadd c/1 s/2025-05-03 15:00 17:00 m/online` <br>
+      Expected: Schedule with date and duration `2025-05-03 15:00 17:00`, mode `online` along with the name and email of first candidate is created. Details of the schedule created is shown in the message box. Schedule board shows newly created schedule.
+
+1. Adding a schedule that overlap with existing schedule
+   1. Prerequisites: Interview schedule with date and duration `2025-05-16 14:00 16:00` exist and there are at least 1 candidate in the candidate list.
+   1. Test case: `sadd c/1 s/2025-05-16 14:00 15:00 m/online` <br>
+      Expected: Schedule is not added to the schedule board. Error message is shown in the message box.
+
+### Editing a schedule
+
+1. Editing one or more details of a schedule
+
+   1. Prerequisites: Interview schedule with date and duration `2025-05-03 15:00 17:00` does not exist and the mode of first interview schedule in the list is online.
+   1. Test case: `sedit 1 s/2025-05-03 15:00 17:00`<br>
+   
+      Expected: Date and duration of the first schedule is changed to `2025-05-03 15:00 17:00`. Details of the edited schedule is shown in the message box. Schedule board shows newly edited schedule.
+   1. Test case: `sedit 1 m/offline`<br>
+   
+      Expected: Mode of the first schedule is changed to `offline`. Details of the edited schedule is shown in the message box. Schedule board shows newly edited schedule.
+
+1. Editing date and duration of a schedule to clash with another schedule in the schedule board
 
+   1. Prerequisites: Schedule with date and duration `2025-05-04 14:00 15:00` exists
+   1. Test case: `sedit 1 s/2025-05-04 14:00 14:30` <br>
+
+      Expected: Date and duration of first schedule is not updated. Error message is shown in the message box.
+### Deleting a schedule
+
+1. Deleting a schedule while all schedules are being shown
+
+   1. Prerequisites: List all schedule using the `slist` command. Multiple schedules in the list.
+
+   1. Test case: `sdelete 1`<br>
+      Expected: First schedule is deleted from the list. Details of the deleted schedule shown in the status message.
+
+   1. Test case: `sdelete 0`<br>
+      Expected: No schedule is deleted. Error details shown in the status message.
+
+   1. Other incorrect delete commands to try: `sdelete`, `sdelete x`, `...` (where x is larger than the list size)<br>
+      Expected: Similar to previous.
 ### Saving data
 
 1. Dealing with missing/corrupted data files
@@ -750,3 +866,24 @@ testers are expected to do more *exploratory* testing.
 
 3. _{ more test cases …​ }_
 
+
+## **Appendix: Effort**
+* **Difficulty level:** 
+QuickHire is considerably challenging because of the integration of additional entities and the complexity of managing the relationships between them.
+
+* **Challenges faced:** 
+  - Additional entity: The project introduces new entity `Schedule` and connects it with `Person` through `Name` and `Email`.
+  - Feature Development: To support the new Schedule entity, we had to develop several new core features, such as adding schedule, editing schedule, deleting schedule, listing schedule and clearing schedule.
+  - User Interface Enhancements: To make the application more intuitive and user‑friendly, we revamped the GUI—adding dedicated schedule sections and refining the overall design for a smoother, more cohesive experience.
+
+* **Effort required:**
+  - We estimate the project demanded as equal as the anticipated effort because of the added entities and expanded features. 
+  To ensure robustness and maintainability, we prioritized comprehensive testing and strict adherence to coding standards. Driven by passion and a commitment to learning, we consistently went the extra mile throughout development.
+* **Achievements:** 
+  - Introduce new schedule features that allow user to create and maintain interview schedules for candidates.
+
+## **Appendix: Planned Enhancements**
+Team size: 5
+
+1. Restrict interview dates to a reasonable range. Currently, users can schedule interviews for dates very far in the past or future. We plan to apply a constraint that the user may only schedule interview date that is within 20 years before or after current date.
+2. The current implementation cannot verify whether an interview that spans midnight (i.e., crosses two consecutive days) has a duration between 15 minutes and 4 hours. We plan to add a check to ensure that any interview for the same candidate crossing into the next day also falls within that 15‑minute to 4‑hour window.
diff --git a/docs/UserGuide.md b/docs/UserGuide.md
index c2d15b93bbf..dedcc6fd163 100644
--- a/docs/UserGuide.md
+++ b/docs/UserGuide.md
@@ -146,7 +146,7 @@ Format: `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [j/JOB ROLE] [l/LAB
 * You can remove all the person’s tags by typing `t/` without specifying any tags after it.
 * You can remove a person’s remarks by typing `r/` without specifying any remarks after it.
 * You can remove a person’s interview schedule by typing `s/` without specifying any date time after it.
-
+* **Note**: When you edit a candidate’s name or email, their interview schedules will be updated automatically with the new information.
 Examples:
 *  `edit 1 p/91234567 e/johndoe@example.com s/10-02-2025 9:00` Edits the phone number, email address and interview schedule of the 1st person to be `91234567`, `johndoe@example.com`, `10-02-2025 9:00` respectively.
 *  `edit 2 n/Betsy Crower t/` Edits the name of the 2nd person to be `Betsy Crower` and clears all existing tags.
@@ -206,17 +206,18 @@ Examples:
 
 ### Deleting a person : `delete`
 
-Deletes the specified person from the address book.
+Deletes the specified candidate from the candidate list.
 
 Format: `delete INDEX`
 
-* Deletes the person at the specified `INDEX`.
-* The index refers to the index number shown in the displayed person list.
+* Deletes the candidate at the specified `INDEX`.
+* The index refers to the index number shown in the displayed candidate list.
 * The index **must be a positive integer** 1, 2, 3, …​
-
+* **Note**: Deleting a candidate won’t remove their interview schedules. We keep those schedules for record‑keeping so you can review past interviews. 
+* If you do need to delete them, use the sdelete command shown below.
 Examples:
-* `list` followed by `delete 2` deletes the 2nd person in the address book.
-* `find Betsy` followed by `delete 1` deletes the 1st person in the results of the `find` command.
+* `list` followed by `delete 2` deletes the 2nd candidate in the address book.
+* `find Betsy` followed by `delete 1` deletes the 1st candidate in the results of the `find` command.
 
 <a href="#quickhire-user-guide" class="ug-nav-top">[Go to top]</a>
 
@@ -265,8 +266,19 @@ A mode can only be Online, or Offline.<br>
 
 </box>
 
-* Adds the interview schedule of candidate specified at the `INDEX`. The index refers to the index number shown in the displayed person list. The index **must be a positive integer** 1, 2, 3, …​
-* `INTERVIEW_DATE_AND_DURATION` should be of the format: `yyyy-MM-dd HH:mm HH:mm`.
+* Adds the interview schedule of candidate specified at the `INDEX`. The index refers to the index number shown in the displayed candidate list. The index **must be a positive integer** 1, 2, 3, …​
+* `INTERVIEW_DATE_AND_DURATION`: Interview schedule for candidates
+  - Format: `yyyy-MM-dd HH:mm HH:mm`
+    - `yyyy-MM-dd`: date of the interview
+    - First `HH:mm` = start time
+    - Second `HH:mm` = end time
+  - Both start time and end time must fall on the same calendar day.
+  - Duration must be at least 15 minutes and no more than 4 hours.
+  - You may schedule interviews in the distant past or future—just as Google Calendar allows—to support record‑keeping and planning. The past schedules will be displayed in a lighter color in the schedule board.
+  - To schedule across midnight, split into two commands (one per day).
+* `MODE`: Format of the interview
+  - Either Online or Offline.
+  
 * All fields must be provided.
 
 Examples:
@@ -283,10 +295,20 @@ Format: `slist`
 
 Edits an existing interview schedule in the interview schedule board.
 
-Format: `sedit INDEX [s/INTERVIEW_DATE_AND_DURATION] [m/MODE]`
-
-* Edits the schedule at the specified `INDEX`. The index refers to the index number shown in the displayed schedule board. The index **must be a positive integer** 1, 2, 3, …​
-* `INTERVIEW_DATE_AND_DURATION` should be of the format: `yyyy-MM-dd HH:mm HH:mm`.
+Format: `sedit SCHEDULE_INDEX [s/INTERVIEW_DATE_AND_DURATION] [m/MODE]`
+
+* Edits the schedule at the specified `SCHEDULE_INDEX`. The schedule index refers to the index number shown in the displayed schedule board. The schedule index **must be a positive integer** 1, 2, 3, …​
+* `INTERVIEW_DATE_AND_DURATION`: Interview schedule for candidates
+   - Format: `yyyy-MM-dd HH:mm HH:mm`
+      - `yyyy-MM-dd`: date of the interview
+      - First `HH:mm` = start time
+      - Second `HH:mm` = end time
+   - Both start time and end time must fall on the same calendar day.
+   - Duration must be at least 15 minutes and no more than 4 hours.
+   - You may schedule interviews in the distant past or future—just as Google Calendar allows—to support record‑keeping and planning. The past schedules will be displayed in a lighter color in the schedule board.
+   - To schedule across midnight, split into two commands (one per day).
+* `MODE`: Format of the interview
+   - Either Online or Offline.
 * At least one of the optional fields must be provided.
 * Existing values will be updated to the input values.
 
@@ -299,11 +321,11 @@ Examples:
 
 Deletes the specified interview schedule from the interview schedule board.
 
-Format: `sdelete INDEX`
+Format: `sdelete SCHEDULE_INDEX`
 
-* Deletes the interview schedule at the specified `INDEX`.
-* The index refers to the index number shown in the displayed schedule board.
-* The index **must be a positive integer** 1, 2, 3, …​
+* Deletes the interview schedule at the specified `SCHEDULE_INDEX`.
+* The schedule index refers to the index number shown in the displayed schedule board.
+* The schedule index **must be a positive integer** 1, 2, 3, …​
 
 Examples:
 * `slist` followed by `sdelete 2` deletes the 2nd schedule in the schedule board.
@@ -421,7 +443,7 @@ Advanced users are welcome to update these data directly by editing those data f
 
 **Caution:**
 
-If your changes to the data files makes their format invalid, ***QuickHire*** will discard all data and start with empty data files at the next run.  Hence, it is recommended to take a backup of the files before editing it.
+If your changes to the data files makes their format invalid (e.g. having duplicates or invalid data format), ***QuickHire*** will discard all data and start with empty data files at the next run.  Hence, it is recommended to take a backup of the files before editing it.
 This can be done by either copying the two files mentioned, or by using the `save` command (See [Saving the data : `save`](#saving-the-data--save)).<br>
 
 Furthermore, certain edits can cause ***QuickHire*** to behave in unexpected ways (e.g., if a value entered is outside the acceptable range).
@@ -495,6 +517,9 @@ _Details coming soon ..._
    In this case, you want to rename it as `[JAR file location]/data/candidates_list.json` since you are importing data of potential candidates.
 1. Launch ***QuickHire*** again. If everything went well, you should be able to view the data from the file you imported in the application.<br>
 
+**Q**: The `slist` command seems not working?<br>
+**A**: In QuickHire v1.6, the slist command doesn’t affect the interview schedule display because search and sort features haven’t been implemented yet. Once those capabilities are added, you’ll see the schedule board updated.
+For now, if you navigate back to the original, unfiltered schedule board—which shows every entry—you can run `slist` there. Although you won’t notice any change until the search/sort functions arrive, that’s where the command will take effect.
 <box type="warning">
 
 **Caution**
@@ -549,12 +574,12 @@ If you wish to keep the old data file as well, create a separate backup of it (a
 | **Edit**                          | `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [j/JOB TITLE] [l/LABEL] [s/INTERVIEW_SCHEDULE] [r/REMARK] [t/TAG]…​` | `edit 2 n/James Lee e/jameslee@example.com`                                                                                                          |
 | **Find**                          | `find KEYWORD [MORE_KEYWORDS]`                                                                                            | `find James Jake`                                                                                                                                    |
 | **Remark**                        | `remark INDEX r/REMARK`                                                                                                   | `remark 1 r/Has experience using JEE`, `remark 7 r/`                                                                                                 |
-| **Save**                          | `save [c/FILE_TO_SAVE_CANDIDATES] [s/FILE_TO_SAVE_INTERVIEW_SCHEDULES] [/a] [/f]`                                        | `save c/past_candidates.json`, `save s/interview_schedule.json`, `save c/candidates_details.json s/interview_details.json /a /f`                     |
+| **Save**                          | `save [c/FILE_TO_SAVE_CANDIDATES] [s/FILE_TO_SAVE_INTERVIEW_SCHEDULES] [/a] [/f]`                                         | `save c/past_candidates.json`, `save s/interview_schedule.json`, `save c/candidates_details.json s/interview_details.json /a /f`                     |
 | **ViewStats**                     | `viewstats`                                                                                                               |                                                                                                                                                      |
 | **Add An Interview Schedule**     | `sadd c/INDEX s/INTERVIEW_DATE_AND_DURATION m/MODE`                                                                       | `sadd c/2 s/2025-03-15 15:00 16:00 m/online`                                                                                                         |
 | **Clear All Interview Schedules** | `sclear`                                                                                                                  |                                                                                                                                                      |
-| **Delete An Interview Schedule**  | `sdelete INDEX`                                                                                                           | `sdelete 3`                                                                                                                                          |
-| **Edit An Interview Schedule**    | `sedit INDEX [s/INTERVIEW_DATE_AND_DURATION] [m/MODE]`                                                                    | `sedit 1 s/2025-05-22 15:00 17:00 m/offline`                                                                                                         |
+| **Delete An Interview Schedule**  | `sdelete SCHEDULE_INDEX`                                                                                                  | `sdelete 3`                                                                                                                                          |
+| **Edit An Interview Schedule**    | `sedit SCHEDULE_INDEX [s/INTERVIEW_DATE_AND_DURATION] [m/MODE]`                                                           | `sedit 1 s/2025-05-22 15:00 17:00 m/offline`                                                                                                         |
 | **Add A Job Role**                | `addJ JOB ROLE`                                                                                                           | `addJ Product Tester`                                                                                                                                |
 | **Delete A Job Role**             | `deleteJ JOB ROLE`                                                                                                        | `deleteJ Front End Developer`                                                                                                                        |
 | **List All Job Roles**            | `listJ`                                                                                                                   |                                                                                                                                                      |
diff --git a/docs/diagrams/AddSequenceDiagram.puml b/docs/diagrams/AddSequenceDiagram.puml
new file mode 100644
index 00000000000..7878bb7a0ad
--- /dev/null
+++ b/docs/diagrams/AddSequenceDiagram.puml
@@ -0,0 +1,83 @@
+@startuml
+!include style.puml
+skinparam ArrowFontStyle plain
+
+box Logic LOGIC_COLOR_T1
+participant ":LogicManager" as LogicManager LOGIC_COLOR
+participant ":AddressBookParser" as AddressBookParser LOGIC_COLOR
+participant ":AddCommandParser" as AddCommandParser LOGIC_COLOR
+participant "a:AddCommand" as AddCommand LOGIC_COLOR
+participant "r:CommandResult" as CommandResult LOGIC_COLOR
+end box
+
+box Model MODEL_COLOR_T1
+participant "m:Model" as Model MODEL_COLOR
+end box
+
+[-> LogicManager : execute("add n/... p/... e/... a/... j/... l/...")
+activate LogicManager
+
+LogicManager -> AddressBookParser : parseCommand("add n/... p/... e/... a/... j/... l/...")
+activate AddressBookParser
+
+create AddCommandParser
+AddressBookParser -> AddCommandParser
+activate AddCommandParser
+
+AddCommandParser --> AddressBookParser
+deactivate AddCommandParser
+
+AddressBookParser -> AddCommandParser : parse("n/... p/... e/... a/... j/... l/...")
+activate AddCommandParser
+
+create AddCommand
+AddCommandParser -> AddCommand
+activate AddCommand
+
+AddCommand --> AddCommandParser :
+deactivate AddCommand
+
+AddCommandParser --> AddressBookParser : a
+deactivate AddCommandParser
+'Hidden arrow to position the destroy marker below the end of the activation bar.
+AddCommandParser -[hidden]-> AddressBookParser
+destroy AddCommandParser
+
+AddressBookParser --> LogicManager : a
+deactivate AddressBookParser
+
+LogicManager -> AddCommand : execute(m)
+activate AddCommand
+
+AddCommand -> Model : hasPerson(...)
+activate Model
+
+Model --> AddCommand
+deactivate Model
+
+AddCommand -> Model : hasJobRoles(...)
+activate Model
+
+Model --> AddCommand
+deactivate Model
+
+
+AddCommand -> Model : addPerson(...)
+activate Model
+
+Model --> AddCommand
+deactivate Model
+
+create CommandResult
+AddCommand -> CommandResult
+activate CommandResult
+
+CommandResult --> AddCommand
+deactivate CommandResult
+
+AddCommand --> LogicManager : r
+deactivate AddCommand
+
+[<--LogicManager
+deactivate LogicManager
+@enduml
diff --git a/docs/diagrams/ClearSequenceDiagram.puml b/docs/diagrams/ClearSequenceDiagram.puml
new file mode 100644
index 00000000000..da237b39a1e
--- /dev/null
+++ b/docs/diagrams/ClearSequenceDiagram.puml
@@ -0,0 +1,54 @@
+@startuml
+!include style.puml
+skinparam ArrowFontStyle plain
+
+box Logic LOGIC_COLOR_T1
+participant ":LogicManager" as LogicManager LOGIC_COLOR
+participant ":AddressBookParser" as AddressBookParser LOGIC_COLOR
+participant "c:ClearCommand" as ClearCommand LOGIC_COLOR
+participant "r:CommandResult" as CommandResult LOGIC_COLOR
+end box
+
+box Model MODEL_COLOR_T1
+participant "m:Model" as Model MODEL_COLOR
+end box
+
+[-> LogicManager : execute("clear")
+activate LogicManager
+
+LogicManager -> AddressBookParser : parseCommand("clear")
+activate AddressBookParser
+
+create ClearCommand
+AddressBookParser -> ClearCommand
+activate ClearCommand
+
+ClearCommand --> AddressBookParser
+deactivate ClearCommand
+
+
+AddressBookParser --> LogicManager :
+deactivate AddressBookParser
+
+LogicManager -> ClearCommand : execute(m)
+activate ClearCommand
+
+ClearCommand -> Model : setAddressBook(...)
+activate Model
+
+Model --> ClearCommand
+deactivate Model
+
+create CommandResult
+ClearCommand -> CommandResult
+activate CommandResult
+
+CommandResult --> ClearCommand
+deactivate CommandResult
+
+ClearCommand --> LogicManager : r
+deactivate ClearCommand
+
+[<--LogicManager
+deactivate LogicManager
+@enduml
diff --git a/docs/diagrams/ModelClassDiagram.puml b/docs/diagrams/ModelClassDiagram.puml
index be5e767108c..d71f59609d8 100644
--- a/docs/diagrams/ModelClassDiagram.puml
+++ b/docs/diagrams/ModelClassDiagram.puml
@@ -68,4 +68,5 @@ Phone -[hidden]right-> Address
 Address -[hidden]right-> Email
 
 ModelManager --> "~* filtered" Person
+ModelManager --> "~* filtered" Schedule
 @enduml


Reviews:
user: login: HarishB99
body: Just some minor suggestions  some of the phrasing in DG. Otherwise, LGTM!
state: CHANGES_REQUESTED
author_association: COLLABORATOR
submitted_at: 2025-04-07T12:48:54Z
user: login: ho-thanh-und
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-07T12:52:01Z
user: login: HarishB99
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-04-07T13:57:50Z
user: login: GauhVish
body: LGTM!
state: APPROVED
author_association: NONE
submitted_at: 2025-04-07T14:20:43Z
user: login: HarishB99
body: LGTM!
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-04-07T14:35:31Z

Review comments:
diff_hunk: @@ -14,7 +14,19 @@ pageNav: 3
 
 ## **Acknowledgements**
 
-_{ list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well }_
+This project, *QuickHire*, is built upon the *Address Book Level 3 (AB3)* originally developed by the [SE-EDU initiative](https://se-education.org/). We extend our heartfelt thanks to the AB3 developers for laying the foundation that shaped our project’s structure and functionality.
+
+We also gratefully acknowledge the creators of the following resources, libraries, and tools that were instrumental in bringing EduVault to life:
+
+- AB3 Codebase
+
+- JavaFX
+
+- JUnit
+
+- Jackson Library
+
+Their contributions and expertise made our work possible, and we deeply appreciate their support.
path: docs/DeveloperGuide.md
user: login: HarishB99
body: ```suggestion
This project, ***QuickHire***, is built upon the *Address Book Level 3 (AB3)* originally developed by the [SE-EDU initiative](https://se-education.org/). We extend our heartfelt thanks to the AB3 developers for laying the foundation that shaped our project’s structure and functionality.

We also gratefully acknowledge the creators of the following resources, libraries, and tools that were instrumental in bringing ***QuickHire*** to life:

- AB3 Codebase

- JavaFX

- JUnit

- Jackson Library

Their contributions and expertise made our work possible, and we deeply appreciate their support.

Additionally, we would like to acknowledge StackOverflow. We had some inspiration for some of our features from the valuable answers provided by experienced coders in the platform.
```
created_at: 2025-04-07T12:46:01Z
author_association: COLLABORATOR
diff_hunk: @@ -146,7 +159,7 @@ The `Model` component,
 
 The `Storage` component,
 * can save both address book data and user preference data in JSON format, and read them back into corresponding objects.
-* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed).
+* inherits from both `AddressBookStorage`, `UserPrefStorage`, and `ScheduleBoardStorage` which means it can be treated as either one (if only the functionality of only one is needed).
path: docs/DeveloperGuide.md
user: login: HarishB99
body: ```suggestion
* inherits from `AddressBookStorage`, `UserPrefStorage`, and `ScheduleBoardStorage` which means it can be treated as either of the three (if only the functionality of only one is needed).
```
created_at: 2025-04-07T12:46:20Z
author_association: COLLABORATOR
diff_hunk: @@ -14,7 +14,19 @@ pageNav: 3
 
 ## **Acknowledgements**
 
-_{ list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well }_
+This project, *QuickHire*, is built upon the *Address Book Level 3 (AB3)* originally developed by the [SE-EDU initiative](https://se-education.org/). We extend our heartfelt thanks to the AB3 developers for laying the foundation that shaped our project’s structure and functionality.
+
+We also gratefully acknowledge the creators of the following resources, libraries, and tools that were instrumental in bringing EduVault to life:
path: docs/DeveloperGuide.md
user: login: ho-thanh-und
body: I think "EduVault" should be changed to QuickHire
created_at: 2025-04-07T12:52:01Z
author_association: NONE
diff_hunk: @@ -14,7 +14,19 @@ pageNav: 3
 
 ## **Acknowledgements**
 
-_{ list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well }_
+This project, *QuickHire*, is built upon the *Address Book Level 3 (AB3)* originally developed by the [SE-EDU initiative](https://se-education.org/). We extend our heartfelt thanks to the AB3 developers for laying the foundation that shaped our project’s structure and functionality.
+
+We also gratefully acknowledge the creators of the following resources, libraries, and tools that were instrumental in bringing EduVault to life:
path: docs/DeveloperGuide.md
user: login: HarishB99
body: I have edited my suggested changes to include yours.
created_at: 2025-04-07T13:57:50Z
author_association: COLLABORATOR

PR comments:
user: login: codecov[bot]
created_at: 2025-04-07T12:07:53Z
body: ## [Codecov](https://app.codecov.io/gh/AY2425S2-CS2103T-T16-3/tp/pull/248?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=AY2425S2-CS2103T-T16-3) Report
All modified and coverable lines are covered by tests :white_check_mark:

<details><summary> :rocket: New features to boost your workflow: </summary>

- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
</details>
author_association: NONE
user: login: DanielJames0302
created_at: 2025-04-07T14:00:10Z
body: > Just some minor suggestions some of the phrasing in DG. Otherwise, LGTM!

I have added your suggestions to the code. Thank you !!
author_association: COLLABORATOR