Skip to content

Commit

Permalink
Merge branch 'AY2324S1-CS2103T-T09-2:master' into update-ug-format
Browse files Browse the repository at this point in the history
  • Loading branch information
waseemingly authored Nov 13, 2023
2 parents 871b8d6 + 6511b17 commit aeb41c6
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 32 deletions.
64 changes: 39 additions & 25 deletions docs/DeveloperGuide.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ title: Developer Guide
* [Edit Features (`edit-developer`, `edit-client`, `edit-project`)](#edit-feature--edit-developer--edit-client--edit-project-)
* [List Features (`list-developer`, `list-client`, `list-project`)](#list-feature--list-developer--list-client--list-project-)
* [Undo/redo Features (`undo`, `redo`)](#undoredo-feature--undo--redo-)
* [add-role Feature (`add-developer-role`, `add-client-role`)](#add-role-feature--add-developer-role--add-client-role-)
* [delete-role Feature (`delete-developer-role`, `delete-client-role`)](#delete-role-feature--delete-developer-role--delete-client-role-)
* [Add-role Feature (`add-developer-role`, `add-client-role`)](#add-role-feature--add-developer-role--add-client-role-)
* [Delete-role Feature (`delete-developer-role`, `delete-client-role`)](#delete-role-feature--delete-developer-role--delete-client-role-)
* [GUI Feature](#gui-feature)
* [Documentation, logging, testing, configuration, dev-ops](#documentation-logging-testing-configuration-dev-ops)
* [Appendix: Requirements](#appendix-requirements)
Expand Down Expand Up @@ -51,6 +51,8 @@ title: Developer Guide
[Scroll back to Table of Contents](#table-of-contents)

--------------------------------------------------------------------------------------------------------------------
<div style="page-break-after: always;"></div>

## **Design**

<div markdown="span" class="alert alert-primary">
Expand Down Expand Up @@ -201,6 +203,8 @@ Classes used by multiple components are in the `seedu.address.commons` package.
This section describes some noteworthy details on how certain features are implemented.

--------------------------------------------------------------------------------------------------------------------
<div style="page-break-after: always;"></div>

## Implementation

### Add Features (`add-developer`, `add-client`, `add-project`)
Expand Down Expand Up @@ -264,8 +268,6 @@ The following sequence diagram illustrates how the delete developer operation wo
<img src="images/DeleteClientSequenceDiagram.png" width="450" />


#### Design considerations

[Scroll back to Table of Contents](#table-of-contents)

### Delete Project Feature (`delete-project`)
Expand Down Expand Up @@ -414,6 +416,7 @@ The following sequence diagram provides an overview of how the find operation is

![Interactions Inside the Logic Component for the `find-developer n/alice` Command](images/FindDeveloperSequenceDiagram.png)

#### Design considerations
**Aspect:** Implementation of the predicate map:<br>
**Alternative 1:**
- Use a long chain of `if-else` conditions for each attribute.
Expand Down Expand Up @@ -525,7 +528,7 @@ The `redo` command does the opposite — it calls `Model#redoAddressBook()`,

![UndoRedoState4](images/UndoRedoState4.png)


#### Design considerations
**Aspect: How undo & redo executes:**

* **Alternative 1 (current choice):** Saves the entire address book.
Expand Down Expand Up @@ -582,6 +585,7 @@ This is not a case-sensitive feature. The command allows users to add `developer
The following sequence diagram shows how the Add-role operation works:
![SequenceDiagram](images/AddDeveloperRoleSequenceDiagram.png)

#### Design considerations
**Aspect: How add-role executes:**
* **Alternative 1 (current choice):** Treat role as a variable, has a separate load and unload list
* Pros: Role can just be treated as an attributed that needs more validation checks
Expand Down Expand Up @@ -668,7 +672,7 @@ the displayed project list has a project with the index `2` with at least `1` de

#### Design considerations
**Aspect: Execution of command**
* Alternative 1: Implement methods in `ModelManager` class that can directly change the `isDone` status of the deadlines
* **Alternative 1**: Implement methods in `ModelManager` class that can directly change the `isDone` status of the deadlines
of a project based on the given project index and deadline index.
* Pros:
* More aligned with OOP principles.
Expand All @@ -678,7 +682,7 @@ of a project based on the given project index and deadline index.
through projects, so more methods need to be added to achieve this.
* Given the GUI display of project deadlines in a Javafx TableView, makes it more complicated for changes in
deadline status to be automatically reflected in the list of projects and deadlines displayed to the user.
* Alternative 2 (current choice): Implement execution by creating an `EditProjectCommandParser` and `EditProjectCommand`
* **Alternative 2 (current choice)**: Implement execution by creating an `EditProjectCommandParser` and `EditProjectCommand`
that will replace the existing project entirely with a new one with the updated deadline being marked/unmarked.
* Pros:
* Fewer methods to implement, allows for more reuse.
Expand Down Expand Up @@ -724,6 +728,8 @@ be updated to show the full list of information for that tab again.
[Scroll back to Table of Contents](#table-of-contents)

--------------------------------------------------------------------------------------------------------------------
<div style="page-break-after: always;"></div>

## **Appendix: Requirements**

### Project Scope
Expand Down Expand Up @@ -789,14 +795,14 @@ use cases elaborated upon below are only detailed for developers. Nonetheless, t
can be extrapolated for clients and projects too, without changes to the major details within
the use case. Such associated pairs of use cases are listed in the table below.

| **Developer use case** | **Client use case** | **Project use case** |
|------------------------|---------------------|------------------------------|
| UC3 - Add a developer | UC13 - Add a client | UC14 - Add a project |
| UC4 - Delete a developer | UC15 - Delete a client | UC16 - Delete a project |
| UC5 - Edit a developer | UC17 - Edit a client | UC18 - Edit a project |
| UC6 - Find a developer | UC19 - Find a client | UC20 - Find a project |
| UC9 - Add developer role | UC21 - Add client role | - |
| UC10 - Delete developer role | UC22 - Delete client role | - |
| **Use Case** | **Developer command** | **Client command** | **Project command** |
|--------------|:----------------------|:------------------:|:-------------------:|
| UC3 | Add a developer | Add a client | Add a project |
| UC4 | Delete a developer | Delete a client | Delete a project |
| UC5 | Edit a developer | Edit a client | Edit a project |
| UC6 | Find a developer | Find a client | Find a project |
| UC7 | Add developer role | Add client role | - |
| UC8 | Delete developer role | Delete client role | - |

#### **Use case:** UC1 - Unlock System

Expand Down Expand Up @@ -1177,28 +1183,28 @@ Deleting developer roles and client roles works the same way, hence deleting cli
### Non-Functional Requirements

#### System/Performance Requirements
* Should work on any _mainstream OS_ as long as it has Java `11` or above installed.
* Should work on any _mainstream OS_ as long as it has Java `11` or above installed.<br>
#### Reliability Requirements
* Should be able to handle failures and show relevant error messages (hardware/network failures)
* Should ensure that data is protected from corruption or loss
* Should be able to recover immediately after inaccurate/invalid commands
* Should be able to recover immediately after inaccurate/invalid commands<br>
#### Usability Requirements
* Should follow specific code design and usability guidelines
* The user interface shall follow a consistent design pattern and layout throughout the application.
* There shall be clear and intuitive pathways for accomplishing common tasks.
* Users shall receive informative feedback on their actions (e.g., success messages, error messages)
in a clear and user-friendly manner.
* Context-sensitive help and tooltips shall be available to assist users in understanding complex features.
* A comprehensive user manual or online documentation shall be provided to explain how to use the application.
### Process Requirements
* A comprehensive user manual or online documentation shall be provided to explain how to use the application.<br>
#### Process Requirements
* The project is expected to adhere to a schedule that completes a milestone set every two weeks.
* The project shall follow an iterative breadth-first development methodology
* Automated testing suits shall be maintained and run for each build
* Code review shall be conducted for all new code contribution, with at least one team member
reviewing each piece of code before it is merged
* All project source code shall be stored in a version control system (e.g., Git),
and commits should follow a consistent naming convention.
* Coding standards and style guidelines shall be defined and followed consistently by all development team members.
* Coding standards and style guidelines shall be defined and followed consistently by all development team members.<br>

[Scroll back to Table of Contents](#table-of-contents)

Expand Down Expand Up @@ -1231,6 +1237,8 @@ and commits should follow a consistent naming convention.
[Scroll back to Table of Contents](#table-of-contents)

--------------------------------------------------------------------------------------------------------------------
<div style="page-break-after: always;"></div>

## **Appendix: Manual Testing**
Given below are some instructions to test the app manually.

Expand Down Expand Up @@ -1473,7 +1481,9 @@ Expected results: No role deleted. Error details shows role cannot be deleted a
Expected: The application should load with any previous changes made during the previous running of the app.

[Scroll back to Table of Contents](#table-of-contents)

--------------------------------------------------------------------------------------------------------------------
<div style="page-break-after: always;"></div>

## **Appendix: Planned Enhancement**

Expand Down Expand Up @@ -1522,17 +1532,21 @@ where users can select the location to save the files for Developers, Clients an
typos and provide quick access to commonly used search terms.

### Sort Results
**Current Behavior:** After each command, the list of contacts shown are based on the order the contact was added.
**Current Behavior:** After each command, the list of contacts shown are based on the order the contact was added.<br>
**Enhanced Behavior:** Allow users to sort the search results based on different criteria such as name, date, or
priority. This provides users with more flexibility in organizing and viewing the search results.

[Scroll back to Table of Contents](#table-of-contents)

--------------------------------------------------------------------------------------------------------------------
<div style="page-break-after: always;"></div>

## **Appendix: Effort**
| Feature | AB3 | CodeContact |
|---------------|-----|-------------|
| Effort | 10 | 30 |
| Lines of Code | 6k | +18k |

| Feature | AB3 | CodeContact |
|:---------------|:-----:|:-------------:|
| Effort | 10 | 30 |
| Lines of Code | 6k | +18k |

The CodeContact project involved a significant effort to adapt the AddressBook-Level3 (AB3) application to a new domain of Developers, Clients and Projects in a Software Engineering setting. One of the major changes was the addition of three new models, Developer, Client and Project, which required modifying the existing data model and the associated logic components. Another significant change was the complete redesign of the user interface using JavaFX, which required a significant amount of time and effort to learn and implement.

Expand Down
20 changes: 15 additions & 5 deletions docs/team/mahidharah.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,53 +8,61 @@ title: Mahidharah's Project Portfolio Page
CodeContact is a desktop app for managing contacts, optimized for use via a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI).
If you can type fast, CodeContact can get your contact management tasks done faster than traditional GUI apps.

Our product helps seamlessly integrate contact, client, and project management, simplifying access to coding-related contacts, facilitating collaboration, and offering command-line efficiency for project managers
Our product helps seamlessly integrate contact, client, and project management, simplifying access to coding-related contacts, facilitating collaboration, and offering command-line efficiency for project managers.

Given below are my contributions to the project.


* **New Features**: `add-developer`, `add-client` & `add-project`

* **New Feature 1**: `add-developer`, `add-client` & `add-project`
* What it does: Adds a developer/client/project to the address book, making sure input parameters are valid and potential duplicates are found, highlighted to the user and rejected.
* Justification: Decided to separate these as different commands instead of having a single `add` command to allow for more flexibility with parameters changes to these features in the future (from basic OOP principles). This also allows for more specific error messages to be displayed to users when they input invalid parameters, utilising polymorphism.
* Highlights:
* Credits: *{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in
the feature so that a reader can make a more accurate judgement of how much effort went into the feature}*

* **New Features**: `delete-developer` & `delete-client`

* **New Feature 2**: `delete-developer` & `delete-client`
* What it does: Deletes a developer/client from the address book.
* Justification: Decided to separate these as different commands instead of having a single `delete` command to allow for more flexibility with parameters changes to these features in the future (from basic OOP principles). This also allows for more specific error messages to be displayed to users when they input invalid parameters, utilising polymorphism.
* Highlights:
* Credits: *{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in
the feature so that a reader can make a more accurate judgement of how much effort went into the feature}*


* **New Feature**: `delete-project`
* **New Feature 3**: `delete-project`
* What it does: Deletes a project from the address book and accordingly removes it from the set of projects for all developers and clients.
* Justification: I decided to implement the feature such that it triggers updates on developers and clients with hopes that this feature will be a major quality of life improvement for project managers, enabling them to remove projects easily without having to edit the information for relevant clients and developers to maintain integrity of the data.
* Highlights: The feature uses the iterator java class and its for each remaining method effectively to simplify code and ensure efficiency. I also implemented such that the deadline field to be optional, and implemented the relevant logic.
* Credits: *{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in
the feature so that a reader can make a more accurate judgement of how much effort went into the feature}*



* **Enhancements to existing features**:
* Contributed to the GUI component of CodeContact by creating relevant classes and FXML files for developer and client cards (Pull request [\#79](https://github.com/AY2324S1-CS2103T-T09-2/tp/pull/79))
* Ensured functional improvements use developer and client classes instead of person class (Pull request [\#79](https://github.com/AY2324S1-CS2103T-T09-2/tp/pull/79))
* Edited SampleData to include sample developers, clients and projects for easy testing for teammates (Pull request [\#79](https://github.com/AY2324S1-CS2103T-T09-2/tp/pull/79))


* **Testing**:
* Enabled test files to work for other team members and contributed greatly to testcode
* Wrote testcases for model, logic and storage, and edited necessary test utility files to account for functional developments of CodeContact, speciafically developer and client features (Pull request [\#216](https://github.com/AY2324S1-CS2103T-T09-2/tp/pull/216), [\#222](https://github.com/AY2324S1-CS2103T-T09-2/tp/pull/222), [\#236](https://github.com/AY2324S1-CS2103T-T09-2/tp/pull/236))
* Wrote testcases for my functional contributions to Codecontact. (Pull request [\#216](https://github.com/AY2324S1-CS2103T-T09-2/tp/pull/216), [\#236](https://github.com/AY2324S1-CS2103T-T09-2/tp/pull/222), [\#236](https://github.com/AY2324S1-CS2103T-T09-2/tp/pull/236))



* **Code contributed**: [RepoSense link](https://nus-cs2103-ay2324s1.github.io/tp-dashboard/?search=&sort=groupTitle&sortWithin=title&timeframe=commit&mergegroup=&groupSelect=groupByRepos&breakdown=true&checkedFileTypes=docs~functional-code~test-code&since=2023-09-22&tabOpen=true&tabType=authorship&zFR=false&tabAuthor=Mahidharah&tabRepo=AY2324S1-CS2103T-T09-2%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~test-code&authorshipIsBinaryFileTypeChecked=false&authorshipIsIgnoredFilesChecked=false)



* **Project management(team-based tasks contributions)**:
* Responsible for the timely pivot of our team project in v1.2 after checking in with tutors and professors
* Spearheaded the pivot by suggesting a new idea and directing the team to a new project which effectively carried over previous functional contributions
* Actively contributed during team meetings and reminded team members of upcoming deadlines



* **Documentation Contributions**:
* User Guide Contributions:
* Added documentation for the features `delete-developer`, `delete-client`, `delete-project`, `add-developer`, `add-client`, `add-project`
Expand All @@ -64,11 +72,13 @@ Given below are my contributions to the project.
* Added PUML sequence diagrams for these implementations



* **Community (Review/mentoring contributions)**:
* PRs reviewed (with non-trivial review comments): [\#155](https://github.com/AY2324S1-CS2103T-T09-2/tp/pull/155), [\##219](https://github.com/AY2324S1-CS2103T-T09-2/tp/pull/219)
* Reported bugs and suggested ideal implementations for features for teammates
* Some parts of the delete-project feature I added was adopted by team members and classmates, for instance the following implementation of validation checks for projects



* **Tools**:
* Capitalised on GitHub copilot autocomplete features in creating testcases, enabling me to cover the most amount of functional code in testcases
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ public void execute_salarySearch_personFound() {
}

@Test
public void execute_ratingSearch_PersonFound() {
public void execute_ratingSearch_personFound() {
String expectedMessage = "These are the 3 developers with matching information.";
RatingContainsKeywordsPredicate predicate = prepareRatingPredicate("4.0");
FindDeveloperCommand command = new FindDeveloperCommand(predicate);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ public void execute_caseInsensitiveDescriptionSearch_projectFound() {
FindProjectCommand command = new FindProjectCommand(predicate);
expectedModel.updateFilteredProjectList(predicate);
assertProjectCommandSuccess(command, model, expectedMessage, expectedModel);
assertEquals(Arrays.asList(PROJECT_A, PROJECT_B, PROJECT_C, PROJECT_A_NO_SPACING), model.getFilteredProjectList());
assertEquals(Arrays.asList(PROJECT_A, PROJECT_B, PROJECT_C, PROJECT_A_NO_SPACING),
model.getFilteredProjectList());
}


Expand Down

0 comments on commit aeb41c6

Please sign in to comment.