From 45b49266252ef911a20a21cfc965278412e98611 Mon Sep 17 00:00:00 2001 From: coraleaf0602 Date: Tue, 5 Nov 2024 19:21:40 +0800 Subject: [PATCH 01/28] Rename portfolio link under Cora Zhang --- docs/AboutUs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/AboutUs.md b/docs/AboutUs.md index 7046cfee7f..307a06b360 100644 --- a/docs/AboutUs.md +++ b/docs/AboutUs.md @@ -7,7 +7,7 @@ layout: default Display | Name | Github Profile | Portfolio --------|:-----------:|:--------------------------------------:|:---------: ![JZ](facepic_JZ.jpg) | OngJunZheng | [Github](https://github.com/kaboomzxc) | [Portfolio](team/ongjunzheng.md) -![](https://via.placeholder.com/100.png?text=Photo) | Cora Zhang | [Github](https://github.com/coraleaf0602) | [Portfolio](team/coraleaf0602.md) +![](https://via.placeholder.com/100.png?text=Photo) | Cora Zhang | [Github](https://github.com/coraleaf0602) | [Portfolio](team/corazhang.md) ![](https://via.placeholder.com/100.png?text=Photo) | Glendon Tan | [Github](https://github.com/G13nd0n) | [Portfolio](docs/team/GlendonTan.md) ![](https://via.placeholder.com/100.png?text=Photo) | Ma Yitao | [Github](https://github.com/PrinceCatt) | [Portfolio](docs/team/yitao.md) ![](https://via.placeholder.com/100.png?text=Photo) | Wong Yen Theng | [Github](https://github.com/yentheng0110) | [Portfolio](docs/team/wongyentheng.md) \ No newline at end of file From f6846f1c444cd0248a755245a56834e576337b29 Mon Sep 17 00:00:00 2001 From: kaboomzxc Date: Wed, 6 Nov 2024 23:47:54 +0800 Subject: [PATCH 02/28] Main Class Test --- src/test/java/bookbob/MainTest.java | 521 ++++++++++++++++++++++++++++ 1 file changed, 521 insertions(+) create mode 100644 src/test/java/bookbob/MainTest.java diff --git a/src/test/java/bookbob/MainTest.java b/src/test/java/bookbob/MainTest.java new file mode 100644 index 0000000000..0927d4b3fe --- /dev/null +++ b/src/test/java/bookbob/MainTest.java @@ -0,0 +1,521 @@ +package bookbob; + +import bookbob.entity.Records; +import bookbob.entity.AppointmentRecord; +import bookbob.functions.CommandHandler; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.PrintStream; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class MainTest { + private final ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream(); + private final PrintStream standardOut = System.out; + private Records records; + private AppointmentRecord appointmentRecord; + private CommandHandler commandHandler; + private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + private final String TODAY = LocalDate.now().format(formatter); + private final String TOMORROW = LocalDate.now().plusDays(1).format(formatter); + private final String YESTERDAY = LocalDate.now().minusDays(1).format(formatter); + + @BeforeEach + void setUp() throws IOException { + System.setOut(new PrintStream(outputStreamCaptor)); + records = new Records(); + appointmentRecord = new AppointmentRecord(); + commandHandler = new CommandHandler(); + } + + @AfterEach + void tearDown() { + System.setOut(standardOut); + } + + // Test different command combinations + @Test + void testMultipleCommandSequences() { + String input = "add n/John Doe ic/S9876543A p/91234567 d/Fever m/Paracetamol v/01-11-2024 14:30\n" + + "add n/Jane Smith ic/S8765432B p/92345678 d/Cough m/Cough Syrup v/01-11-2024 15:30\n" + + "list\n" + + "findVisit S9876543A\n" + + "findDiagnosis Fever\n" + + "findMedication Paracetamol\n" + + "appointment n/John Doe ic/S9876543A date/02-11-2024 time/14:30\n" + + "listAppointments\n" + + "exit\n"; + provideInput(input); + + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("Patient John Doe with NRIC S9876543A added")); + assertTrue(output.contains("Patient Jane Smith with NRIC S8765432B added")); + assertTrue(output.contains("Appointment on 02-11-2024 14:30")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // Test all error conditions in addVisit + @Test + void testAddVisitErrors() { + String input = "addVisit\n" + // Missing all parameters + "addVisit ic/S9876543A\n" + // Missing visit date + "addVisit v/01-11-2024 14:30\n" + // Missing NRIC + "addVisit ic/S9876543A v/invalid-date\n" + // Invalid date format + "addVisit ic/INVALID v/01-11-2024 14:30\n" + // Invalid NRIC format + "exit\n"; + provideInput(input); + + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("Please provide the patient's NRIC")); + assertTrue(output.contains("Please provide the visit date")); + assertTrue(output.contains("Invalid date format")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // Test all error conditions in editVisit + @Test + void testEditVisitErrors() { + String input = "add n/John Doe ic/S9876543A v/01-11-2024 14:30\n" + + "editVisit\n" + // Missing all parameters + "editVisit ic/S9876543A\n" + // Missing date + "editVisit date/01-11-2024 14:30\n" + // Missing NRIC + "editVisit ic/S9876543A date/invalid-date\n" + // Invalid date + "editVisit ic/INVALID date/01-11-2024 14:30\n" + // Invalid NRIC + "exit\n"; + provideInput(input); + + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("Please provide the patient's NRIC")); + assertTrue(output.contains("Please provide a valid visit date")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // Test all error conditions in appointment + @Test + void testAppointmentErrors() { + String input = "appointment\n" + // Missing all parameters + "appointment n/John Doe\n" + // Missing NRIC + "appointment n/John Doe ic/S9876543A\n" + // Missing date and time + "appointment n/John Doe ic/S9876543A date/01-11-2024\n" + // Missing time + "appointment n/John Doe ic/S9876543A date/invalid time/14:30\n" + // Invalid date + "appointment n/John Doe ic/S9876543A date/01-11-2024 time/invalid\n" + // Invalid time + "exit\n"; + provideInput(input); + + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("Please provide the patient's name")); + assertTrue(output.contains("Please provide the patient's NRIC")); + assertTrue(output.contains("Please provide the date")); + assertTrue(output.contains("Please provide the time")); + assertTrue(output.contains("Error in adding appointment")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // Test appointment time slot validation + @Test + void testAppointmentTimeSlotValidation() { + String input = "appointment n/John Doe ic/S9876543A date/01-11-2024 time/14:30\n" + + "appointment n/Jane Smith ic/S8765432B date/01-11-2024 time/14:30\n" + // Same time slot + "appointment n/Bob Wilson ic/S7654321C date/01-11-2024 time/14:45\n" + // Within 30 min + "exit\n"; + provideInput(input); + + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("There is already an appointment at the given timeslot")); + assertTrue(output.contains("The next available timeslot is:")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // Test find command with various criteria + @Test + void testFindWithMultipleCriteria() { + String input = "add n/John Doe ic/S9876543A p/91234567 d/Fever m/Paracetamol " + + "ha/123 Main St dob/01-01-1990 v/01-11-2024 14:30 al/Peanuts s/Male mh/Asthma\n" + + "find n/John\n" + + "find ic/S987\n" + + "find p/91234567\n" + + "find ha/Main\n" + + "find dob/01-01-1990\n" + + "find al/Peanuts\n" + + "find s/Male\n" + + "find mh/Asthma\n" + + "exit\n"; + provideInput(input); + + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("Matching patients")); + assertEquals(8, output.split("Matching patients").length - 1); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // Test deleteAppointment with various conditions + @Test + void testDeleteAppointmentScenarios() { + String input = "appointment n/John Doe ic/S9876543A date/01-11-2024 time/14:30\n" + + "deleteAppointment ic/S9876543A date/01-11-2024 time/14:30\n" + // Valid deletion + "deleteAppointment ic/INVALID date/01-11-2024 time/14:30\n" + // Invalid NRIC + "deleteAppointment ic/S9876543A date/invalid time/14:30\n" + // Invalid date + "deleteAppointment ic/S9876543A date/01-11-2024 time/invalid\n" + // Invalid time + "exit\n"; + provideInput(input); + + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("has been deleted")); + assertTrue(output.contains("Error in deleting appointment")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // Test input validation edge cases + @Test + void testInputValidationEdgeCases() { + String input = "add n/ ic/S9876543A v/01-11-2024 14:30\n" + // Empty name + "add n/John Doe ic/ v/01-11-2024 14:30\n" + // Empty NRIC + "add n/John Doe ic/S9876543A v/ \n" + // Empty visit date + "add n/John Doe ic/S9876543A v/01-11-2024 14:30 p/ \n" + // Empty phone + "add n/John Doe ic/S9876543A v/01-11-2024 14:30 ha/ \n" + // Empty address + "exit\n"; + provideInput(input); + + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("Please provide")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // Test concurrent operations + @Test + void testConcurrentOperations() { + String input = "add n/John Doe ic/S9876543A v/01-11-2024 14:30\n" + + "appointment n/John Doe ic/S9876543A date/01-11-2024 time/14:30\n" + + "list\n" + + "listAppointments\n" + + "findVisit S9876543A\n" + + "findAppointment n/John\n" + + "exit\n"; + provideInput(input); + + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("Patient John Doe")); + assertTrue(output.contains("Appointment on 01-11-2024 14:30")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void provideInput(String data) { + ByteArrayInputStream testIn = new ByteArrayInputStream(data.getBytes()); + System.setIn(testIn); + } + + @Test + void testAddCommand_AllFields() { + String input = "add n/John Doe ic/S9876543A p/91234567 d/Fever,Cough m/Paracetamol,Syrup " + + "ha/123 Main St dob/01-01-1990 v/01-11-2024 14:30 al/Peanuts s/Male mh/Asthma\n" + + "add n/Jane Smith ic/S8765432B p/92345678 v/01-11-2024 15:30\n" + // Minimal fields + "add n/Bob Wilson ic/S7654321C v/01-11-2024 16:30 d/Flu\n" + // With diagnosis + "add n/Alice Brown ic/S6543210D v/01-11-2024 17:30 m/Ibuprofen\n" + // With medication + "list\n" + + "exit\n"; + provideInput(input); + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("Patient John Doe with NRIC S9876543A added")); + assertTrue(output.contains("Fever, Cough")); + assertTrue(output.contains("Patient Jane Smith with NRIC S8765432B added")); + assertTrue(output.contains("Patient Bob Wilson with NRIC S7654321C added")); + assertTrue(output.contains("Patient Alice Brown with NRIC S6543210D added")); + assertTrue(output.contains("Ibuprofen")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + void testEditCommand_AllFieldVariations() { + String input = "add n/John Doe ic/S9876543A v/01-11-2024 14:30 p/91234567\n" + + "edit ic/S9876543A /to n/James Doe\n" + + "edit ic/S9876543A /to newic/S9876543B\n" + + "edit ic/S9876543B /to p/98765432\n" + + "edit ic/S9876543B /to ha/New Address\n" + + "edit ic/S9876543B /to dob/01-01-1991\n" + + "edit ic/S9876543B /to al/Peanuts,Dust\n" + + "edit ic/S9876543B /to s/Male\n" + + "edit ic/S9876543B /to mh/Asthma,Diabetes\n" + + "list\n" + + "exit\n"; + provideInput(input); + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("Patient record updated successfully")); + assertTrue(output.contains("James Doe")); + assertTrue(output.contains("S9876543B")); + assertTrue(output.contains("98765432")); + assertTrue(output.contains("New Address")); + assertTrue(output.contains("01-01-1991")); + assertTrue(output.contains("Peanuts, Dust")); + assertTrue(output.contains("Male")); + assertTrue(output.contains("Asthma, Diabetes")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + void testVisitOperations_ComplexScenarios() { + String input = "add n/John Doe ic/S9876543A v/01-11-2024 14:30\n" + + "addVisit ic/S9876543A v/02-11-2024 14:30 d/Fever m/Paracetamol\n" + + "addVisit ic/S9876543A v/03-11-2024 14:30 d/Cold m/Syrup\n" + + "editVisit ic/S9876543A date/02-11-2024 14:30 d/Severe Fever\n" + + "editVisit ic/S9876543A date/03-11-2024 14:30 m/Strong Syrup\n" + + "findVisit S9876543A\n" + + "findDiagnosis Severe Fever\n" + + "findMedication Strong Syrup\n" + + "exit\n"; + provideInput(input); + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("Visit added successfully")); + assertTrue(output.contains("Visit record updated successfully")); + assertTrue(output.contains("Severe Fever")); + assertTrue(output.contains("Strong Syrup")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + void testDateTimeValidations() { + String input = "add n/John Doe ic/S9876543A v/32-13-2024 14:30\n" + // Invalid date + "add n/John Doe ic/S9876543A v/01-11-2024 25:00\n" + // Invalid hour + "add n/John Doe ic/S9876543A v/01-11-2024 14:60\n" + // Invalid minute + "appointment n/John Doe ic/S9876543A date/32-13-2024 time/14:30\n" + // Invalid date + "appointment n/John Doe ic/S9876543A date/01-11-2024 time/25:00\n" + // Invalid hour + "editVisit ic/S9876543A date/32-13-2024 14:30\n" + // Invalid date + "exit\n"; + provideInput(input); + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("Invalid") || output.contains("Error")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + void testSearchOperations_AllCriteria() { + String input = "add n/John Doe ic/S9876543A p/91234567 d/Fever m/Paracetamol " + + "ha/123 Main St dob/01-01-1990 v/01-11-2024 14:30 al/Peanuts s/Male mh/Asthma\n" + + "find n/John\n" + + "find ic/S987\n" + + "find p/91234567\n" + + "find d/Fever\n" + + "find m/Paracetamol\n" + + "find ha/Main\n" + + "find dob/01-01-1990\n" + + "find al/Peanuts\n" + + "find s/Male\n" + + "find mh/Asthma\n" + + "exit\n"; + provideInput(input); + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertEquals(10, output.split("Matching patients").length - 1); + assertTrue(output.contains("John Doe")); + assertTrue(output.contains("S9876543A")); + assertTrue(output.contains("91234567")); + assertTrue(output.contains("Main St")); + assertTrue(output.contains("Peanuts")); + assertTrue(output.contains("Male")); + assertTrue(output.contains("Asthma")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + void testDeleteOperations_ComplexScenarios() { + String input = "add n/John Doe ic/S9876543A v/01-11-2024 14:30\n" + + "addVisit ic/S9876543A v/02-11-2024 14:30 d/Fever m/Paracetamol\n" + + "appointment n/John Doe ic/S9876543A date/03-11-2024 time/14:30\n" + + "add n/Jane Smith ic/S8765432B v/01-11-2024 15:30\n" + + "delete S9876543A\n" + // Delete first patient + "list\n" + + "delete S8765432B\n" + // Delete second patient + "list\n" + + "exit\n"; + provideInput(input); + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("has been deleted")); + assertTrue(output.contains("No patients found")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + void testInvalidCommandsAndErrors() { + String input = "invalidcommand\n" + + "add n/John Doe\n" + // Missing required fields + "edit ic/nonexistent /to n/New Name\n" + // Nonexistent patient + "editVisit ic/nonexistent date/01-11-2024 14:30\n" + // Nonexistent patient + "addVisit ic/nonexistent v/01-11-2024 14:30\n" + // Nonexistent patient + "find invalidformat\n" + // Invalid find format + "findVisit nonexistent\n" + // Nonexistent patient + "findDiagnosis nonexistent\n" + // Nonexistent diagnosis + "findMedication nonexistent\n" + // Nonexistent medication + "delete nonexistent\n" + // Nonexistent patient + "help\n" + // Valid help command + "exit\n"; + provideInput(input); + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("Unknown command")); + assertTrue(output.contains("Please provide")); + assertTrue(output.contains("No patient found")); + assertTrue(output.contains("Action")); + assertTrue(output.contains("Format")); + } catch (IOException e) { + e.printStackTrace(); + } + + } + @Test + void testCheckAvailabilityAllBranches() { + String input = String.format( + "appointment n/P1 ic/S1111111A date/%s time/09:00\n" + // Initial appointment + "appointment n/P2 ic/S2222222B date/%s time/09:00\n" + // Same time (should get next slot) + "appointment n/P3 ic/S3333333C date/%s time/09:15\n" + // During first appointment + "appointment n/P4 ic/S4444444D date/%s time/09:00\n" + // Different day + "appointment n/P5 ic/S5555555E date/%s time/09:00\n" + // Previous day + "appointment n/P6 ic/S6666666F date/%s time/09:45\n" + // Clear slot + "appointment n/P7 ic/S7777777G date/%s time/09:25\n" + // Overlapping end + "listAppointments\nexit\n", + TODAY, TODAY, TODAY, TOMORROW, YESTERDAY, TODAY, TODAY); + + provideInput(input); + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("next available timeslot")); + assertTrue(output.contains("Appointment on " + TODAY + " 09:00")); + assertTrue(output.contains("Appointment on " + TODAY + " 09:45")); + assertTrue(output.contains("Appointment on " + TOMORROW + " 09:00")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + void testCompletePatientLifecycle() { + String input = "add n/John Doe ic/S1234567A p/91234567 d/Fever m/Paracetamol v/01-11-2024 14:30\n" + + "addVisit ic/S1234567A v/02-11-2024 14:30 d/Followup,Check m/None\n" + + "editVisit ic/S1234567A date/02-11-2024 14:30 newDate/03-11-2024 14:30\n" + + "edit ic/S1234567A /to p/98765432 ha/New Address\n" + + "appointment n/John Doe ic/S1234567A date/04-11-2024 time/14:30\n" + + "list\n" + + "listAppointments\n" + + "delete S1234567A\n" + + "exit\n"; + + provideInput(input); + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("Patient record updated successfully")); + assertTrue(output.contains("Visit record updated successfully")); + assertTrue(output.contains("has been deleted")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + void testAppointmentTimeBoundaries() { + String input = String.format( + "appointment n/P1 ic/S1111111A date/%s time/00:00\n" + // Start of day + "appointment n/P2 ic/S2222222B date/%s time/23:30\n" + // End of day + "appointment n/P3 ic/S3333333C date/%s time/23:45\n" + // Very end of day + "listAppointments\nexit\n", + TODAY, TODAY, TODAY); + + provideInput(input); + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("00:00")); + assertTrue(output.contains("23:30")); + assertTrue(output.contains("The next available timeslot")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + void testDateFormatHandling() { + String input = "add n/John Doe ic/S1234567A v/2024-11-01 14:30\n" + // Wrong date format + "add n/John Doe ic/S1234567A v/01-11-2024 24:00\n" + // Invalid time + "appointment n/John ic/S1234567A date/2024-11-01 time/14:30\n" + // Wrong date format + "appointment n/John ic/S1234567A date/01-11-2024 time/24:00\n" + // Invalid time + "exit\n"; + + provideInput(input); + try { + Main.main(new String[]{}); + String output = outputStreamCaptor.toString(); + assertTrue(output.contains("Invalid")); + assertTrue(output.contains("Error")); + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file From 49881c7482fd38b613a9d7c3d5b332433e11829a Mon Sep 17 00:00:00 2001 From: kaboomzxc Date: Wed, 6 Nov 2024 23:51:41 +0800 Subject: [PATCH 03/28] fix CI --- src/test/java/bookbob/MainTest.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/test/java/bookbob/MainTest.java b/src/test/java/bookbob/MainTest.java index 0927d4b3fe..cc721fab5c 100644 --- a/src/test/java/bookbob/MainTest.java +++ b/src/test/java/bookbob/MainTest.java @@ -250,7 +250,7 @@ private void provideInput(String data) { } @Test - void testAddCommand_AllFields() { + void testAddCommandAllFields() { String input = "add n/John Doe ic/S9876543A p/91234567 d/Fever,Cough m/Paracetamol,Syrup " + "ha/123 Main St dob/01-01-1990 v/01-11-2024 14:30 al/Peanuts s/Male mh/Asthma\n" + "add n/Jane Smith ic/S8765432B p/92345678 v/01-11-2024 15:30\n" + // Minimal fields @@ -274,7 +274,7 @@ void testAddCommand_AllFields() { } @Test - void testEditCommand_AllFieldVariations() { + void testEditCommandAllFieldVariations() { String input = "add n/John Doe ic/S9876543A v/01-11-2024 14:30 p/91234567\n" + "edit ic/S9876543A /to n/James Doe\n" + "edit ic/S9876543A /to newic/S9876543B\n" + @@ -305,7 +305,7 @@ void testEditCommand_AllFieldVariations() { } @Test - void testVisitOperations_ComplexScenarios() { + void testVisitOperationsComplexScenarios() { String input = "add n/John Doe ic/S9876543A v/01-11-2024 14:30\n" + "addVisit ic/S9876543A v/02-11-2024 14:30 d/Fever m/Paracetamol\n" + "addVisit ic/S9876543A v/03-11-2024 14:30 d/Cold m/Syrup\n" + @@ -348,7 +348,7 @@ void testDateTimeValidations() { } @Test - void testSearchOperations_AllCriteria() { + void testSearchOperationsAllCriteria() { String input = "add n/John Doe ic/S9876543A p/91234567 d/Fever m/Paracetamol " + "ha/123 Main St dob/01-01-1990 v/01-11-2024 14:30 al/Peanuts s/Male mh/Asthma\n" + "find n/John\n" + @@ -380,7 +380,7 @@ void testSearchOperations_AllCriteria() { } @Test - void testDeleteOperations_ComplexScenarios() { + void testDeleteOperationsComplexScenarios() { String input = "add n/John Doe ic/S9876543A v/01-11-2024 14:30\n" + "addVisit ic/S9876543A v/02-11-2024 14:30 d/Fever m/Paracetamol\n" + "appointment n/John Doe ic/S9876543A date/03-11-2024 time/14:30\n" + @@ -518,4 +518,4 @@ void testDateFormatHandling() { e.printStackTrace(); } } -} \ No newline at end of file +} From 82bfa4477fa96c239671d0847eeed145c84f7c7e Mon Sep 17 00:00:00 2001 From: kaboomzxc Date: Thu, 7 Nov 2024 00:27:49 +0800 Subject: [PATCH 04/28] add author --- src/test/java/bookbob/MainTest.java | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/test/java/bookbob/MainTest.java b/src/test/java/bookbob/MainTest.java index cc721fab5c..4ccef7826e 100644 --- a/src/test/java/bookbob/MainTest.java +++ b/src/test/java/bookbob/MainTest.java @@ -29,6 +29,8 @@ public class MainTest { private final String TOMORROW = LocalDate.now().plusDays(1).format(formatter); private final String YESTERDAY = LocalDate.now().minusDays(1).format(formatter); + + //@@author kaboomzxc @BeforeEach void setUp() throws IOException { System.setOut(new PrintStream(outputStreamCaptor)); @@ -42,6 +44,7 @@ void tearDown() { System.setOut(standardOut); } + //@@author kaboomzxc // Test different command combinations @Test void testMultipleCommandSequences() { @@ -67,6 +70,7 @@ void testMultipleCommandSequences() { } } + //@@author kaboomzxc // Test all error conditions in addVisit @Test void testAddVisitErrors() { @@ -89,6 +93,7 @@ void testAddVisitErrors() { } } + //@@author kaboomzxc // Test all error conditions in editVisit @Test void testEditVisitErrors() { @@ -111,6 +116,7 @@ void testEditVisitErrors() { } } + //@@author kaboomzxc // Test all error conditions in appointment @Test void testAppointmentErrors() { @@ -136,6 +142,7 @@ void testAppointmentErrors() { } } + //@@author kaboomzxc // Test appointment time slot validation @Test void testAppointmentTimeSlotValidation() { @@ -155,6 +162,7 @@ void testAppointmentTimeSlotValidation() { } } + //@@author kaboomzxc // Test find command with various criteria @Test void testFindWithMultipleCriteria() { @@ -181,6 +189,7 @@ void testFindWithMultipleCriteria() { } } + //@@author kaboomzxc // Test deleteAppointment with various conditions @Test void testDeleteAppointmentScenarios() { @@ -202,6 +211,7 @@ void testDeleteAppointmentScenarios() { } } + //@@author kaboomzxc // Test input validation edge cases @Test void testInputValidationEdgeCases() { @@ -222,6 +232,7 @@ void testInputValidationEdgeCases() { } } + //@@author kaboomzxc // Test concurrent operations @Test void testConcurrentOperations() { @@ -244,11 +255,13 @@ void testConcurrentOperations() { } } + //@@author kaboomzxc private void provideInput(String data) { ByteArrayInputStream testIn = new ByteArrayInputStream(data.getBytes()); System.setIn(testIn); } + //@@author kaboomzxc @Test void testAddCommandAllFields() { String input = "add n/John Doe ic/S9876543A p/91234567 d/Fever,Cough m/Paracetamol,Syrup " + @@ -273,6 +286,7 @@ void testAddCommandAllFields() { } } + //@@author kaboomzxc @Test void testEditCommandAllFieldVariations() { String input = "add n/John Doe ic/S9876543A v/01-11-2024 14:30 p/91234567\n" + @@ -304,6 +318,7 @@ void testEditCommandAllFieldVariations() { } } + //@@author kaboomzxc @Test void testVisitOperationsComplexScenarios() { String input = "add n/John Doe ic/S9876543A v/01-11-2024 14:30\n" + @@ -328,6 +343,7 @@ void testVisitOperationsComplexScenarios() { } } + //@@author kaboomzxc @Test void testDateTimeValidations() { String input = "add n/John Doe ic/S9876543A v/32-13-2024 14:30\n" + // Invalid date @@ -347,6 +363,7 @@ void testDateTimeValidations() { } } + //@@author kaboomzxc @Test void testSearchOperationsAllCriteria() { String input = "add n/John Doe ic/S9876543A p/91234567 d/Fever m/Paracetamol " + @@ -379,6 +396,7 @@ void testSearchOperationsAllCriteria() { } } + //@@author kaboomzxc @Test void testDeleteOperationsComplexScenarios() { String input = "add n/John Doe ic/S9876543A v/01-11-2024 14:30\n" + @@ -401,6 +419,7 @@ void testDeleteOperationsComplexScenarios() { } } + //@@author kaboomzxc @Test void testInvalidCommandsAndErrors() { String input = "invalidcommand\n" + @@ -429,6 +448,8 @@ void testInvalidCommandsAndErrors() { } } + + //@@author kaboomzxc @Test void testCheckAvailabilityAllBranches() { String input = String.format( @@ -455,6 +476,8 @@ void testCheckAvailabilityAllBranches() { } } + + //@@author kaboomzxc @Test void testCompletePatientLifecycle() { String input = "add n/John Doe ic/S1234567A p/91234567 d/Fever m/Paracetamol v/01-11-2024 14:30\n" + @@ -479,6 +502,7 @@ void testCompletePatientLifecycle() { } } + //@@author kaboomzxc @Test void testAppointmentTimeBoundaries() { String input = String.format( @@ -500,6 +524,7 @@ void testAppointmentTimeBoundaries() { } } + //@@author kaboomzxc @Test void testDateFormatHandling() { String input = "add n/John Doe ic/S1234567A v/2024-11-01 14:30\n" + // Wrong date format From 2ea68dd53e1f7871c62753202f6560107ec70708 Mon Sep 17 00:00:00 2001 From: kaboomzxc Date: Thu, 7 Nov 2024 01:08:04 +0800 Subject: [PATCH 05/28] add author --- src/main/java/bookbob/functions/CommandHandler.java | 10 +++++++--- src/main/java/bookbob/functions/FileHandler.java | 9 ++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/java/bookbob/functions/CommandHandler.java b/src/main/java/bookbob/functions/CommandHandler.java index 761cf970d3..5b9593521e 100644 --- a/src/main/java/bookbob/functions/CommandHandler.java +++ b/src/main/java/bookbob/functions/CommandHandler.java @@ -281,14 +281,14 @@ private int findNextFieldStart(String input, int currentIndex) { return nextIndex; } - //@@author yentheng0110 and kaboomzxc + //@@author yentheng0110 public void list(Records records) { List patients = records.getPatients(); if (patients.isEmpty()) { System.out.println("No patients found."); return; } - + //@@author kaboomzxc DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm"); for (Patient patient : patients) { @@ -610,6 +610,7 @@ public void find(String input, Records records) { displayResults(matchedPatients); } + //@@author kaboomzxc private Map extractSearchParams(String input) { Map params = new HashMap<>(); String[] parts = input.split("\\s+"); @@ -631,10 +632,12 @@ private Map extractSearchParams(String input) { return params; } + //@@author kaboomzxc private boolean isValidSearchKey(String key) { return Arrays.asList("n", "ic", "p", "ha", "dob", "al", "s", "mh").contains(key); } + //@@author kaboomzxc private boolean matchesSearchCriteria(Patient patient, Map searchParams) { logger.log(Level.FINE, "Checking if patient matches search criteria: {0}", patient); @@ -670,7 +673,8 @@ private boolean matchesSearchCriteria(Patient patient, Map searc logger.log(Level.FINE, "Patient {0} matches criteria: {1}", new Object[]{patient.getNric(), matches}); return matches; } - + + //@@author kaboomzxc private void displayResults(List patients) { if (patients.isEmpty()) { System.out.println("No matching patients found."); diff --git a/src/main/java/bookbob/functions/FileHandler.java b/src/main/java/bookbob/functions/FileHandler.java index 940c2d4424..a52a2c0211 100644 --- a/src/main/java/bookbob/functions/FileHandler.java +++ b/src/main/java/bookbob/functions/FileHandler.java @@ -123,7 +123,7 @@ public static void autosave(AppointmentRecord appointmentRecord) throws IOExcept logger.log(Level.INFO, "Autosaved appointments successfully"); } - //@@author PrinceCatt and kaboomzxc + //@@author PrinceCatt public static void retrieveData(Records records) { try { File file = new File(filePath); @@ -143,6 +143,7 @@ public static void retrieveData(Records records) { String phoneNumber = data[2].substring(15).trim(); String dateOfBirth = data[3].substring(16).trim(); String homeAddress = data[4].substring(15).trim(); + //@@author kaboomzxc String sex = data[6].substring(5).trim(); ArrayList allergies = parseList(data[5].substring(9).trim()); ArrayList medicalHistories = parseList(data[7].substring(17).trim()); @@ -179,6 +180,7 @@ public static void retrieveData(Records records) { } } + //@@author PrinceCatt public static void retrieveData(AppointmentRecord appointmentRecord){ try { File file = new File(appointmentFilePath); @@ -212,7 +214,7 @@ private static ArrayList parseList(String input) { return list; } - + //@@author coraleaf0602 public static Visit parseVisitInputString(String visitString) { try { int visitStartIndex = visitString.indexOf("["); @@ -238,6 +240,7 @@ public static Visit parseVisitInputString(String visitString) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm"); LocalDateTime visitDateTime = LocalDateTime.parse(dateTimeString, formatter); + //@@author kaboomzxc // Parse diagnoses and medications ArrayList diagnosisList = new ArrayList<>(); ArrayList medicationsList = new ArrayList<>(); @@ -268,7 +271,7 @@ public static Visit parseVisitInputString(String visitString) { } } } - } + } //@@author coraleaf0602 return new Visit(visitDateTime, diagnosisList, medicationsList); } catch (Exception e) { return null; From 0f09af940b98ba7f3b5c587e0b18c60c053799af Mon Sep 17 00:00:00 2001 From: kaboomzxc Date: Thu, 7 Nov 2024 11:24:11 +0800 Subject: [PATCH 06/28] fix author --- src/main/java/bookbob/functions/CommandHandler.java | 3 ++- src/main/java/bookbob/functions/FileHandler.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/bookbob/functions/CommandHandler.java b/src/main/java/bookbob/functions/CommandHandler.java index 5b9593521e..066673a9cf 100644 --- a/src/main/java/bookbob/functions/CommandHandler.java +++ b/src/main/java/bookbob/functions/CommandHandler.java @@ -288,7 +288,7 @@ public void list(Records records) { System.out.println("No patients found."); return; } - //@@author kaboomzxc + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm"); for (Patient patient : patients) { @@ -298,6 +298,7 @@ public void list(Records records) { ", DOB: " + patient.getDateOfBirth() + ", Allergies: " + patient.getAllergies() + ", Sex: " + patient.getSex() + ", Medical Histories: " + patient.getMedicalHistories()); + //@@author kaboomzxc // Print all visits for (Visit visit : patient.getVisits()) { System.out.println(" Visit Date: " + visit.getVisitDate().format(formatter) + diff --git a/src/main/java/bookbob/functions/FileHandler.java b/src/main/java/bookbob/functions/FileHandler.java index a52a2c0211..ddf52875ea 100644 --- a/src/main/java/bookbob/functions/FileHandler.java +++ b/src/main/java/bookbob/functions/FileHandler.java @@ -271,7 +271,8 @@ public static Visit parseVisitInputString(String visitString) { } } } - } //@@author coraleaf0602 + } + //@@author coraleaf0602 return new Visit(visitDateTime, diagnosisList, medicationsList); } catch (Exception e) { return null; From 2ab0787ca01de3230447470d242ffd68ef72d230 Mon Sep 17 00:00:00 2001 From: "e0968962@u.nus.edu" Date: Thu, 7 Nov 2024 15:44:00 +0800 Subject: [PATCH 07/28] Change the help output to guide the users correctly --- data/bookbob_appointment.txt | 2 ++ data/bookbob_data.txt | 3 +- docs/team/johndoe.md | 6 ---- .../bookbob/functions/CommandHandler.java | 32 +++++++++---------- .../bookbob/functions/CommandHandlerTest.java | 32 +++++++++---------- 5 files changed, 34 insertions(+), 41 deletions(-) delete mode 100644 docs/team/johndoe.md diff --git a/data/bookbob_appointment.txt b/data/bookbob_appointment.txt index 7cdb268ba6..8140d9ec54 100644 --- a/data/bookbob_appointment.txt +++ b/data/bookbob_appointment.txt @@ -1,2 +1,4 @@ +Name: Patrick|NRIC: S9089078U|Date: 08-11-2024|Time: 09:00 Name: John Doe|NRIC: S1234567A|Date: 18-11-2024|Time: 18:00 +Name: Yusof|NRIC: S9089079U|Date: 19-11-2024|Time: 09:00 Name: Helen Smith|NRIC: S7654321A|Date: 19-11-2024|Time: 18:00 diff --git a/data/bookbob_data.txt b/data/bookbob_data.txt index 864ef982f9..3d6b3702bb 100644 --- a/data/bookbob_data.txt +++ b/data/bookbob_data.txt @@ -1 +1,2 @@ -Name: John Doe | NRIC: S1234567A | Phone Number: 98765432 | Date_Of_Birth: | Home Address: | Allergy: [] | Sex: | Medical History: [] | Visit: [01-10-2024 15:30, Diagnosis: [], Medications: [], 21-10-2024 15:48, Diagnosis: [], Medications: []]; +Name: Patricia | NRIC: S908909U | Phone Number: | Date_Of_Birth: | Home Address: | Allergy: [] | Sex: | Medical History: [] | Visit: [01-01-2025 16:00, Diagnosis: [Cough], Medications: [Cough syrup, Lozenges], 01-01-2025 16:00, Diagnosis: [Gastric, Runny Nose], Medications: [Cetirizine, Panadol], 07-11-2024 16:00, Diagnosis: [Asthma], Medications: []]; +Name: Aaron Chia | NRIC: T0989087I | Phone Number: 90890765 | Date_Of_Birth: | Home Address: Yio Chu Kang, 650987 | Allergy: [] | Sex: Male | Medical History: [] | Visit: [07-07-2025 10:00, Diagnosis: [], Medications: [], 09-08-2025 10:00, Diagnosis: [Asthma], Medications: [Albuterol]]; diff --git a/docs/team/johndoe.md b/docs/team/johndoe.md deleted file mode 100644 index ab75b391b8..0000000000 --- a/docs/team/johndoe.md +++ /dev/null @@ -1,6 +0,0 @@ -# John Doe - Project Portfolio Page - -## Overview - - -### Summary of Contributions diff --git a/src/main/java/bookbob/functions/CommandHandler.java b/src/main/java/bookbob/functions/CommandHandler.java index 066673a9cf..e58a15dbb7 100644 --- a/src/main/java/bookbob/functions/CommandHandler.java +++ b/src/main/java/bookbob/functions/CommandHandler.java @@ -57,43 +57,41 @@ public void help() { | | TIME format: HH:mm | m/Paracetamol,Ibuprofen | +-------------+---------------------------------------+---------------------------------+ | Edit Visit | editVisit ic/NRIC | editVisit ic/S7209876Y | - | | date/VISIT_DATE_AND_TIME | date/06-11-2024 14:00 | - | | [newDate/NEW_DATE] [d/DIAGNOSIS] | newDate/08-11-2024 14:00 | + | | date/VISIT_DATE_TIME | date/06-11-2024 14:00 | + | | [newDate/NEW_DATE_TIME] [d/DIAGNOSIS]| newDate/08-11-2024 14:00 | | | [m/MEDICATION] | d/Asthma m/Panadol, Antibiotics | | | DATE format: dd-mm-yyyy | | | | TIME format: HH:mm | | +-------------+---------------------------------------+---------------------------------+ | List | list | list | +-------------+---------------------------------------+---------------------------------+ - | Find | find n/NAME OR | find n/John Doe | - | | find ic/NRIC OR | find ic/S1234 | - | | find p/PHONE_NUMBER OR | find p/91234567 | - | | find d/DIAGNOSIS OR | find d/Fever | - | | find m/MEDICATION OR | find m/Panadol | - | | find ha/HOME_ADDRESS OR | find ha/NUS PGPR | + | Find | find n/NAME OR | find n/John Doe | + | | find ic/NRIC OR | find ic/S1234 | + | | find p/PHONE_NUMBER OR | find p/91234567 | + | | find ha/HOME_ADDRESS OR | find ha/NUS PGPR | | | find dob/DATE_OF_BIRTH OR | find dob/01011990 | - | | find al/ALLERGY OR | find al/Peanuts | - | | find find s/SEX OR | find find s/Female | + | | find al/ALLERGY OR | find al/Peanuts | + | | find s/SEX OR | find s/Female | | | find mh/MEDICAL_HISTORY | find mh/Diabetes | +-------------+---------------------------------------+---------------------------------+ | Delete | delete NRIC | delete S9534567A | +-------------+---------------------------------------+---------------------------------+ - | Add | appointment n/NAME ic/NRIC | add n/James Ho ic/S9534567A | - | Appointment | date/DATE time/TIME | date/01-04-2025 time/12:00 | - | | DATE format: dd-mm-yyyy | | + | Add | appointment n/NAME ic/NRIC | appointment n/James Ho | + | Appointment | date/DATE time/TIME | ic/S9534567A date/01-04-2025 | + | | DATE format: dd-mm-yyyy | time/12:00 | | | TIME format: HH:mm | | +-------------+---------------------------------------+---------------------------------+ - | List | listAppointments | list | + | List | listAppointments | listAppointments | | Appointment | | | +-------------+---------------------------------------+---------------------------------+ | Find | findAppointment n/NAME OR | findAppointment n/John Doe | - | Appointment | findAppointment ic/NRIC OR | findAppointment ic/S1234 | + | Appointment | findAppointment ic/NRIC OR | findAppointment ic/S1234567A | | | findAppointment date/DATE OR | findAppointment date/01-04-2025 | | | findAppointment time/TIME OR | findAppointment time/12:00 | | | DATE format: dd-mm-yyyy | | | | TIME format: HH:mm | | +-------------+---------------------------------------+---------------------------------+ - | Delete | deleteAppointment NRIC | deleteAppointment S9534567A | + | Delete | deleteAppointment ic/NRIC | deleteAppointment ic/S9534567A | | Appointment | date/DATE time/TIME | date/01-04-2025 time/12:00 | | | DATE format: dd-mm-yyyy | | | | TIME format: HH:mm | | @@ -107,7 +105,7 @@ public void help() { | Find | findMedication medication | findMedication Panadol | | Medication | | | +-------------+---------------------------------------+---------------------------------+ - | Save | save(automatic) | | + | Save | save (automatic) | | +-------------+---------------------------------------+---------------------------------+ | Retrieve/ | retrieve or import | | | Import | (automatic) | | diff --git a/src/test/java/bookbob/functions/CommandHandlerTest.java b/src/test/java/bookbob/functions/CommandHandlerTest.java index ae82084f98..c2f61fad5e 100644 --- a/src/test/java/bookbob/functions/CommandHandlerTest.java +++ b/src/test/java/bookbob/functions/CommandHandlerTest.java @@ -66,43 +66,41 @@ void helpCommand_noInput_outputsCommandHelp() { "| | TIME format: HH:mm | m/Paracetamol,Ibuprofen |\n" + "+-------------+---------------------------------------+---------------------------------+\n" + "| Edit Visit | editVisit ic/NRIC | editVisit ic/S7209876Y |\n" + - "| | date/VISIT_DATE_AND_TIME | date/06-11-2024 14:00 |\n" + - "| | [newDate/NEW_DATE] [d/DIAGNOSIS] | newDate/08-11-2024 14:00 |\n" + + "| | date/VISIT_DATE_TIME | date/06-11-2024 14:00 |\n" + + "| | [newDate/NEW_DATE_TIME] [d/DIAGNOSIS]| newDate/08-11-2024 14:00 |\n" + "| | [m/MEDICATION] | d/Asthma m/Panadol, Antibiotics |\n" + "| | DATE format: dd-mm-yyyy | |\n" + "| | TIME format: HH:mm | |\n" + "+-------------+---------------------------------------+---------------------------------+\n" + "| List | list | list |\n" + "+-------------+---------------------------------------+---------------------------------+\n" + - "| Find | find n/NAME OR | find n/John Doe |\n" + - "| | find ic/NRIC OR | find ic/S1234 |\n" + - "| | find p/PHONE_NUMBER OR | find p/91234567 |\n" + - "| | find d/DIAGNOSIS OR | find d/Fever |\n" + - "| | find m/MEDICATION OR | find m/Panadol |\n" + - "| | find ha/HOME_ADDRESS OR | find ha/NUS PGPR |\n" + + "| Find | find n/NAME OR | find n/John Doe |\n" + + "| | find ic/NRIC OR | find ic/S1234 |\n" + + "| | find p/PHONE_NUMBER OR | find p/91234567 |\n" + + "| | find ha/HOME_ADDRESS OR | find ha/NUS PGPR |\n" + "| | find dob/DATE_OF_BIRTH OR | find dob/01011990 |\n" + - "| | find al/ALLERGY OR | find al/Peanuts |\n" + - "| | find find s/SEX OR | find find s/Female |\n" + + "| | find al/ALLERGY OR | find al/Peanuts |\n" + + "| | find s/SEX OR | find s/Female |\n" + "| | find mh/MEDICAL_HISTORY | find mh/Diabetes |\n" + "+-------------+---------------------------------------+---------------------------------+\n" + "| Delete | delete NRIC | delete S9534567A |\n" + "+-------------+---------------------------------------+---------------------------------+\n" + - "| Add | appointment n/NAME ic/NRIC | add n/James Ho ic/S9534567A |\n" + - "| Appointment | date/DATE time/TIME | date/01-04-2025 time/12:00 |\n" + - "| | DATE format: dd-mm-yyyy | |\n" + + "| Add | appointment n/NAME ic/NRIC | appointment n/James Ho |\n" + + "| Appointment | date/DATE time/TIME | ic/S9534567A date/01-04-2025 |\n" + + "| | DATE format: dd-mm-yyyy | time/12:00 |\n" + "| | TIME format: HH:mm | |\n" + "+-------------+---------------------------------------+---------------------------------+\n" + - "| List | listAppointments | list |\n" + + "| List | listAppointments | listAppointments |\n" + "| Appointment | | |\n" + "+-------------+---------------------------------------+---------------------------------+\n" + "| Find | findAppointment n/NAME OR | findAppointment n/John Doe |\n" + - "| Appointment | findAppointment ic/NRIC OR | findAppointment ic/S1234 |\n" + + "| Appointment | findAppointment ic/NRIC OR | findAppointment ic/S1234567A |\n" + "| | findAppointment date/DATE OR | findAppointment date/01-04-2025 |\n" + "| | findAppointment time/TIME OR | findAppointment time/12:00 |\n" + "| | DATE format: dd-mm-yyyy | |\n" + "| | TIME format: HH:mm | |\n" + "+-------------+---------------------------------------+---------------------------------+\n" + - "| Delete | deleteAppointment NRIC | deleteAppointment S9534567A |\n" + + "| Delete | deleteAppointment ic/NRIC | deleteAppointment ic/S9534567A |\n" + "| Appointment | date/DATE time/TIME | date/01-04-2025 time/12:00 |\n" + "| | DATE format: dd-mm-yyyy | |\n" + "| | TIME format: HH:mm | |\n" + @@ -116,7 +114,7 @@ void helpCommand_noInput_outputsCommandHelp() { "| Find | findMedication medication | findMedication Panadol |\n" + "| Medication | | |\n" + "+-------------+---------------------------------------+---------------------------------+\n" + - "| Save | save(automatic) | |\n" + + "| Save | save (automatic) | |\n" + "+-------------+---------------------------------------+---------------------------------+\n" + "| Retrieve/ | retrieve or import | |\n" + "| Import | (automatic) | |\n" + From 4fe89bce5ffc6a4f954b77c0a3eb1aa102e07311 Mon Sep 17 00:00:00 2001 From: "e0968962@u.nus.edu" Date: Thu, 7 Nov 2024 15:45:03 +0800 Subject: [PATCH 08/28] Make the error message printed out for find command consistent for all optional parameters (denoted by square brackets) --- src/main/java/bookbob/functions/CommandHandler.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/bookbob/functions/CommandHandler.java b/src/main/java/bookbob/functions/CommandHandler.java index e58a15dbb7..2c72d87d5d 100644 --- a/src/main/java/bookbob/functions/CommandHandler.java +++ b/src/main/java/bookbob/functions/CommandHandler.java @@ -598,7 +598,8 @@ public void find(String input, Records records) { if (searchParams.isEmpty()) { logger.log(Level.WARNING, "No valid search parameters provided."); System.out.println("Invalid search parameters. Please use the format: " - + "find n/NAME ic/NRIC [p/PHONE] [ha/ADDRESS] [dob/DOB] [al/ALLERGY] [s/SEX] [mh/MEDICAL_HISTORY]"); + + "find [n/NAME] [ic/NRIC] [p/PHONE] [ha/ADDRESS] [dob/DOB] [al/ALLERGY] [s/SEX] " + + "[mh/MEDICAL_HISTORY]"); return; } From e92f54c402954e46cfc9c109f168d702e3ad6ae8 Mon Sep 17 00:00:00 2001 From: g13nd0n-admin Date: Thu, 7 Nov 2024 17:21:40 +0800 Subject: [PATCH 09/28] Fix bugs in the commands --- src/main/java/bookbob/Main.java | 15 ++++++++++++--- .../java/bookbob/entity/AppointmentRecord.java | 15 +++++++-------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/main/java/bookbob/Main.java b/src/main/java/bookbob/Main.java index 18a260c70e..819e50c3f4 100644 --- a/src/main/java/bookbob/Main.java +++ b/src/main/java/bookbob/Main.java @@ -48,7 +48,7 @@ public static void main(String[] args) throws IOException { case "exit": logger.log(Level.INFO, "Processing exit command"); - try{ + try { commandHandler.removePastAppointments(appointmentRecord); commandHandler.exit(input); logger.log(Level.INFO, "Successfully processed exit command"); @@ -136,6 +136,9 @@ public static void main(String[] args) throws IOException { System.out.println("Please specify an NRIC to delete."); logger.log(Level.INFO, "Empty NRIC inputted"); } + } catch (ArrayIndexOutOfBoundsException e) { + logger.log(Level.WARNING, "Error processing deletion"); + System.out.println("Error in deleting patient record, please provide the nric"); } catch (Exception e) { logger.log(Level.WARNING, "Error processing deletion"); System.out.println("Error in deleting files, specific error: " + e.getMessage()); @@ -144,7 +147,7 @@ public static void main(String[] args) throws IOException { case "help": logger.log(Level.INFO, "Processing help command"); - try{ + try { commandHandler.help(); logger.log(Level.INFO, "Successfully processed help command"); } catch (Exception e) { @@ -199,7 +202,7 @@ public static void main(String[] args) throws IOException { case "listAppointments": logger.log(Level.INFO, "Processing list appointments command"); - try{ + try { commandHandler.listAppointments(appointmentRecord); logger.log(Level.INFO, "Successfully processed list appointments command"); } catch (DateTimeParseException e) { @@ -228,6 +231,9 @@ public static void main(String[] args) throws IOException { } catch (IllegalArgumentException e) { logger.log(Level.WARNING, "Error processing deletion of appointment command"); System.out.println("Error in deleting appointment, missing nric, date or time."); + } catch (ArrayIndexOutOfBoundsException e) { + logger.log(Level.WARNING, "Error processing deletion of appointment command"); + System.out.println("Error in deleting appointment, missing nric, date or time."); } catch (Exception e) { logger.log(Level.WARNING, "Error processing deletion of appointment"); System.out.println("Error in deleting appointment, specific error: " + e.getMessage()); @@ -245,6 +251,9 @@ public static void main(String[] args) throws IOException { } catch (DateTimeException e) { logger.log(Level.WARNING, "Error processing appointment command", e); System.out.println("Error in adding appointment, wrong time format"); + } catch (ArrayIndexOutOfBoundsException e) { + logger.log(Level.WARNING, "Error processing appointment command", e); + System.out.println("Error in adding appointment, missing nric, date and time."); } catch (Exception e) { logger.log(Level.SEVERE, "Error processing find command", e); System.out.println("An error occurred while processing the find command: " + e.getMessage()); diff --git a/src/main/java/bookbob/entity/AppointmentRecord.java b/src/main/java/bookbob/entity/AppointmentRecord.java index 60cf4889c5..d63b58e95b 100644 --- a/src/main/java/bookbob/entity/AppointmentRecord.java +++ b/src/main/java/bookbob/entity/AppointmentRecord.java @@ -114,21 +114,20 @@ public LocalTime checkAvailability(LocalDate date, LocalTime time) { LocalDate appointmentDate = appointment.getDate(); LocalTime appointmentTime = appointment.getTime(); LocalTime appointmentEndTime = appointmentTime.plusMinutes(consultationDuration); - if (appointmentDate.equals(date) && appointmentTime.equals(nextAvailableTime)) { - nextAvailableTime = appointmentEndTime; - endTime = appointmentEndTime.plusMinutes(consultationDuration); - break; - } else if (appointmentDate.isAfter(date)) { + if (appointmentDate.isAfter(date)) { break; } else if (appointmentDate.isBefore(date)) { continue; - } else if (appointmentDate.equals(date) && appointmentTime.isBefore(nextAvailableTime) + } else if (appointmentTime.equals(nextAvailableTime)) { + nextAvailableTime = appointmentEndTime; + break; + } else if (appointmentTime.isBefore(nextAvailableTime) && appointmentEndTime.isAfter(nextAvailableTime)) { nextAvailableTime = appointmentEndTime; endTime = appointmentEndTime.plusMinutes(consultationDuration); - } else if (appointmentDate.equals(date) && appointmentEndTime.isBefore(nextAvailableTime)) { + } else if (appointmentEndTime.isBefore(nextAvailableTime) || appointmentEndTime.equals(nextAvailableTime)) { continue; - } else if (appointmentDate.equals(date) && appointmentTime.isBefore(endTime)) { + } else if (appointmentTime.isBefore(endTime)) { nextAvailableTime = appointmentEndTime; endTime = appointmentEndTime.plusMinutes(consultationDuration); } From 21e30e337a73988f6a938bda021b61b923eafec7 Mon Sep 17 00:00:00 2001 From: G13nd0n <135317242+G13nd0n@users.noreply.github.com> Date: Thu, 7 Nov 2024 17:52:52 +0800 Subject: [PATCH 10/28] Fix typo issue --- src/main/java/bookbob/Main.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/bookbob/Main.java b/src/main/java/bookbob/Main.java index 819e50c3f4..ae1390d980 100644 --- a/src/main/java/bookbob/Main.java +++ b/src/main/java/bookbob/Main.java @@ -207,10 +207,10 @@ public static void main(String[] args) throws IOException { logger.log(Level.INFO, "Successfully processed list appointments command"); } catch (DateTimeParseException e) { logger.log(Level.WARNING, "Error processing appointment command", e); - System.out.println("Error in adding appointment, wrong date format"); + System.out.println("Error in listing appointment, wrong date format"); } catch (DateTimeException e) { logger.log(Level.WARNING, "Error processing appointment command", e); - System.out.println("Error in adding appointment, wrong time format"); + System.out.println("Error in listing appointment, wrong time format"); } catch (Exception e) { logger.log(Level.WARNING, "Error processing list appointments", e); System.out.println("Error in listing appointments, specific error: " + e.getMessage()); From 135a41c9e5c65ec728abacfa43da79d50f9ef3f5 Mon Sep 17 00:00:00 2001 From: G13nd0n <135317242+G13nd0n@users.noreply.github.com> Date: Thu, 7 Nov 2024 18:16:28 +0800 Subject: [PATCH 11/28] Fixed typo --- src/main/java/bookbob/Main.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/bookbob/Main.java b/src/main/java/bookbob/Main.java index ae1390d980..ee14468f33 100644 --- a/src/main/java/bookbob/Main.java +++ b/src/main/java/bookbob/Main.java @@ -247,13 +247,13 @@ public static void main(String[] args) throws IOException { logger.log(Level.INFO, "Successfully processed find appointment command"); } catch (DateTimeParseException e) { logger.log(Level.WARNING, "Error processing appointment command", e); - System.out.println("Error in adding appointment, wrong date format"); + System.out.println("Error in finding appointment, wrong date format"); } catch (DateTimeException e) { logger.log(Level.WARNING, "Error processing appointment command", e); - System.out.println("Error in adding appointment, wrong time format"); + System.out.println("Error in finding appointment, wrong time format"); } catch (ArrayIndexOutOfBoundsException e) { logger.log(Level.WARNING, "Error processing appointment command", e); - System.out.println("Error in adding appointment, missing nric, date and time."); + System.out.println("Error in finding appointment, missing nric, date and time."); } catch (Exception e) { logger.log(Level.SEVERE, "Error processing find command", e); System.out.println("An error occurred while processing the find command: " + e.getMessage()); From b8129adc041377277d8ce3bc5cfd6de67dcb7578 Mon Sep 17 00:00:00 2001 From: "e0968962@u.nus.edu" Date: Thu, 7 Nov 2024 18:33:24 +0800 Subject: [PATCH 12/28] Fix minor typo in Main.java --- data/bookbob_appointment.txt | 1 + data/bookbob_data.txt | 2 ++ src/main/java/bookbob/Main.java | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/data/bookbob_appointment.txt b/data/bookbob_appointment.txt index 8140d9ec54..9591bd4c5f 100644 --- a/data/bookbob_appointment.txt +++ b/data/bookbob_appointment.txt @@ -2,3 +2,4 @@ Name: Patrick|NRIC: S9089078U|Date: 08-11-2024|Time: 09:00 Name: John Doe|NRIC: S1234567A|Date: 18-11-2024|Time: 18:00 Name: Yusof|NRIC: S9089079U|Date: 19-11-2024|Time: 09:00 Name: Helen Smith|NRIC: S7654321A|Date: 19-11-2024|Time: 18:00 +Name: Yusof|NRIC: S9089079U|Date: 19-11-2024|Time: 18:30 diff --git a/data/bookbob_data.txt b/data/bookbob_data.txt index 3d6b3702bb..87d4b86493 100644 --- a/data/bookbob_data.txt +++ b/data/bookbob_data.txt @@ -1,2 +1,4 @@ Name: Patricia | NRIC: S908909U | Phone Number: | Date_Of_Birth: | Home Address: | Allergy: [] | Sex: | Medical History: [] | Visit: [01-01-2025 16:00, Diagnosis: [Cough], Medications: [Cough syrup, Lozenges], 01-01-2025 16:00, Diagnosis: [Gastric, Runny Nose], Medications: [Cetirizine, Panadol], 07-11-2024 16:00, Diagnosis: [Asthma], Medications: []]; Name: Aaron Chia | NRIC: T0989087I | Phone Number: 90890765 | Date_Of_Birth: | Home Address: Yio Chu Kang, 650987 | Allergy: [] | Sex: Male | Medical History: [] | Visit: [07-07-2025 10:00, Diagnosis: [], Medications: [], 09-08-2025 10:00, Diagnosis: [Asthma], Medications: [Albuterol]]; +Name: John Doe | NRIC: S9876543A | Phone Number: 91234567 | Date_Of_Birth: | Home Address: | Allergy: [] | Sex: | Medical History: [] | Visit: [01-11-2024 14:30, Diagnosis: [Fever], Medications: [Paracetamol]]; +Name: Jane Smith | NRIC: S8765432B | Phone Number: 92345678 | Date_Of_Birth: | Home Address: | Allergy: [] | Sex: | Medical History: [] | Visit: [01-11-2024 15:30, Diagnosis: [Cough], Medications: [Cough Syrup]]; diff --git a/src/main/java/bookbob/Main.java b/src/main/java/bookbob/Main.java index ee14468f33..b7f707e84d 100644 --- a/src/main/java/bookbob/Main.java +++ b/src/main/java/bookbob/Main.java @@ -253,7 +253,7 @@ public static void main(String[] args) throws IOException { System.out.println("Error in finding appointment, wrong time format"); } catch (ArrayIndexOutOfBoundsException e) { logger.log(Level.WARNING, "Error processing appointment command", e); - System.out.println("Error in finding appointment, missing nric, date and time."); + System.out.println("Error in finding appointment, missing name, nric, date or time."); } catch (Exception e) { logger.log(Level.SEVERE, "Error processing find command", e); System.out.println("An error occurred while processing the find command: " + e.getMessage()); From c776614d39df08179115a51f40173fbeaf4f3baa Mon Sep 17 00:00:00 2001 From: g13nd0n-admin Date: Fri, 8 Nov 2024 21:03:25 +0800 Subject: [PATCH 13/28] Update the DeveloperGuide based on feedback received --- docs/AfterAppointment.puml | 8 +++--- docs/AfterExecutionOD.png | Bin 70831 -> 29238 bytes docs/DeveloperGuide.md | 2 +- docs/NewAppointment.puml | 56 ++++++++++++++++++++++++------------- docs/NewAppointmentSD.png | Bin 176609 -> 52211 bytes 5 files changed, 41 insertions(+), 25 deletions(-) diff --git a/docs/AfterAppointment.puml b/docs/AfterAppointment.puml index 335d306ff5..793038bbe3 100644 --- a/docs/AfterAppointment.puml +++ b/docs/AfterAppointment.puml @@ -5,10 +5,10 @@ object ":Main" as Main object " :CommandHandler" as CommandHandler object " in:Scanner" as Scanner object " appointment:Appointment " as Appointment { -name = John Doe -nric = S123A -date = 18-11-2024 -time = 18:00 +name = "John Doe" +nric = "S123A" +date = "18-11-2024" +time = "18:00" } object " appointmentRecord:AppointmentRecord" as AppointmentRecord object " record:Record " as Record diff --git a/docs/AfterExecutionOD.png b/docs/AfterExecutionOD.png index f45d647b8ba5feec95c5b878cd6717279832d626..760f64e1401dcc3b7f42fa8e592f8448a8cc34f7 100644 GIT binary patch literal 29238 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 literal 70831 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 The Sequence Diagram for the execution of appointment command: ![img.png](NewAppointmentSD.png) + --- ## Appendix A : Product Scope ### Target user profile diff --git a/docs/NewAppointment.puml b/docs/NewAppointment.puml index c7378c482e..c1b71f2b08 100644 --- a/docs/NewAppointment.puml +++ b/docs/NewAppointment.puml @@ -2,28 +2,44 @@ 'https://plantuml.com/sequence-diagram actor Doctor -Doctor -> Main ++ -Main -> Record ** -Main -> AppointmentRecord ** -Main -> FileHandler ++ : initFile(records) -FileHandler -> Main -- : -Main -> FileHandler ++ : initFile(appointmentRecords) -FileHandler -> Main -- : -Main -> CommandHandler ** : -Doctor -> Main : appointment("John Doe, S123A, 18-11-2024, 18:00") -Main -> CommandHandler ++: commandHandler.appointment("John Doe, S123A, 18-11-2024, 18:00") -CommandHandler -> AppointmentRecord ++ : appointmentRecord.checkAvailability("18-11-2024, 18:00") -AppointmentRecord -> CommandHandler -- : nextAvailableTime +Doctor -> ":Main" ++ +":Main" -> ":Record" ** +activate ":Record" +":Record" --> ":Main" -- : record:Record +":Main" -> ":AppointmentRecord" ** +activate ":AppointmentRecord" +":AppointmentRecord" --> ":Main" -- : appointmentRecord:AppointmentRecord +":Main" -> ":FileHandler" ++ : initFile(records) +":FileHandler" --> ":Main" -- : +":Main" -> ":FileHandler" ++ : initFile(appointmentRecords) +":FileHandler" --> ":Main" -- : +":Main" -> ":CommandHandler" ** : +activate ":CommandHandler" +":CommandHandler" --> ":Main" --: commandHandler:CommandHandler +Doctor -> ":Main" : appointment("n/John Doe, ic/S123A, date/18-11-2024, time/18:00") +":Main" -> ":CommandHandler" ++: commandHandler.appointment("n/John Doe, ic/S123A, date/18-11-2024, time/18:00") +":CommandHandler" -> ":CommandHandler" ++: commandHandler.extractName("n/John Doe, ic/S123A, date/18-11-2024, time/18:00") +":CommandHandler" --> ":CommandHandler" --: name = "John Doe" +":CommandHandler" -> ":CommandHandler" ++: commandHandler.extractNric("n/John Doe, ic/S123A, date/18-11-2024, time/18:00") +":CommandHandler" --> ":CommandHandler" --: nric = "S123A"" +":CommandHandler" --> ":CommandHandler" ++: commandHandler.extractDate("n/John Doe, ic/S123A, date/18-11-2024, time/18:00") +":CommandHandler" --> ":CommandHandler" --: date = "18-11-2024"" +":CommandHandler" -> ":CommandHandler" ++: commandHandler.extractTime("n/John Doe, ic/S123A, date/18-11-2024, time/18:00") +":CommandHandler" --> ":CommandHandler" --: time = "18:00" +":CommandHandler" -> ":AppointmentRecord" ++ : appointmentRecord.checkAvailability("18-11-2024, 18:00") +":AppointmentRecord" --> ":CommandHandler" -- : nextAvailableTime group alt [nextAvailableTime == "18:00"] - CommandHandler -> Appointment ** - CommandHandler -> Appointment ++ : new Appointment("John Doe", "S123A", "18-11-2024", "18:00") - Appointment -> CommandHandler -- : appointment + ":CommandHandler" -> ":Appointment" ** + activate ":Appointment" + ":CommandHandler" -> ":Appointment" : new Appointment("John Doe", "S123A", "18-11-2024", "18:00") + ":Appointment" --> ":CommandHandler" -- : appointment - CommandHandler -> AppointmentRecord ++ : appointmentRecords.addAppointment(appointment) - AppointmentRecord -> CommandHandler -- + ":CommandHandler" -> ":AppointmentRecord" ++ : appointmentRecords.addAppointment(appointment) + ":AppointmentRecord" --> ":CommandHandler" -- else end -CommandHandler -> FileHandler ++ : FileHandler.autosave(appointmentRecords) -FileHandler -> CommandHandler -- - +":CommandHandler" -> ":FileHandler" ++ : FileHandler.autosave(appointmentRecords) +":FileHandler" --> ":CommandHandler" -- +":CommandHandler" --> ":Main" -- +deactivate ":Main" @enduml \ No newline at end of file diff --git a/docs/NewAppointmentSD.png b/docs/NewAppointmentSD.png index 794a62834e2edcfe065c2a7592b8f943f9f5ff42..7e727b15259b856a18d55ade07a74d230e85fb47 100644 GIT binary patch literal 52211 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 literal 176609 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