Project: Reache

Reache is a desktop app that helps busy working professionals manage their large list of contacts by providing an easy-to-use interface to store contacts and organize meetings.

Summary of Contribution

  • Code Contributed: My reposense link

  • Enhancements Implemented:
    • Enhanced ParserUtil to parse new person fields: company, jobtitle, pronouns, PR #33
    • Enhanced ParserUtil methods for emails, phone numbers and addresses to take in a set of values instead of just one, PR #33
    • Enhanced ParserUtil methods for meeting fields, PR #118
    • Enhanced EditCommandParser class to fit v1.3, PR #79
    • Added the command and parser classes for adding, editing, deleting and clearing meetings, PRs #118, #137 and #142
    • Implemented more tests to increase code coverage from 53.49% to 61.29%, PR #234
    • Implemented more tests, PRs #249 & #256
  • Contributions to the UG:
    • Partitioning the command summary into the Main Window section and Contact Detail Window section, PR #206
    • Added explanation for choice of two windows, PR #205
    • Corrections to UG, PRs #85, #50
    • Authored sections 2.3 - 2.5, PR #20
    • Added new UI screenshots for QuickStart & Tutorial 1, PR #257
    • Updated UserGuide to match new terminology used, PR #260
  • Contributions to the DG:
    • Added a user story for v1.3, PR #87
    • Modified Use Case 1, PR #25
    • Authored edit feature including the diagrams and explanation: PRs #103 & #106 + reposense link
    • Added Use Cases 8 to 11, PR #237
    • Modified storage class diagram and added further UML diagrams to explain storage implementation, #237
    • Added test cases under Manual Testing, PRs #237 & #282
  • Contributions to the team-based tasks:
    • Created the team repository
    • Created the collaborative project document
    • Set up issues: #29 ,#138 and #160
    • Fixed bug where cancel-all and clear commands does not update the data in the JSON file, PR #149
    • Reduced number of failing tests after implemenation of new edit command, PRs #79 and #38.
    • Updated UI screenshots for Index.md and README.md, PR #257
  • Contributions beyond the project team:
  • Contributions to the User Guide (Extracts):
    ...
    ## 2. Introduction
    ...
    ### 2.2 Interface Guide
    Reache uses **two windows**, the [Main Window](#221-main-window) and the 
    [Contact Details Window](#222-contact-details-window) as a means of maintaning **information segregation**. 
    The `Main Window` displays only the `names` and `tags` which is our predetermined basic requirement for 
    contact identification, while the `Contact Details Window` displays the more detailed information inside a 
    specific contact. You could imagine this layout as **resembling looking through a folder with small identification 
    tags sticking out and only pulling out the document with the tag when you want to view its details**. This would help 
    to save space on the main window as well as preventing information overload.
    ...
    

    Note that this does not show all changes as previous changes made by me were removed in favor of brevity

  • Contributions to the Developer Guide (Extracts):
### 5.2 Edit feature
The edit mechanism is a feature used to change the details of a contact. It is only accessible from the Contact Details Page, and so must be preceded by an _add_ or _view_ command, both of which navigate the user to the Contact Details Page. It is facilitated mainly by the `ContactDetailsPageParser`, `EditCommandParser` and `EditCommand` classes.

The following sequence diagram shows how the edit operation works:

![EditCommandSequenceDiagram](images/EditCommandSequenceDiagram.png)
- Here, the user executes an `EditCommand`, and supplies the argument `n/Jack`, meaning they wish to change the name of `personToEdit` to "Jack".


![DetailedParsingForEditSequenceDiagram](images/DetailedParsingForEditSequenceDiagram.png)


Below is an activity diagram summarising the possible paths leading to and during the execution of an `EditCommand`:

![EditActivityDiagram](images/EditActivityDiagram.png)

<div markdown="span" class="alert alert-info">:information_source: **Note:** Similar to adding a contact, the contact edited cannot have the same **Name** and **Tags** as an existing contact in the addressbook. This is meant to protect against duplicate contacts which may result in confusion for the user in managing their contacts. Attempting to do so will result in a warning message to the user which reads "A person with these details already exists. Please do add tags that differentiate between them!"

</div>

#### 5.2.1 Design considerations:

**Aspect: How edit saves:**

* **Alternative 1 (current choice):** Each edit is saved immediately.
    * Pros: Prevents data loss from system crashes.
    * Cons: May have performance issues in terms of memory usage.

* **Alternative 2 :** All edits are saved only after executing a save command (not implemented feature).
    * Pros: Allows user to revert their changes
    * Cons: System crashes will not save the edits.

...
### Use cases
...
**Use case: UC8 - Add a meeting**

**MSS:**
<p>
1. User requests to add a meeting with details. <br>
2. Reache displays the newly added meeting in the list of meetings. <br>
Use case ends.
</p>

**Extensions:** <br>
<p>
1a. User inputs using the wrong format. <br>
&emsp; 1a1. Reache displays an error message. <br>
&emsp; Use case resumes from step 1. <br>
</p>
<p>
2a. Reache informs that the meeting with a same date and time already exists. <br>
Use case resumes at step 1. <br>
</p>

<br>

**Use case: UC9 - Edit meeting details**

**MSS:**
<p>
1. User requests to add details for specific field(s) of the meeting. <br>
2. Reache saves the specified details along with their respective field(s). <br>
Use case ends.
</p>

**Extensions:** <br>
<p>
1a. User inputs the wrong format. <br>
&emsp; 1a1. Reache displays an error message. <br>
&emsp; Use case resumes from step 1.
</p>
<p>
2a. Reache informs that the meeting with a same date and time already exists. <br>
Use case resumes at step 1. <br>
</p>

<br>

**Use case: UC10 - Delete a meeting**

**MSS:**
<p>
1. User requests to delete a meeting. <br>
4. Reache deletes the meeting. <br>
Use case ends.
</p>

**Extensions:**
<p>
1a.  The requested meeting does not exist. <br>
&emsp; 1a1. Reache displays an error message. <br>
&emsp; Use case resumes at step 1.
</p>

<br>

**Use case: UC11 - Clear all meetings**

**MSS:**
<p>
1. User requests to clear all meetings
2. Reache asks for confirmation. <br>
3. User confirms the action. <br>
4. Reache clears all meetings. <br>
Use case ends.
</p>

**Extensions:**
<p>
3a.  User chooses to cancel clearing contacts. <br>
&emsp; 3a1. Reache cancels the clearing. <br>
&emsp; Use case ends.
</p>
...
## **Appendix: Instructions for manual testing**
...
### 8.2 Adding a person

1. Adding a person

   1. Prerequisites: Have an empty contacts list. (_Note: The clear and back command may come in handy_)
   
   1. Test case for basic case: `add n/John Doe'<br>
      Expected: Transferred to the Contact Details Page and "New person added" success message is displayed.
      
   1. Test case for all fields: `add n/Michael ph/62334555 l/Home e/michael@gmail.com l/Personal a/Big Mansion l/Home j/Jobs c/Company t/Happy t/Man`
      Expected: Transferred to the Contact Details Page and "New person added" success message is displayed.
      
   1. Test case for some fields: `add n/Peter ph/63339888 l/Home e/peter@gmail.com l/Personal`
      Expected: Transferred to the Contact Details Page and "New person added" success message is displayed.
      
   1. Test case for no fields: `add`
      Expected: Invalid command format error message.
      
   1. Test case for one invalid prefix: `add name/Wayne`
      Expected: Invalid command format error message.
      
   1. Test case for one invalid name input: `add n/1` 
      Expected: Invalid name format error message.
      
   1. Test case for input without name: `add ph/999 a/Big Hotel`
      Expected: Invalid command format error message.
      
   1. Test case for input with one invalid field input: `add n/Harry ph/Numbers`
      Expected: Invalid phone format error message.
      
   1. Test case for inputs with multiple invalid field inputs: `add n/Harry ph/Numbers j/###`
      Expected: Invalid phone format error message.
      
   1. Test case for duplicate contacts: `add n/David` then `back` and `add n/David`
      Expected: Duplicate person error message.
      
   1. Test case for contacts with same name but different tags: `add n/Storm t/sunny` then `back` and `add n/Storm t/windy`
      Expected: Both contacts successfully added.
...
### 8.3 Editing a person

1. Editing a person

   1. Prerequisites: Preferably an empty contacts list. Do `add n/Zachary Davidson` and stay at the Contact Details Page before starting the testing. The list of test cases have to be followed in order for the testing to work.
   
   1. Test case with one valid field input: `edit t/funny`
      Expected: Contact information updated message is displayed.
   
   1. Test case with multiple valid field inputs: `edit ph/63339888 e/guy@people.com a/Average apartment t/not funny actually`
      Expected: Contact information updated message is displayed.
      
   1. Test case for no fields: `edit`
      Expected: Field error message is displayed.
   
   1. Test case with one invalid field input amongst valid inputs: `edit ph/90909999 e/ihateemails a/Pineapple`
      Expected: Invalid email format error message is displated.
      
   1. Test case with one invalid field input and one valid field input: `edit ph/98889777 ph/no`
      Expected: Invalid phone format error message is displayed.
      
   1. Test case with unnecessary additions to front of inputs: `edit 1 t/me`, `edit Zachary Davidson t/me`
      Expected: Invalid command format message is displayed.
      
   1. Test case with valid name input: `edit n/Johnny`, `edit n/Johnny Number 1`
      Expected: Contact information updated message is displayed.
      
   1. Test case with invalid name input: `edit n/R@dical`, `edit n/`
      Expected: Invalid name format message is displayed.
      
   1. Test case with valid jobtitle input: `edit j/Job`, `edit j/Job Number 1`
      
   1. Test case with invalid jobtitle input: `edit j/Ch@f`, `edit j/Boss (CEO)`, `edit j/`
      Expected: Invalid jobtitle format message is displayed.
      
   1. Test case with valid company input: `edit c/Good company`, `edit c/Company Number 1`
      Expected: Contact information updated message is displayed.
      
   1. Test case with invalid company input: `edit c/`
      Expected: Invalid company format message is displayed.
   
   1. Test case with valid label input: `edit ph/999 l/Police`, `edit e/email@gmail.com l/Email`, `edit a/address l/home`, `edit ph/999 l/9aS@1`
      Expected: Contact information updated message is displayed.
   
   1. Test case with invalid label input: `edit l/onlyLabel`
      Expected: Invalid command format message is displayed.
      
   1. Test case with invalid label input: `edit ph/67676767 l/`
      Expected: Invalid label format message is displayed.
...
### 8.10 Back

1. Going back to the Home Page from the Contact Details Page

   1. Prerequisites: Have at least 1 contact and start at the home page.

   1. Test case for view command: `view 1` then `back`
      Expected: Home Page -> Contact Details Page -> Home Page.
      
   1. Test case for add command: `add n/Vivaldi` then `back`
      Expected: Home Page -> Contact Details Page -> Home Page.
      
### 8.11 Adding a meeting

1. Adding a meeting
   
   1. Prerequisites: Have an empty meeting list and 1 contact in the contacts list. The list of test cases have to be followed in order for the testing to work.

   2. Test case: `meet with/1 for/Product Demo in/Conference Room 5A on/05-04-2025 15:44` <br>
      Expected: The added meeting is shown on the list of meetings at the side and a success message is displayed.
   
   3. Test case: `meet with/2 for/Product Demo in/Conference Room 5A on/05-04-2025 15:44` <br>
      Expected: No meeting is added and an error message is shown in the Result Display.
   
   4. Test case: `meet with/1 for/Product Demo in/Conference Room 5A on/05-04-2025 15:44` <br>
      Expected: No meeting is added and an error message is shown in the Result Display.
   
   5. Test case: `meet with/ for/Product Demo in/Conference Room 5A on/05-04-2025 15:44` <br>
      Expected: No meeting is added and an error message is shown in the Result Display.
   
   6. Test case: `meet with/1 for/ in/Conference Room 5A on/05-04-2025 15:44` <br>
      Expected: No meeting is added and an error message is shown in the Result Display.
   
   7. Test case: `meet with/1 for/Product Demo in/ on/05-04-2025 15:44` <br>
      Expected: No meeting is added and an error message is shown in the Result Display.
   
   8. Test case: `meet with/1 for/Product Demo in/Conference Room 5A on/` <br>
      Expected: No meeting is added and an error message is shown in the Result Display.
   
   9. Test case: `meet with/1 for/Product Demo in/Conference Room 5A on/2025-05-04 15:44`
      Expected: No meeting is added and an error message is shown in the Result Display.