From b8509e2bf1a6311f30ccf17a00010385ab6af06b Mon Sep 17 00:00:00 2001 From: "bensonang36@gmail.com" Date: Wed, 10 Apr 2024 16:14:55 +0800 Subject: [PATCH 01/15] Fix JSON bug --- .../address/storage/JsonSerializableAddressBook.java | 9 +++++++++ .../address/storage/JsonAddressBookStorageTest.java | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java b/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java index 78ae2b01ae..c722d94cef 100644 --- a/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java +++ b/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java @@ -21,6 +21,8 @@ public class JsonSerializableAddressBook { public static final String MESSAGE_DUPLICATE_PERSON = "Persons list contains duplicate person(s)."; + public static final String MESSAGE_DUPLICATE_ASSIGNMENT = "Assignment list contains duplicate assignment(s)."; + public static final String MESSAGE_NO_SUCH_PERSON = "Persons list does not contained assigned person"; public static final String PERSONS_PROPERTY = "persons"; public static final String ASSIGNMENTS_PROPERTY = "assignments"; @@ -65,6 +67,13 @@ public AddressBook toModelType() throws IllegalValueException { } for (JsonAdaptedAssignment jsonAdaptedAssignment: assignments) { Assignment assignment = jsonAdaptedAssignment.toModelType(); + // check person and duplicate + if (!addressBook.hasPerson(assignment.getPerson())) { + throw new IllegalValueException(MESSAGE_NO_SUCH_PERSON); + } + if (addressBook.hasAssignment(assignment)) { + throw new IllegalValueException(MESSAGE_DUPLICATE_ASSIGNMENT); + } addressBook.addAssignment(assignment); } return addressBook; diff --git a/src/test/java/seedu/address/storage/JsonAddressBookStorageTest.java b/src/test/java/seedu/address/storage/JsonAddressBookStorageTest.java index 4e5ce9200c..ff304043f3 100644 --- a/src/test/java/seedu/address/storage/JsonAddressBookStorageTest.java +++ b/src/test/java/seedu/address/storage/JsonAddressBookStorageTest.java @@ -3,7 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static seedu.address.testutil.Assert.assertThrows; -import static seedu.address.testutil.TypicalPersons.ALICE; +import static seedu.address.testutil.TypicalPersons.DANIEL; import static seedu.address.testutil.TypicalPersons.HOON; import static seedu.address.testutil.TypicalPersons.IDA; import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; @@ -73,7 +73,7 @@ public void readAndSaveAddressBook_allInOrder_success() throws Exception { // Modify data, overwrite exiting file, and read back original.addPerson(HOON); - original.removePerson(ALICE); + original.removePerson(DANIEL); jsonAddressBookStorage.saveAddressBook(original, filePath); readBack = jsonAddressBookStorage.readAddressBook(filePath).get(); assertEquals(original, new AddressBook(readBack)); From 937e11c70fa73b16e3c2f94d34c9f05e91c1d400 Mon Sep 17 00:00:00 2001 From: "bensonang36@gmail.com" Date: Wed, 10 Apr 2024 16:19:28 +0800 Subject: [PATCH 02/15] Revert "Fix JSON bug" This reverts commit b8509e2bf1a6311f30ccf17a00010385ab6af06b. --- .../address/storage/JsonSerializableAddressBook.java | 9 --------- .../address/storage/JsonAddressBookStorageTest.java | 4 ++-- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java b/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java index c722d94cef..78ae2b01ae 100644 --- a/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java +++ b/src/main/java/seedu/address/storage/JsonSerializableAddressBook.java @@ -21,8 +21,6 @@ public class JsonSerializableAddressBook { public static final String MESSAGE_DUPLICATE_PERSON = "Persons list contains duplicate person(s)."; - public static final String MESSAGE_DUPLICATE_ASSIGNMENT = "Assignment list contains duplicate assignment(s)."; - public static final String MESSAGE_NO_SUCH_PERSON = "Persons list does not contained assigned person"; public static final String PERSONS_PROPERTY = "persons"; public static final String ASSIGNMENTS_PROPERTY = "assignments"; @@ -67,13 +65,6 @@ public AddressBook toModelType() throws IllegalValueException { } for (JsonAdaptedAssignment jsonAdaptedAssignment: assignments) { Assignment assignment = jsonAdaptedAssignment.toModelType(); - // check person and duplicate - if (!addressBook.hasPerson(assignment.getPerson())) { - throw new IllegalValueException(MESSAGE_NO_SUCH_PERSON); - } - if (addressBook.hasAssignment(assignment)) { - throw new IllegalValueException(MESSAGE_DUPLICATE_ASSIGNMENT); - } addressBook.addAssignment(assignment); } return addressBook; diff --git a/src/test/java/seedu/address/storage/JsonAddressBookStorageTest.java b/src/test/java/seedu/address/storage/JsonAddressBookStorageTest.java index ff304043f3..4e5ce9200c 100644 --- a/src/test/java/seedu/address/storage/JsonAddressBookStorageTest.java +++ b/src/test/java/seedu/address/storage/JsonAddressBookStorageTest.java @@ -3,7 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static seedu.address.testutil.Assert.assertThrows; -import static seedu.address.testutil.TypicalPersons.DANIEL; +import static seedu.address.testutil.TypicalPersons.ALICE; import static seedu.address.testutil.TypicalPersons.HOON; import static seedu.address.testutil.TypicalPersons.IDA; import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; @@ -73,7 +73,7 @@ public void readAndSaveAddressBook_allInOrder_success() throws Exception { // Modify data, overwrite exiting file, and read back original.addPerson(HOON); - original.removePerson(DANIEL); + original.removePerson(ALICE); jsonAddressBookStorage.saveAddressBook(original, filePath); readBack = jsonAddressBookStorage.readAddressBook(filePath).get(); assertEquals(original, new AddressBook(readBack)); From b5a3f1652c42f34a5bdb4358678d5ec4b52aabe1 Mon Sep 17 00:00:00 2001 From: Benson Date: Fri, 12 Apr 2024 14:59:39 +0800 Subject: [PATCH 03/15] Add usecases and fix modelclassdiagram --- docs/DeveloperGuide.md | 301 ++++++++++++++++++++++++--- docs/diagrams/ModelClassDiagram.puml | 1 + docs/images/ModelClassDiagram.png | Bin 43956 -> 42800 bytes 3 files changed, 277 insertions(+), 25 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 0b9a04c78a..e1a3e6d141 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -155,6 +155,23 @@ Classes used by multiple components are in the `seedu.addressbook.commons` packa This section describes some noteworthy details on how certain features are implemented. +### Add volunteer feature +This feature allows the user to add a volunteer to the database and manage them. +![AddSequenceDiagram](images/AddSequenceDiagram.png) + +Step 1. The user launches the application. + +Step 2. The user executes `add n/John Doe p/12345678 e/john@example.com` to add John Doe to Match. + +Step 3. `Logic Manager` will call `parseCommand(input)` to extract the parameters and pass it to `AddCommandParser`. + +Step 4. The `AddressBookParser` will call `AddCommandParser#parse(arguments)` to create a `AddCommand` which will be executed by the `Logic Manager`. + +Step 5. During the execution of `AddCommand`, a new Person is created and added. + +Step 6. A `CommandResult` is produced based on the status of the execution;success or not which will be returned to the `Logic Manager`. + + ### \[Proposed\] Copy emails to Clipboard feature #### Proposed Implementation @@ -305,7 +322,7 @@ _{Explain here how the data archiving feature will be implemented}_ - He is forgetful and often forgets the assignments he has made. - He has bad eyesight and cannot see small or low-contrast texts. -**Value Proposition**: +### Value Proposition: Match streamlines volunteer management, facilitating efficient scheduling and coordination of volunteers, ultimately saving time and resources for organizations focused on social impact. It helps Bob efficiently manage a diverse group of volunteers by tracking their availability. @@ -328,52 +345,283 @@ Priority: High (must have) - `***`, Medium (nice to have) - `**`, Low (unlikely **Use Cases**: -**Use case: Add a Volunteer** +**UC01: Add a Volunteer** **Actor**: Coordinator (Bob) -**Precondition**: Coordinator has launched the application and is on the main screen. +**Precondition**: User has launched the application and is on the main screen. **Main Success Scenario**: -1. Coordinator adds a new volunteer. -2. Coordinator is required to enter the volunteer's name, phone number, email and availability. -3. Coordinator enters the required information in the correct format. +1. User requests to add a new volunteer. +2. User is required to enter the volunteer's name, phone number and email. +3. User enters the required information in the correct format. 4. The system validates the input and displays a confirmation message: "Volunteer [volunteer_name] has been added successfully." +Use Case ends. + **Extensions**: -3a. The coordinator enters invalid data for any of the fields. - 3a1. The system displays an error message indicating the nature of the error (e.g., "[Parameter] is invalid," "[Parameter] is missing," "[Parameter] is specified multiple times"). - 3a2. The coordinator corrects the input and continues from step 3. +- 3a. The User enters invalid data for any of the fields. + - 3a1. The system displays an error message indicating the nature of the error (e.g., "[Parameter] is invalid," "[Parameter] is missing," "[Parameter] is specified multiple times"). + - Use Case ends. -**Use case: Find a Volunteer's Information** +**UC02: Find a Volunteer's Information** **Actor**: Coordinator (Bob) -**Precondition**: Coordinator has launched the application and is on the main screen. +**Precondition**: User has launched the application and is on the main screen. **Main Success Scenario**: -1. Coordinator selects the "Find Volunteer" option. -2. The system prompts the coordinator to enter the volunteer's name. -3. Coordinator enters the volunteer's name (or a part of it). -4. The system displays all volunteers whose names contain the entered keywords. +1. User requests to find a volunteer via name or availability +2. The system displays all volunteers whose names contain the entered keywords. + +Use Case ends. **Extensions**: -4a. No volunteers match the entered name. - 4a1. The system displays an error message: "No volunteers found." +- 1a. User enters an invalid command. + - 1a1. Match shows an error message + - Use case ends. -**Use case: View Entire List of Volunteers** +- 1b. There are no volunteers in the address book. + - 1b1. The system displays a message: "There are no volunteers in the address book." + - Use case ends. + +**UC03: View Entire List of Volunteers** **Actor**: Coordinator (Bob) -**Precondition**: Coordinator has launched the application and is on the main screen. +**Precondition**: User has launched the application and is on the main screen. **Main Success Scenario**: -1. Coordinator selects the "List Volunteers" option. +1. User requests to view all volunteers 2. The system displays the entire list of volunteers, along with their details, in the GUI. +Use case ends. + +**Extensions**: +- 1a. There are no volunteers in the address book. + - 1a1. The system displays a message: "There are no volunteers in the address book." + - Use case ends. + +**UC04: Remove a volunteer** + +**Actor**: Coordinator (Bob) + +**Precondition**: Coordinator has launched the application and is on the main screen. There is also at least 1 volunteer in the app. + +**Main Success Scenario**: +1. User requests to remove a volunteer from Match +2. User enters the person to remove. +3. Match asks for confirmation. +4. User confirms deletion. +5. The system displays a success message and removed the volunteer from the app. + +Use Case ends. + +**Extensions**: + +- 2a. User enters an invalid volunteer. + - 2a1. Match shows an error message + - Use case ends. + +- 3a. User cancels deletion + - 3a1. The system acknowledges the cancellation and does nothing. + - Use case ends. + + + +**UC05: Edit a volunteer's details** + +**Actor**: Coordinator (Bob) + +**Precondition**: Coordinator has launched the application and is on the main screen. There is also at least 1 volunteer in the app. + +**Main Success Scenario**: +1. User requests to edit a volunteer's details. +2. User enters the new details +3. The system displays a success message and updates the volunteer's details. + +Use Case ends. + +**Extensions**: + +- 1a. User enters an invalid volunteer. + - 1a1. Match shows an error message. + - Use case ends. + +- 2a. User enters invalid details. + - 2a1. Match shows an error message. + - Use case ends. + +**UC06: Add availability** + +**Actor**: Coordinator (Bob) + +**Precondition**: User has launched the application and is on the main screen. There is also at least 1 volunteer in the app. + +**Main Success Scenario**: +1. User requests to add an availability to an existing volunteer. +2. User enters the availability. +3. The system displays a success message and updates the volunteer's availability. + +Use Case ends. + +**Extensions**: + +- 1a. User enters an invalid volunteer. + - 1a1. Match shows an error message. + - Use case ends. + +- 2a. User enters invalid availability. + - 2a1. Match shows an error message. + - Use case ends. + + +**UC07: Remove availability** + +**Actor**: Coordinator (Bob) + +**Precondition**: User has launched the application and is on the main screen. There is also at least 1 volunteer in the app. + +**Main Success Scenario**: +1. User requests to remove an availability from an existing volunteer. +2. User enters the availability to be removed. +3. The system displays a success message and updates the volunteer's availability. + +Use Case ends. + +**Extensions**: + +- 1a. User enters an invalid volunteer. + - 1a1. Match shows an error message. + - Use case ends. + +- 2a. User enters invalid availability. + - 2a1. Match shows an error message. + - Use case ends. +- 2b. User enters a valid availability but volunteer does not have that availability. + - 2b1. Match shows an error message. + - Use case ends. + +**UC08: Assign a volunteer to an activity** + +**Actor**: Coordinator (Bob) + +**Precondition**: User has launched the application and is on the main screen. There is also at least 1 volunteer with at least 1 availability in the app. + +**Main Success Scenario**: +1. User assigns a volunteer to an activity on a date. +2. User enters the details of the assignment and availability +3. The system displays a success message and creates an assignment with that volunteer. + +Use Case ends. + **Extensions**: -2a. There are no volunteers in the address book. - 2a1. The system displays a message: "There are no volunteers in the address book." + +- 1a. User enters an invalid volunteer. + - 1a1. Match shows an error message. + - Use case ends. + +- 2a. User enters invalid availability. + - 2a1. Match shows an error message. + - Use case ends. +- 2b. User enters a valid availability but volunteer is not available. + - 2b1. Match shows an error message. + - Use case ends. +- 2c. User enters invalid details + - 2c1. Match shows an error message. + - Use case ends. + +**UC09: View the list of assignments** + +**Actor**: Coordinator (Bob) + +**Precondition**: User has launched the application and is on the main screen. There is also at least one assignment. + +**Main Success Scenario**: +1. User requests to view the list of assignments +2. The system displays a success message and shows the list of assignments. + +Use Case ends. + +**UC10: Delete assignments** + +**Actor**: Coordinator (Bob) + +**Precondition**: User has launched the application and is on the main screen. There is also at least 1 volunteer in the app. + +**Main Success Scenario**: +1. User requests to delete an assignment +2. The system displays a success message and updates the assignment list. + +Use Case ends. + +**Extensions**: + +- 1a. User enters an invalid assignment. + - 1a1. Match shows an error message. + - Use case ends. + +**UC11: Reset all data** + +**Actor**: Coordinator (Bob) + +**Precondition**: User has launched the application and is on the main screen. + +**Main Success Scenario**: +1. User requests to clear all data entry in the system +2. The system displays a success message and updates the lists. + +Use Case ends. + +**UC12: Remove all availabilities before a certain date** + +**Actor**: Coordinator (Bob) + +**Precondition**: User has launched the application and is on the main screen. + +**Main Success Scenario**: +1. User requests to clear all availabilities before a date. +2. The system displays a success message and updates all the persons and assignments. + +Use Case ends. + +**Extensions**: + +- 1a. User enters an invalid availability. + - 1a1. Match shows an error message. + - Use case ends. +- 1b. User enters an availability with no volunteers having any availabilities before that. + - 1b1. Match shows an error message. + - Use case ends. + + +**UC13: Copy all emails of the current volunteer list** + +**Actor**: Coordinator (Bob) + +**Precondition**: User has launched the application and is on the main screen. + +**Main Success Scenario**: +1. User requests to copy all emails. +2. The system displays a success message and emails are copied to user's clipboard. + +Use Case ends. + +**UC14: Export data to csv file** + +**Actor**: Coordinator (Bob) + +**Precondition**: User has launched the application and is on the main screen. + +**Main Success Scenario**: +1. User requests to export all data. +2. The system displays a success message and the data is exported to a csv file. + +Use Case ends. + + + + ### Non-Functional Requirements @@ -404,16 +652,19 @@ testers are expected to do more *exploratory* testing. 1. Download the jar file and copy into an empty folder - 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum. + 2. Launch Match by running the jar file in your terminal. (java -jar Match.jar) + + Expected: Shows the GUI with a set of sample volunteers. The window size may not be optimum. -1. Saving window preferences +2. Saving window preferences 1. Resize the window to an optimum size. Move the window to a different location. Close the window. 1. Re-launch the app by double-clicking the jar file.
Expected: The most recent window size and location is retained. -1. _{ more test cases …​ }_ +3. Exit Application + 1. While in Match, ### Deleting a person diff --git a/docs/diagrams/ModelClassDiagram.puml b/docs/diagrams/ModelClassDiagram.puml index 221f85c179..253f66cbee 100644 --- a/docs/diagrams/ModelClassDiagram.puml +++ b/docs/diagrams/ModelClassDiagram.puml @@ -61,4 +61,5 @@ Phone -[hidden]right-> Email Email -[hidden]right-> Availability ModelManager --> "~* filtered" Person +ModelManager --> "~* filtered" Assignment @enduml diff --git a/docs/images/ModelClassDiagram.png b/docs/images/ModelClassDiagram.png index 052d0cf1b3a76953b6469d7060ee4265eaaba985..66e46d06fcaaa73ed097161bb43c930776a4d672 100644 GIT binary patch literal 42800 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 z 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

-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 R{0RJ<*EiFvK6fSjKLCgsolXD% literal 43956 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®C9vggu6e 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 From e844b6ad6589fd566cdaef6ee79cac6f08631ca2 Mon Sep 17 00:00:00 2001 From: "bensonang36@gmail.com" Date: Fri, 12 Apr 2024 20:45:55 +0800 Subject: [PATCH 04/15] Edit DG and improve diagrams --- docs/DeveloperGuide.md | 423 +++++++++++++++------- docs/diagrams/AssignActivityDiagram.puml | 32 ++ docs/diagrams/AssignmentClassDiagram.puml | 25 ++ docs/diagrams/ModelClassDiagram.puml | 32 +- docs/diagrams/PersonClassDiagram.puml | 35 ++ docs/images/AssignActivityDiagram.png | Bin 0 -> 50663 bytes docs/images/AssignmentClassDiagram.png | Bin 0 -> 8977 bytes docs/images/ModelClassDiagram.png | Bin 42800 -> 30535 bytes docs/images/PersonClassDiagram.png | Bin 0 -> 10154 bytes 9 files changed, 399 insertions(+), 148 deletions(-) create mode 100644 docs/diagrams/AssignActivityDiagram.puml create mode 100644 docs/diagrams/AssignmentClassDiagram.puml create mode 100644 docs/diagrams/PersonClassDiagram.puml create mode 100644 docs/images/AssignActivityDiagram.png create mode 100644 docs/images/AssignmentClassDiagram.png create mode 100644 docs/images/PersonClassDiagram.png diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index e1a3e6d141..c740dd10dc 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -28,7 +28,7 @@ Refer to the guide [_Setting up and getting started_](SettingUp.md). ### Architecture - +![ArchitectureDiagram](images/ArchitectureDiagram.png) The ***Architecture Diagram*** given above explains the high-level design of the App. @@ -36,7 +36,7 @@ Given below is a quick overview of main components and how they interact with ea **Main components of the architecture** -**`Main`** (consisting of classes [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down. +**`Main`** (consisting of classes [`Main`](https://github.com/AY2324S2-CS2103T-F10-4/tp/blob/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/AY2324S2-CS2103T-F10-4/tp/blob/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down. * At app launch, it initializes the other components in the correct sequence, and connects them up with each other. * At shut down, it shuts down the other components and invokes cleanup methods where necessary. @@ -53,7 +53,7 @@ The bulk of the app's work is done by the following four components: The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`. - +![ArchitectureSequenceDiagram](images/ArchitectureSequenceDiagram.png) Each of the four main components (also shown in the diagram above), @@ -62,13 +62,13 @@ Each of the four main components (also shown in the diagram above), For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component's being coupled to the implementation of a component), as illustrated in the (partial) class diagram below. - +![ComponentManagers](images/ComponentManagers.png) The sections below give more details of each component. ### UI component -The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java) +The **API** of this component is specified in [`Ui.java`](https://github.com/AY2324S2-CS2103T-F10-4/tp/blob/master/src/main/java/seedu/address/ui/Ui.java) ![Structure of the UI Component](images/UiClassDiagram.png) @@ -85,11 +85,11 @@ The `UI` component, ### Logic component -**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java) +**API** : [`Logic.java`](https://github.com/AY2324S2-CS2103T-F10-4/tp/blob/master/src/main/java/seedu/address/logic/Logic.java) Here's a (partial) class diagram of the `Logic` component: - +![LogicClassDiagram](images/LogicClassDiagram.png) The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute("delete 1")` API call as an example. @@ -108,16 +108,16 @@ How the `Logic` component works: Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command: - +![ParserClasses](images/ParserClasses.png) How the parsing works: * When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object. * All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing. ### Model component -**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java) +**API** : [`Model.java`](https://github.com/AY2324S2-CS2103T-F10-4/tp/blob/master/src/main/java/seedu/address/model/Model.java) - +![ModelDiagram](images/ModelClassDiagram.png) The `Model` component, @@ -127,18 +127,40 @@ The `Model` component, * stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects. * 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) -

:information_source: **Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.
+
:information_source: +**Note:**The focus of the above class diagram is on the Person and Assignment classes as well as the relevant lists that contain them. More details will be provided in below.
+
- +### Person Component +**API** : [`Person.java`](https://github.com/AY2324S2-CS2103T-F10-4/tp/blob/master/src/main/java/seedu/address/model/person/Person.java) -
+![PersonDiagram](images/PersonClassDiagram.png) + +The `Person` component stores the data of a volunteer which are: +- `Name` which is compulsory +- `Phone` which is compulsory +- `Email` which is compulsory +- `Availability` which is optional +- `Tag` which is optional + + +### Assignment component +**API** : [`Assignment.java`](https://github.com/AY2324S2-CS2103T-F10-4/tp/blob/master/src/main/java/seedu/address/model/assignment/Assignment.java) + +![AssignmentDiagram](images/AssignmentClassDiagram.png) + +The `Assignment` component contains the information of the assignment: +- `Person` which refers to the person assigned and is compulsory +- `Availability` which refers to the date assigned and is compulsory +- `AssignmentDetails` which contains the details of the assignment and is compulsory -### Storage component -**API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java) - +### Storage component +**API** : [`Storage.java`](https://github.com/AY2324S2-CS2103T-F10-4/tp/blob/master/src/main/java/seedu/address/storage/Storage.java) + +![StorageClassDiagram](images/StorageClassDiagram.png) The `Storage` component, * can save both address book data and user preference data in JSON format, and read them back into corresponding objects. @@ -159,22 +181,51 @@ This section describes some noteworthy details on how certain features are imple This feature allows the user to add a volunteer to the database and manage them. ![AddSequenceDiagram](images/AddSequenceDiagram.png) -Step 1. The user launches the application. +1. The user launches the application. + +2. The user executes `add n/John Doe p/12345678 e/john@example.com` to add John Doe to Match. + +3. `Logic Manager` will call `AddressBookParser#parseCommand(input)` to extract the parameters and pass it to `AddCommandParser` + +4. The `AddressBookParser` will call `AddCommandParser#parse(arguments)` to create a `AddCommand` which will be executed by the `Logic Manager`. + +5. During the execution of `AddCommand`, a new Person is created and added to the model. + +6. A `CommandResult` is produced based on the status of the execution;success or not which will be returned to the `Logic Manager`. + -Step 2. The user executes `add n/John Doe p/12345678 e/john@example.com` to add John Doe to Match. +### Find volunteer feature +This feature allows the user to filter through the volunteer list based on names and availabilities. +![AddSequenceDiagram](images/FindSequenceDiagram.png) -Step 3. `Logic Manager` will call `parseCommand(input)` to extract the parameters and pass it to `AddCommandParser`. +1. The user launches the application. -Step 4. The `AddressBookParser` will call `AddCommandParser#parse(arguments)` to create a `AddCommand` which will be executed by the `Logic Manager`. +2. The user executes `find n/alex` to find all users with the name alex inside. -Step 5. During the execution of `AddCommand`, a new Person is created and added. +3. `Logic Manager` will call `AddressBookParser#parseCommand(input)` to extract the parameters and pass it to `FindCommandParser` -Step 6. A `CommandResult` is produced based on the status of the execution;success or not which will be returned to the `Logic Manager`. +4. The `AddressBookParser` will call `FindCommandParser#parse(arguments)` to create a `FindCommand` which will be executed by the `Logic Manager`. +5. During the execution of `FindCommand`, it will call `Model#updateFilterPersonList(predicate)` to update the person list to only show people with the name alex in it. -### \[Proposed\] Copy emails to Clipboard feature +6. A `CommandResult` is produced based on the status of the execution;success or not which will be returned to the `Logic Manager`. + + +### Assign volunteer feature +This feature allows the user to assign a volunteer to an volunteering activity. +![AssignActivityDiagram](images/AssignActivityDiagram.png) + +1. The user launches the application. +2. The user executes `assign 1 d/Willing Hearts a/01/03/2024` to assign the volunteer at index 1. +3. `Logic Manager` will then call `AddressBookParser#parseCommand(input)` to parse the input and pass it to `AddAssignmentCommandParser`. +4. `AddAssignmentCommandParser` will check for valid `AssignmentDetails` , `Availability` and `AssignedPerson`. +5. Then, it creates a `AddAssignmentCommand` object which will be executed. +6. During execution, it will check whether a volunteer is available on that day, and if he/she already has an existing assignment on that day. +7. It will then finally check for any duplicate assignments. +8. After all these checks, the `Assignment` is then created and added to the application. + +### Copy emails to Clipboard feature -#### Proposed Implementation This feature allows a user to first filter the list using the find command (eg. specific names or availabilities), before copying all the emails to the clipboard (seperated by commas), so that they can be easily contacted. @@ -190,9 +241,7 @@ The following sequence diagram shows how a copy operation goes through the Logic ![CopySequenceDiagram](images/CopySequenceDiagram-Logic.png) -### \[Proposed\] Exporting to CSV - -#### Proposed Implementation +### Exporting to CSV The proposed exporting mechanism allows a user to export to a more popular and human-readable format. Comma-separated values (CSV) are widely used for data exchange and also for analytics. @@ -208,93 +257,7 @@ The following sequence diagram shows how an export operation goes through the Lo ![ExportSequenceDiagram](images/ExportSequenceDiagram-Logic.png) -### \[Proposed\] Undo/redo feature - -#### Proposed Implementation - -The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the following operations: - -* `VersionedAddressBook#commit()` — Saves the current address book state in its history. -* `VersionedAddressBook#undo()` — Restores the previous address book state from its history. -* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history. - -These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()` and `Model#redoAddressBook()` respectively. - -Given below is an example usage scenario and how the undo/redo mechanism behaves at each step. - -Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state. - -![UndoRedoState0](images/UndoRedoState0.png) - -Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state. - -![UndoRedoState1](images/UndoRedoState1.png) - -Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`. - -![UndoRedoState2](images/UndoRedoState2.png) -
:information_source: **Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`. - -
- -Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state. - -![UndoRedoState3](images/UndoRedoState3.png) - -
:information_source: **Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather -than attempting to perform the undo. - -
- -The following sequence diagram shows how an undo operation goes through the `Logic` component: - -![UndoSequenceDiagram](images/UndoSequenceDiagram-Logic.png) - -
:information_source: **Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram. - -
- -Similarly, how an undo operation goes through the `Model` component is shown below: - -![UndoSequenceDiagram](images/UndoSequenceDiagram-Model.png) - -The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state. - -
:information_source: **Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo. - -
- -Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged. - -![UndoRedoState4](images/UndoRedoState4.png) - -Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow. - -![UndoRedoState5](images/UndoRedoState5.png) - -The following activity diagram summarizes what happens when a user executes a new command: - - - -#### Design considerations: - -**Aspect: How undo & redo executes:** - -* **Alternative 1 (current choice):** Saves the entire address book. - * Pros: Easy to implement. - * Cons: May have performance issues in terms of memory usage. - -* **Alternative 2:** Individual command knows how to undo/redo by - itself. - * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted). - * Cons: We must ensure that the implementation of each individual command are correct. - -_{more aspects and alternatives to be added}_ - -### \[Proposed\] Data archiving - -_{Explain here how the data archiving feature will be implemented}_ -------------------------------------------------------------------------------------------------------------------- @@ -340,6 +303,7 @@ Priority: High (must have) - `***`, Medium (nice to have) - `**`, Low (unlikely | `***` | coordinator | find volunteers by name | quickly locate a specific volunteer's information | | `**` | coordinator | view a list of all volunteers | have an overview of all registered volunteers | | `**` | coordinator | find volunteers by availability | match volunteers with beneficiaries based on their availability | +| `**` | coordinator | assign volunteers to a task | match volunteers | | `*` | coordinator | use a GUI with large fonts and high contrast | easily view information with my bad eyesight | | `*` | coordinator | use keyboard shortcuts | reduce typing due to my carpal tunnel | @@ -664,29 +628,236 @@ testers are expected to do more *exploratory* testing. Expected: The most recent window size and location is retained. 3. Exit Application - 1. While in Match, + 1. While in Match, click on the `File` button and press `Exit`. + + Expected: The application will now close. -### Deleting a person -1. Deleting a person while all persons are being shown - 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list. +### Viewing Help +1. While in Match, click on the `Help` button and press `Help`. Then press on `Copy URL`. - 1. Test case: `delete 1`
- Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated. + Expected: This will copy the link to our UserGuide to your clipboard. Simply paste the link into any browser and view our UserGuide. - 1. Test case: `delete 0`
- Expected: No person is deleted. Error details shown in the status message. Status bar remains the same. +### Adding a volunteer +1. Add a new volunteer + 1. Test Case: `add n/John Doe p/12345678 e/john@example.com` + + Expected: Volunteer with the name "John Doe", phone number "12345678", email "john@example.com" is added + 2. Test Case: `add n/John Doe p/12345678 e/john@example.com a/01/03/2024` + + Expected: Same as previous but now with an availability of 01/03/2024. + 3. Test Case: `add n/John Doe p/12345678 e/john@example.com t/Teaching` + + Expected: Same as test case 1 but with the extra tag of "Teaching". + 4. Test Case: `add [any duplicated name, phone, email]` + + Expected: Error thrown, stating no duplicate names, phones, emails are allowed. + +### Viewing the list of volunteers +1. List all volunteers + 1. Test Case: `list` + + Expected: The list of all volunteers are shown + 2. Test Case: `list [any extra keywords]` + + Expected: Same as previous testcase. + +### Find a volunteers by his/her name or availability. +1. Filters through the list based on the search criteria + 1. Test Case: `find n/Alex` + + Expected: A list of volunteers showing all volunteers with "Alex" in their names. + 2. Test Case: `find a/01/03/2024` + + Expected: A list of volunteers showing all volunteer who are available on "01/03/2024". + 3. Test Case: `find n/Alex a/01/03/2024` + + Expected: A list of volunteers showing all volunteers who are available on "01/03/2024" or with "Alex" in their names. + 4. Test Case: `find` + + Expected: Error thrown, stating that at least one search criterion must be present. +### Removing a volunteer +1. Remove a volunteer from the application based on the volunteer list + 1. Prerequisites: There must be at least one volunteer present in the current list. + 2. Test Case: `delete 1` then enter `y` + + Expected: A prompt is given to confirm your deletion. After entering `y`, the volunteer at index `1` is removed. + 3. Test Case: `delete 0` or `delete [negative number]` + + Expected: Error thrown as delete command expects a positive integer as its argument. + 4. Test Case: `delete [number greater than the size of list]` + + Expected: A prompt is given to confirm deletion. After entering `y`, error is thrown as there is no volunteer at that index. + +### Editing a volunteer's details +1. Edit a volunteer + 1. Prerequisites: There must be at least one volunteer present in the current list. + 2. Test Case: `edit 1 n/John` + + Expected: The volunteer's name at index `1` is now changed to "John". + 3. Test Case: `edit 1 p/12345678` + + Expected: The volunteer's phone number at index `1` is now changed to "12345678". + 4. Test Case: `edit 1` + + Expected: Error thrown, stating that at least one field must be present to edit. + 5. Test Case: `edit 1 t/` + + Expected: Clears all tags of the volunteer. + + +### Adding availability to a volunteer +1. Add an availability to a volunteer + 1. Prerequisites: There must be at least one volunteer present in the current list. + 2. Test Case: `addavail 1 a/01/03/2024` + + Expected: Availability is added to the volunteer at index `1`. + 3. Test Case: `addavail 1` + + Expected: Error thrown, stating that availability must be present. + 4. Test Case: `addavail 1 [existing availability]` + + Expected: Error thrown, stating that the volunteer is already available. + 5. Test Case: `addavail 1 [invalid date]` + + Expected: Error thrown, stating that availability must be a valid date. + + +### Removing an availability from a volunteer. +1. Removes an availability from a volunteer + 1. Prerequisites: There must be at least one volunteer present in the current list. + 2. Test Case: `removeavail 1 [existing availability]` + + Expected: The availability is removed from the volunteer at index `1`. + 3. Test Case: `removeavail 1 [any availability that the volunteer does not have]` + + Expected: Error thrown, stating that the volunteer does not have that availability. + +### Refresh the application +1. Removes all availabilities before today. + 1. Test Case: `refresh` + + Expected: All availabilities before today are removed. + 2. Test Case: `refresh [extra inputs]` + + Expected: Same as previous. + +### Assign a volunteer +1. Assigns a volunteer to an assignment. + 1. Prerequisites: There must be at least one available volunteer present in the current list. + 2. Test Case: `assign 1 d/Willing Hearts a/[Existing availability which is not assigned]` + + Expected: A new assignment is created with the assigned person at index 1. + 3. Test Case: `assign 1 d/Willing Hearts a/[any availability that the volunteer does not have]` - 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)
- Expected: Similar to previous. + Expected: Error thrown, stating that the volunteer is not available on that day. + 4. Test Case: `assign 1 d/Willing Hearts a/[a date where the volunteer already has an assignment]` -1. _{ more test cases …​ }_ + Expected: Error thrown, stating that the volunteer is already assigned 1 task on that day. + 5. Test Case: `assign [missing parameters]` + Expected: Error thrown, stating invalid command format. + 6. Test Case: `assign d/ a/[Existing availability]` + + Expected: Error thrown, stating that details cannot be empty. + +### View list of assignments +1. Views the list of every assignment. + 1. Test Case: `lista` + + Expected: The list of all assignments is shown on the GUI. + 2. Test Case: `lista [extra inputs` + + Expected: Same as previous. + +### Remove assignments +1. Removes assignment based on the assignment list. (This is similar to deleting volunteers without confirmation.) + 1. Prerequisites: There must be at least one assignment in the assignment list. + 2. Test Case: `removeassign 1` + + Expected: Removes the assignment at index 1 of the assignment list. + 3. Test Case: `removeassign 0` or `removeassign [negative numbers]` + + Expected: Error thrown, stating invalid command format. + + +### Clear all data +1. Removes all data from the application + 1. Test Case: `clear` + + Expected: Removes all entries(volunteers and assignments) in the application. + 2. Test Case: `clear [extra inputs]` + + Expected: Same as previous. + + +### Copy emails of the person list. +1. Copy emails of every volunteer in the current volunteer list. + 1. Test Case: `copy` + + Expected: All emails in the current volunteer list are copied to your clipboard. + 2. Test Case: `copy [extra keywords]` + + Expected: Same as previous. + +### Export data +1. Exports the current data in the application to a csv file. + 1. Test Case: `export` when the addressbook.json file exists. + + Expected: All data is exported to a csv file named "assignments.csv" and "persons.csv" in the data directory. + 2. Test Case: `export` when the addressbook.json file does not exist. + + Expected: Error thrown, stating that the json file could not be found. + 3. Test Case: `export [extra inputs]` + + Expected: Same as the above 2, depending on whether json file exists. ### Saving data 1. Dealing with missing/corrupted data files - 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_ + 1. Edit `addressbook.json` such that that stored values no longer make sense. For example: Changing a volunteer's details while not changing the assignment details. + 2. Launch Match through the terminal by running `java -jar Match.jar` + + Expected: Match launches but the lists are empty. + + +## **Appendix: Planned Enhancements** + +## **Appendix: Effort** + +### **Difficulty Level** +Developing Match was somewhat challenging and difficult as we planned features that were not easy to implement. +Not only do we have to plan the features, we had to understand the initial AB3 application and how it worked. +Furthermore, most of us have not worked in a team before, hence coordinating issues and pull requests were time-consuming. + +### **Challenges Faced** + +Here are some of the challenges the team faced: +- Making a new panel list showing all assignments + - We are new to Java FX and figuring out how to switch views were difficult. To build this feature, we had to make sure that our assignments feature worked first which took a long time. +- Handling dependency issues between `Assignment` and `Person` + - As we created a new entity `Assignment`, we had to ensure that any edits to a `Person` will also cascade update the assignments. + - For example, editing a volunteer's details will also be reflected in the Assignment information. + - This was time consuming to fix as we have to consider all scenarios where this dependency is violated. +- Making the autocomplete box + - Making the dropdown box is challenging as we had to utilise the javafx library and use their `ComboBox` and `SelectionModel`. To integrate this, we had to read their javadocs and understand them. + - In the process of implementing this, we faced many bugs such as arrow keys not working properly to navigate and dropdown box appearing at the wrong times. + +### **Effort Required** +Although some commands implemented were similar to AB3's command and can be reused, we implemented new features and commands to make sure that our application looks and feels different from the original AB3. + + +Furthermore, AB3 only deals with 1 type of entity `Person`, but in our application, we implemented a new entity `Assignment` to capture the assignments assigned to volunteers. +Handling dependency issue between `Person` and `Assignments` were also challenging and required time to test and fix. + + +Hence, a considerable amount of time and effort were put to develop these features and ensure proper testing. + +### **Achievements** +We built a simple application meant for volunteer coordinators to manage their volunteer roster. -1. _{ more test cases …​ }_ +- With the assignment feature, coordinators can keep track of all assignments assigned to volunteers. +- With autocomplete feature, this can significantly reduce the typing needed to maintain their database. +- With export feature, volunteer coordinators can save their files as backup or share with their colleagues. +- With copy feature, volunteer coordinators can easily send out emails to check with volunteers if they want a particular volunteering activity. diff --git a/docs/diagrams/AssignActivityDiagram.puml b/docs/diagrams/AssignActivityDiagram.puml new file mode 100644 index 0000000000..fa17abbb59 --- /dev/null +++ b/docs/diagrams/AssignActivityDiagram.puml @@ -0,0 +1,32 @@ +@startuml +skin rose +skinparam ActivityFontSize 15 +skinparam ArrowFontSize 12 +start +:User assigns a volunteer; +:Parse arguments; +if () then ([Invalid arguments]) + #red:Shows error message; +else ([Valid Arguments]) +:Check whether volunteer is available on that day; +if () then ([Volunteer not available]) + #red:Shows error message; + +else ([Volunteer available]) +:Check whether volunteer already has an assignment on that day; +if () then ([Already has an assignment]) + #red:Shows error message; + +else ([No assignments]) +:Check for duplicate assignments; +if () then ([Duplicate assignments]) + #red:Shows error message; + +else ([No duplicate assignments]) + #green:Create assignment and add; +endif +endif +endif +endif +stop +@enduml diff --git a/docs/diagrams/AssignmentClassDiagram.puml b/docs/diagrams/AssignmentClassDiagram.puml new file mode 100644 index 0000000000..f8d929a1fe --- /dev/null +++ b/docs/diagrams/AssignmentClassDiagram.puml @@ -0,0 +1,25 @@ +@startuml +!include style.puml +skinparam arrowThickness 1.1 +skinparam arrowColor MODEL_COLOR +skinparam classBackgroundColor MODEL_COLOR + +Package Assignment as ModelPackage <>{ + + +Class Person +Class Availability +Class Assignment +Class AssignmentDetails + +Class I #FFFFFF +} + + + + +Assignment *--> "1" Person +Assignment *--> "1" AssignmentDetails +Assignment *--> "1" Availability + +@enduml \ No newline at end of file diff --git a/docs/diagrams/ModelClassDiagram.puml b/docs/diagrams/ModelClassDiagram.puml index 253f66cbee..bfbbd5eb3d 100644 --- a/docs/diagrams/ModelClassDiagram.puml +++ b/docs/diagrams/ModelClassDiagram.puml @@ -14,15 +14,11 @@ Class UserPrefs Class UniquePersonList Class Person -Class Email -Class Name -Class Phone -Class Availability -Class Tag + Class AssignmentList Class Assignment -Class AssignmentDetails + Class I #FFFFFF } @@ -35,30 +31,22 @@ AddressBook .up.|> ReadOnlyAddressBook ModelManager .up.|> Model Model .right.> ReadOnlyUserPrefs Model .left.> ReadOnlyAddressBook -ModelManager -left-> "1" AddressBook +ModelManager -down-> "1" AddressBook ModelManager -right-> "1" UserPrefs UserPrefs .up.|> ReadOnlyUserPrefs -AddressBook *--> "1" UniquePersonList -AddressBook *--> "1" AssignmentList -UniquePersonList --> "*" Person -Person *--> Name -Person *--> Phone -Person *--> Email -Person *--> "*" Availability -Person *--> "*" Tag +AddressBook *-down-> "1" UniquePersonList +AddressBook *-down-> "1" AssignmentList +UniquePersonList -down--> "*" Person -AssignmentList *--> "*" Assignment -Assignment *--> "1"Person -Assignment *--> "1" AssignmentDetails -Assignment *--> "1" Availability + +AssignmentList -down--> "*" Assignment +Assignment -left--> "1"Person Person -[hidden]up--> I UniquePersonList -[hidden]right-> I -Name -[hidden]right-> Phone -Phone -[hidden]right-> Email -Email -[hidden]right-> Availability + ModelManager --> "~* filtered" Person ModelManager --> "~* filtered" Assignment diff --git a/docs/diagrams/PersonClassDiagram.puml b/docs/diagrams/PersonClassDiagram.puml new file mode 100644 index 0000000000..a71bce2f73 --- /dev/null +++ b/docs/diagrams/PersonClassDiagram.puml @@ -0,0 +1,35 @@ +@startuml +!include style.puml +skinparam arrowThickness 1.1 +skinparam arrowColor MODEL_COLOR +skinparam classBackgroundColor MODEL_COLOR + +Package Person as ModelPackage <>{ + +Class Person +Class Email +Class Name +Class Phone +Class Availability +Class Tag + + +Class I #FFFFFF +} + + + +Person *--> "1"Name +Person *--> "1"Phone +Person *--> "1"Email +Person *--> "*" Availability +Person *--> "*" Tag + + + +Name -[hidden]right-> Phone +Phone -[hidden]right-> Email +Email -[hidden]right-> Availability + + +@enduml \ No newline at end of file diff --git a/docs/images/AssignActivityDiagram.png b/docs/images/AssignActivityDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..fd1e42a3619bd091f2afd1ff4312f9b0dbe0b862 GIT binary patch literal 50663 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 E1qHM+=l}o! literal 0 HcmV?d00001 diff --git a/docs/images/ModelClassDiagram.png b/docs/images/ModelClassDiagram.png index 66e46d06fcaaa73ed097161bb43c930776a4d672..9324baa38bc7984e0f7cd0e1c8df96098ef1749b 100644 GIT binary patch literal 30535 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 A`Tzg` literal 42800 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 z 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

-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 R{0RJ<*EiFvK6fSjKLCgsolXD% diff --git a/docs/images/PersonClassDiagram.png b/docs/images/PersonClassDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..778edffc9925de7c463377cb68c80e4bebd14f8f GIT binary patch literal 10154 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%0D1{5~lN5`#{Vr!Cg+E?| zXbtJTMuYJ2m-!Lqf$bI{TtDO_p3Ps0#^{rOjS!-c62#tq2{b(bmK!5YsZK}$P+w@4 zQ6C`;UkF(bt3ngp?t1?;fr0GLlCrY0V*ZK`#I40Z6WQJZ`iJRu6(WF7#r=WDa;GObiR(Ym2q&On4WPsOz_Y_B!-o;#a7YD*;=9&CQL<5W!wkG zHh;vXkI?Re$h!r(2bes`nIiysH>_2V;+}Y(9%5%yg=&6T258t8jPy=Xtc|oK0eITi zT1|+gkc#Y+)NKmQE9%>+Hrin0<(A~OdR~{wmO7a_q)KXx4m{J6oq6F8+rm#sSZ*F; z4)4nr+q5PufappF=``Pp#FFC=J{{b|dTz6%`|L~9h9U!fKHgog77kvE=+swrDn{TK zLgehTQDEOkituyN8{Qoypx0cb>&6#&+)F*lE72FYbo0$V?mG79w7piafH8-!?k@m# z*FVI(Z&q7dyM6yK9}fz8nE+(G(%dXdi}dI|kI`HUx}V>O(+<`ZTw&v8$E*7T3Kwg; z$!uo-SMhigoRlzW^yjIklB6@r7`195qE;_z(p>ntKhC*C&xn{BUKVlan*&tiDj|Tn z)z?^ulrVQQ0%B{|S%K~*cyXnZ^cea}cbR0Sv+P8MH`B=q0-*NBwY@G@v|BnppPV-& zAj#!RzCX7jYc-Fgr(&J}<@%9vkK;Msm`j!Pdi{k^&CoC>#0<2%2~ixAp?Rxx$l;Lj z6WW_S$enY!4BQ!T1knAqO6ezLc4XRK(G#)L9Vm2A33Q)sC{%y#5=gaqC;hp~ByuwE z8#ve~1@nH=MK~bYkhtu4VU_@AGjmpD5xwo*Ov7wZ*u^U9XOPQq=Pn37jkjUvm`6Oy$%<_x!}n#@8X@9C99fI% z%Rxu{)yse^)O-FqPTRK~_}~x;&JYYJS}I(S7EuElNBgCs9}*UXjdOizvwOPX4l?Q; zJ`^audDgYkDLqmr)q2eig+BWa>Ge6<@wYAXX$=iW5ka~`f*{Ejm^mta=nesnR~`~q zg!rVDb-odQt0mpT9V$r8@+v5f0?>o?>*6(SE6OgA98SAHVgu(C{s`&y7G#3Zq<768 zw{oX(7!adh>NiNZkhFjWWrthUhe<_zA$OePDpBaS3P zY>(3yyh`U}q$6Ni(;9R7yT+eQu*ev+4flcL!t;WeWKsFN`qdXD=WD6(@;s`f%Rv;9 z>4228HuO2%yV_k zFx=KCn;F0Od>`@}2c(+y9VOyb6eQ5V=~D1~BHYJZS1VGxRaKuv$?e8RLw?!BPrqrn z?VUKG4fG^e$|9Oy(P;JG4rP2dBkW;~KdE)pJXgxSvpo=JL)MOsBu>VLBlA((Ip?iF zkE}pPN0w2Cwhut^rOKvxmt(UvdmzbK8~W!fmXwCzKYD5ck&lq9ZR9;-BGTB+U{BcQ zA33}omV#;Am{0T^`Mtu#9owM_-jQX6!z#g2F^W1uWue>Yk((T=C(ieiTx?r&0)F|9 zYQ&RcwM5nCLg^Ou9u=ca4i|A{JW*tX1ncN&n17o%N2~lLuwYD*LvGVAW))W9uVRWh zDsCjF|0emHBUh8-F9GHB#@)yI{64cJD!<+yHn#9_JPW?WPl0%g(m42B@yK2b z=S6J~>9PQae=4`NExzwOGL!v&E90pHVS#>VhoPMrZ6kNabLQRzYyKO$_!kBs_$VCI zO+Z&raq~CW0Jp0aY`b1guW&eny7LDi2E2Gc1Q&0kNh@UUC zpv3%te25EnYx9TYitxgP6~lQipY!8~$w;;slxz{Yx3iO+p8m}RxUYkPL`j(i+=D@P zaYf(PHuAl=oOeh{N-{+TuJkxz6P4WF-tzPE(!6 Date: Fri, 12 Apr 2024 21:06:14 +0800 Subject: [PATCH 05/15] Give Credit for code reuse --- docs/DeveloperGuide.md | 2 +- src/main/java/seedu/address/logic/commands/CommandResult.java | 2 +- src/main/java/seedu/address/ui/MainWindow.java | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index c740dd10dc..af608cfdd7 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -9,7 +9,7 @@ title: Developer Guide ## **Acknowledgements** -* {list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well} +* The ListPanelView enum in our `CommandResult.java` is inspired from https://github.com/AY2324S1-CS2103T-W08-4/tp to implement switching views to assignment. Handling list panel view in `MainWindow.java` is also reused with modifications from the same source. -------------------------------------------------------------------------------------------------------------------- diff --git a/src/main/java/seedu/address/logic/commands/CommandResult.java b/src/main/java/seedu/address/logic/commands/CommandResult.java index 24ba39adf0..00fea96b00 100644 --- a/src/main/java/seedu/address/logic/commands/CommandResult.java +++ b/src/main/java/seedu/address/logic/commands/CommandResult.java @@ -23,7 +23,7 @@ public class CommandResult { private final boolean exit; /** Application List Panel Selection */ - + // ListPanelView to switch views is inspired by https://github.com/AY2324S1-CS2103T-W08-4/tp public enum ListPanelView { NO_EFFECT, PERSON, diff --git a/src/main/java/seedu/address/ui/MainWindow.java b/src/main/java/seedu/address/ui/MainWindow.java index d34296ecc1..35323ce89c 100644 --- a/src/main/java/seedu/address/ui/MainWindow.java +++ b/src/main/java/seedu/address/ui/MainWindow.java @@ -140,6 +140,9 @@ private void setWindowDefaultSize(GuiSettings guiSettings) { } } + //@@author Benson15912 - reused and modified + //Reused from https://github.com/AY2324S1-CS2103T-W08-4/tp + // with minor modifications /** * Sets the display of the panel between Assignments and Person * @param display @@ -159,6 +162,7 @@ private void handleListPanel(CommandResult.ListPanelView display) { } } + //@@author /** * Opens the help window or focuses on it if it's already opened. */ From 2a7b72e6768bfd74ba3a7bcb575cb1fcef6704cb Mon Sep 17 00:00:00 2001 From: "bensonang36@gmail.com" Date: Fri, 12 Apr 2024 21:13:09 +0800 Subject: [PATCH 06/15] Fix DG --- docs/DeveloperGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index af608cfdd7..e2449e9281 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -95,7 +95,7 @@ The sequence diagram below illustrates the interactions within the `Logic` compo ![Interactions Inside the Logic Component for the `delete 1` Command](images/DeleteSequenceDiagram.png) -

:information_source: **Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram. +
:information_source: **Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram. Also, confirmation feature is omitted from this sequence diagram for simplification.
How the `Logic` component works: From 78a5f067ba303a8f0f0ec7993ead73da1c1d2719 Mon Sep 17 00:00:00 2001 From: "bensonang36@gmail.com" Date: Fri, 12 Apr 2024 21:14:16 +0800 Subject: [PATCH 07/15] Fix typo --- docs/DeveloperGuide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index e2449e9281..5eafa12ad6 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -169,7 +169,7 @@ The `Storage` component, ### Common classes -Classes used by multiple components are in the `seedu.addressbook.commons` package. +Classes used by multiple components are in the `seedu.address.commons` package. -------------------------------------------------------------------------------------------------------------------- From a623ab003b2d73db10708007df15f2d4b4a93a22 Mon Sep 17 00:00:00 2001 From: "bensonang36@gmail.com" Date: Fri, 12 Apr 2024 21:15:12 +0800 Subject: [PATCH 08/15] Fix spacing --- docs/DeveloperGuide.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 5eafa12ad6..5729888eb9 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -216,12 +216,19 @@ This feature allows the user to assign a volunteer to an volunteering activity. ![AssignActivityDiagram](images/AssignActivityDiagram.png) 1. The user launches the application. + 2. The user executes `assign 1 d/Willing Hearts a/01/03/2024` to assign the volunteer at index 1. + 3. `Logic Manager` will then call `AddressBookParser#parseCommand(input)` to parse the input and pass it to `AddAssignmentCommandParser`. + 4. `AddAssignmentCommandParser` will check for valid `AssignmentDetails` , `Availability` and `AssignedPerson`. + 5. Then, it creates a `AddAssignmentCommand` object which will be executed. + 6. During execution, it will check whether a volunteer is available on that day, and if he/she already has an existing assignment on that day. + 7. It will then finally check for any duplicate assignments. + 8. After all these checks, the `Assignment` is then created and added to the application. ### Copy emails to Clipboard feature From e56d7dfa6a4387102db543c8fe4b5ae1074dbe26 Mon Sep 17 00:00:00 2001 From: "bensonang36@gmail.com" Date: Fri, 12 Apr 2024 21:18:31 +0800 Subject: [PATCH 09/15] Fix usecases --- docs/DeveloperGuide.md | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 5729888eb9..ab36e464ec 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -544,26 +544,18 @@ Use Case ends. Use Case ends. -**UC12: Remove all availabilities before a certain date** +**UC12: Remove all availabilities before today** **Actor**: Coordinator (Bob) **Precondition**: User has launched the application and is on the main screen. **Main Success Scenario**: -1. User requests to clear all availabilities before a date. -2. The system displays a success message and updates all the persons and assignments. +1. User requests to clear all availabilities before today. +2. The system displays a success message and updates all the persons and assignments accordingly. Use Case ends. -**Extensions**: - -- 1a. User enters an invalid availability. - - 1a1. Match shows an error message. - - Use case ends. -- 1b. User enters an availability with no volunteers having any availabilities before that. - - 1b1. Match shows an error message. - - Use case ends. **UC13: Copy all emails of the current volunteer list** @@ -590,6 +582,12 @@ Use Case ends. Use Case ends. +**Extensions**: + +- 1a. Addressbook.json file does not exist + - 1a1. Match shows an error message. + - Use case ends. + From 51c16bd63116738a1e328701647542e477799ac4 Mon Sep 17 00:00:00 2001 From: "bensonang36@gmail.com" Date: Fri, 12 Apr 2024 21:23:25 +0800 Subject: [PATCH 10/15] Add more glossary terms --- docs/DeveloperGuide.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index ab36e464ec..620860fe42 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -603,6 +603,13 @@ Use Case ends. * **Mainstream OS**: Windows, Linux, Unix, MacOS * **Private contact detail**: A contact detail that is not meant to be shared with others +* **Volunteer**: An individual who offers their time and services for various activities or tasks. +* **Coordinator**: An employee who manages volunteers and assignments in a volunteer organisation. +* **Availability**: Refers to the days during which a volunteer is available to participate in activities. +* **AssignmentDetails**: Information related to a specific assignment, such as the task description or location. +* **UI**: Abbreviation for User Interface, the visual interface through which users interact with the application. +* **API**: Abbreviation for Application Programming Interface, which defines the interactions between different components of the application. +* **CSV**: Abbreviation for Comma-Separated Values, a file format used for storing tabular data. -------------------------------------------------------------------------------------------------------------------- From 652d75a51b8602c80a62c08d3c61aa354633e002 Mon Sep 17 00:00:00 2001 From: "bensonang36@gmail.com" Date: Fri, 12 Apr 2024 21:24:59 +0800 Subject: [PATCH 11/15] Fix typo --- docs/DeveloperGuide.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 620860fe42..d6665685b2 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -829,7 +829,8 @@ testers are expected to do more *exploratory* testing. 1. Dealing with missing/corrupted data files 1. Edit `addressbook.json` such that that stored values no longer make sense. For example: Changing a volunteer's details while not changing the assignment details. - 2. Launch Match through the terminal by running `java -jar Match.jar` + + Launch Match through the terminal by running `java -jar Match.jar` Expected: Match launches but the lists are empty. From 69179ba85dd4a4245058eeaf35dcc1ddbcfe492a Mon Sep 17 00:00:00 2001 From: "bensonang36@gmail.com" Date: Fri, 12 Apr 2024 21:34:09 +0800 Subject: [PATCH 12/15] Fix Checkstyle --- docs/DeveloperGuide.md | 26 +++++++++++------------ docs/diagrams/AssignmentClassDiagram.puml | 10 +-------- docs/diagrams/PersonClassDiagram.puml | 12 +---------- 3 files changed, 14 insertions(+), 34 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index d6665685b2..b06f720b24 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -127,7 +127,7 @@ The `Model` component, * stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects. * 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) -
:information_source: +
:information_source: **Note:**The focus of the above class diagram is on the Person and Assignment classes as well as the relevant lists that contain them. More details will be provided in below.
@@ -556,7 +556,7 @@ Use Case ends. Use Case ends. - + **UC13: Copy all emails of the current volunteer list** @@ -588,7 +588,7 @@ Use Case ends. - 1a1. Match shows an error message. - Use case ends. - + @@ -629,7 +629,7 @@ testers are expected to do more *exploratory* testing. 1. Download the jar file and copy into an empty folder 2. Launch Match by running the jar file in your terminal. (java -jar Match.jar) - + Expected: Shows the GUI with a set of sample volunteers. The window size may not be optimum. 2. Saving window preferences @@ -641,7 +641,7 @@ testers are expected to do more *exploratory* testing. 3. Exit Application 1. While in Match, click on the `File` button and press `Exit`. - + Expected: The application will now close. @@ -654,7 +654,7 @@ testers are expected to do more *exploratory* testing. ### Adding a volunteer 1. Add a new volunteer 1. Test Case: `add n/John Doe p/12345678 e/john@example.com` - + Expected: Volunteer with the name "John Doe", phone number "12345678", email "john@example.com" is added 2. Test Case: `add n/John Doe p/12345678 e/john@example.com a/01/03/2024` @@ -669,7 +669,7 @@ testers are expected to do more *exploratory* testing. ### Viewing the list of volunteers 1. List all volunteers 1. Test Case: `list` - + Expected: The list of all volunteers are shown 2. Test Case: `list [any extra keywords]` @@ -717,7 +717,6 @@ testers are expected to do more *exploratory* testing. 5. Test Case: `edit 1 t/` Expected: Clears all tags of the volunteer. - ### Adding availability to a volunteer 1. Add an availability to a volunteer @@ -740,7 +739,7 @@ testers are expected to do more *exploratory* testing. 1. Removes an availability from a volunteer 1. Prerequisites: There must be at least one volunteer present in the current list. 2. Test Case: `removeavail 1 [existing availability]` - + Expected: The availability is removed from the volunteer at index `1`. 3. Test Case: `removeavail 1 [any availability that the volunteer does not have]` @@ -759,7 +758,7 @@ testers are expected to do more *exploratory* testing. 1. Assigns a volunteer to an assignment. 1. Prerequisites: There must be at least one available volunteer present in the current list. 2. Test Case: `assign 1 d/Willing Hearts a/[Existing availability which is not assigned]` - + Expected: A new assignment is created with the assigned person at index 1. 3. Test Case: `assign 1 d/Willing Hearts a/[any availability that the volunteer does not have]` @@ -773,7 +772,7 @@ testers are expected to do more *exploratory* testing. 6. Test Case: `assign d/ a/[Existing availability]` Expected: Error thrown, stating that details cannot be empty. - + ### View list of assignments 1. Views the list of every assignment. 1. Test Case: `lista` @@ -807,7 +806,7 @@ testers are expected to do more *exploratory* testing. ### Copy emails of the person list. 1. Copy emails of every volunteer in the current volunteer list. 1. Test Case: `copy` - + Expected: All emails in the current volunteer list are copied to your clipboard. 2. Test Case: `copy [extra keywords]` @@ -829,12 +828,11 @@ testers are expected to do more *exploratory* testing. 1. Dealing with missing/corrupted data files 1. Edit `addressbook.json` such that that stored values no longer make sense. For example: Changing a volunteer's details while not changing the assignment details. - + Launch Match through the terminal by running `java -jar Match.jar` Expected: Match launches but the lists are empty. - ## **Appendix: Planned Enhancements** ## **Appendix: Effort** diff --git a/docs/diagrams/AssignmentClassDiagram.puml b/docs/diagrams/AssignmentClassDiagram.puml index f8d929a1fe..d9cca9dc95 100644 --- a/docs/diagrams/AssignmentClassDiagram.puml +++ b/docs/diagrams/AssignmentClassDiagram.puml @@ -5,21 +5,13 @@ skinparam arrowColor MODEL_COLOR skinparam classBackgroundColor MODEL_COLOR Package Assignment as ModelPackage <>{ - - Class Person Class Availability Class Assignment Class AssignmentDetails - Class I #FFFFFF } - - - - Assignment *--> "1" Person Assignment *--> "1" AssignmentDetails Assignment *--> "1" Availability - -@enduml \ No newline at end of file +@enduml diff --git a/docs/diagrams/PersonClassDiagram.puml b/docs/diagrams/PersonClassDiagram.puml index a71bce2f73..7f13174410 100644 --- a/docs/diagrams/PersonClassDiagram.puml +++ b/docs/diagrams/PersonClassDiagram.puml @@ -5,31 +5,21 @@ skinparam arrowColor MODEL_COLOR skinparam classBackgroundColor MODEL_COLOR Package Person as ModelPackage <>{ - Class Person Class Email Class Name Class Phone Class Availability Class Tag - - Class I #FFFFFF } - - Person *--> "1"Name Person *--> "1"Phone Person *--> "1"Email Person *--> "*" Availability Person *--> "*" Tag - - - Name -[hidden]right-> Phone Phone -[hidden]right-> Email Email -[hidden]right-> Availability - - -@enduml \ No newline at end of file +@enduml From 3fa971a6181642a88c057ab2bcb3cf46eb9312d9 Mon Sep 17 00:00:00 2001 From: "bensonang36@gmail.com" Date: Fri, 12 Apr 2024 21:35:37 +0800 Subject: [PATCH 13/15] Fix Checkstyle --- docs/DeveloperGuide.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index b06f720b24..c8f8c74079 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -627,7 +627,6 @@ testers are expected to do more *exploratory* testing. 1. Initial launch 1. Download the jar file and copy into an empty folder - 2. Launch Match by running the jar file in your terminal. (java -jar Match.jar) Expected: Shows the GUI with a set of sample volunteers. The window size may not be optimum. @@ -832,7 +831,7 @@ testers are expected to do more *exploratory* testing. Launch Match through the terminal by running `java -jar Match.jar` Expected: Match launches but the lists are empty. - + ## **Appendix: Planned Enhancements** ## **Appendix: Effort** From 6fe0e51e5edd0914fa6e9d9d0f999d5c088be019 Mon Sep 17 00:00:00 2001 From: "bensonang36@gmail.com" Date: Sat, 13 Apr 2024 20:27:30 +0800 Subject: [PATCH 14/15] Fix usecase numbering --- docs/DeveloperGuide.md | 87 ++++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 46 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index c8f8c74079..83df800b49 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -348,11 +348,11 @@ Use Case ends. Use Case ends. **Extensions**: -- 1a. User enters an invalid command. +- 2a. User enters an invalid command. - 1a1. Match shows an error message - Use case ends. -- 1b. There are no volunteers in the address book. +- 2b. There are no volunteers in the address book. - 1b1. The system displays a message: "There are no volunteers in the address book." - Use case ends. @@ -369,8 +369,8 @@ Use Case ends. Use case ends. **Extensions**: -- 1a. There are no volunteers in the address book. - - 1a1. The system displays a message: "There are no volunteers in the address book." +- 2a. There are no volunteers in the address book. + - 2a1. The system displays a message: "There are no volunteers in the address book." - Use case ends. **UC04: Remove a volunteer** @@ -381,23 +381,21 @@ Use case ends. **Main Success Scenario**: 1. User requests to remove a volunteer from Match -2. User enters the person to remove. -3. Match asks for confirmation. -4. User confirms deletion. -5. The system displays a success message and removed the volunteer from the app. +2. Match asks for confirmation. +3. User confirms deletion. +4. The system displays a success message and removed the volunteer from the app. Use Case ends. **Extensions**: -- 2a. User enters an invalid volunteer. - - 2a1. Match shows an error message - - Use case ends. - - 3a. User cancels deletion - 3a1. The system acknowledges the cancellation and does nothing. - Use case ends. +- 5a. User enters an invalid volunteer. + - 5a1. Match shows an error message + - Use case ends. **UC05: Edit a volunteer's details** @@ -408,19 +406,18 @@ Use Case ends. **Main Success Scenario**: 1. User requests to edit a volunteer's details. -2. User enters the new details -3. The system displays a success message and updates the volunteer's details. +2. The system displays a success message and updates the volunteer's details. Use Case ends. **Extensions**: -- 1a. User enters an invalid volunteer. - - 1a1. Match shows an error message. +- 2a. User enters an invalid volunteer. + - 2a1. Match shows an error message. - Use case ends. -- 2a. User enters invalid details. - - 2a1. Match shows an error message. +- 2b. User enters invalid details. + - 2b1. Match shows an error message. - Use case ends. **UC06: Add availability** @@ -431,19 +428,18 @@ Use Case ends. **Main Success Scenario**: 1. User requests to add an availability to an existing volunteer. -2. User enters the availability. -3. The system displays a success message and updates the volunteer's availability. +2. The system displays a success message and updates the volunteer's availability. Use Case ends. **Extensions**: -- 1a. User enters an invalid volunteer. - - 1a1. Match shows an error message. +- 2a. User enters an invalid volunteer. + - 2a1. Match shows an error message. - Use case ends. -- 2a. User enters invalid availability. - - 2a1. Match shows an error message. +- 2b. User enters invalid availability. + - 2b1. Match shows an error message. - Use case ends. @@ -455,23 +451,22 @@ Use Case ends. **Main Success Scenario**: 1. User requests to remove an availability from an existing volunteer. -2. User enters the availability to be removed. -3. The system displays a success message and updates the volunteer's availability. +2. The system displays a success message and updates the volunteer's availability. Use Case ends. **Extensions**: -- 1a. User enters an invalid volunteer. - - 1a1. Match shows an error message. - - Use case ends. - -- 2a. User enters invalid availability. +- 2a. User enters an invalid volunteer. - 2a1. Match shows an error message. - Use case ends. -- 2b. User enters a valid availability but volunteer does not have that availability. + +- 2b. User enters invalid availability. - 2b1. Match shows an error message. - Use case ends. +- 2c. User enters a valid availability but volunteer does not have that availability. + - 2c1. Match shows an error message. + - Use case ends. **UC08: Assign a volunteer to an activity** @@ -488,18 +483,18 @@ Use Case ends. **Extensions**: -- 1a. User enters an invalid volunteer. - - 1a1. Match shows an error message. +- 3a. User enters an invalid volunteer. + - 3a1. Match shows an error message. - Use case ends. -- 2a. User enters invalid availability. - - 2a1. Match shows an error message. +- 3b. User enters invalid availability. + - 3b1. Match shows an error message. - Use case ends. -- 2b. User enters a valid availability but volunteer is not available. - - 2b1. Match shows an error message. +- 3c. User enters a valid availability but volunteer is not available. + - 3c1. Match shows an error message. - Use case ends. -- 2c. User enters invalid details - - 2c1. Match shows an error message. +- 3d. User enters invalid details + - 3d1. Match shows an error message. - Use case ends. **UC09: View the list of assignments** @@ -528,8 +523,8 @@ Use Case ends. **Extensions**: -- 1a. User enters an invalid assignment. - - 1a1. Match shows an error message. +- 2a. User enters an invalid assignment. + - 2a1. Match shows an error message. - Use case ends. **UC11: Reset all data** @@ -584,8 +579,8 @@ Use Case ends. **Extensions**: -- 1a. Addressbook.json file does not exist - - 1a1. Match shows an error message. +- 2a. Addressbook.json file does not exist + - 2a1. Match shows an error message. - Use case ends. @@ -639,7 +634,7 @@ testers are expected to do more *exploratory* testing. Expected: The most recent window size and location is retained. 3. Exit Application - 1. While in Match, click on the `File` button and press `Exit`. + 1. While in Match, type `exit` in the command box and enter. Expected: The application will now close. @@ -777,7 +772,7 @@ testers are expected to do more *exploratory* testing. 1. Test Case: `lista` Expected: The list of all assignments is shown on the GUI. - 2. Test Case: `lista [extra inputs` + 2. Test Case: `lista [extra inputs]` Expected: Same as previous. From 83436d9ca684ad58ad291ced4c2413a45088ab86 Mon Sep 17 00:00:00 2001 From: "bensonang36@gmail.com" Date: Sun, 14 Apr 2024 19:47:38 +0800 Subject: [PATCH 15/15] Fix typo --- docs/DeveloperGuide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 83df800b49..bf5a6b4ae7 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -393,8 +393,8 @@ Use Case ends. - 3a1. The system acknowledges the cancellation and does nothing. - Use case ends. -- 5a. User enters an invalid volunteer. - - 5a1. Match shows an error message +- 4a. User enters an invalid volunteer. + - 4a1. Match shows an error message - Use case ends.