Skip to content

Commit

Permalink
Merge branch 'master' into branch-Fix-Bugs-PE-D
Browse files Browse the repository at this point in the history
  • Loading branch information
raydenlim authored Nov 9, 2023
2 parents 5709745 + 788f066 commit 9e0b65c
Show file tree
Hide file tree
Showing 6 changed files with 124 additions and 37 deletions.
4 changes: 3 additions & 1 deletion docs/AboutUs.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,9 @@ You can reach us at the email `seer[at]comp.nus.edu.sg`

<img src="images/ldinghan.png" width="200px">

[[github](http://github.com/ldinghan)] [[portfolio](team/ldinghan.md)]
[[homepage](http://linkedin.com/in/dinghanlim/)]
[[github](http://github.com/ldinghan)]
[[portfolio](team/ldinghan.md)]

* Role: Developer
* Responsibilities: Data
Expand Down
43 changes: 32 additions & 11 deletions docs/team/ldinghan.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,48 @@ title: "Ding Han's Project Portfolio Page"

F.A.K.E.J.A.R.V.I.S. is a project to help CS1101S Avengers manage their time and responsibilities more effectively.

Below are my contributions to the project:
Given below are my contributions to the project:

* **New Feature**: Added the ability to create new sessions.
* What it does: Allows Avengers to create new sessions, allowing for easy tracking of the Avenger's students' attendance and storing of other information relevant to each session.
* Justification: This is a fundamental feature for our product because it is the most crucial aspects of the role of Avengers, which is to conduct studio tutorial sessions. This feature is the foundation for other features such as attendance taking and storing of remarks.
* Highlights: There was some design thought given to how information is stored in the model. To prevent cyclic-reference between students and sessions, we decided to only store student models in sessions, and not sessions in students.
* Credits: No reuse of code or third-party libraries.

* **New Feature**: Added the ability to delete created sessions.
* What it does: Allows Avengers to delete previously created sessions, allowing for errors to be corrected when sessions are accidentally created.
* Justification: This is an important feature enhancement for our product because given the nature of our CLI product, mistakes in inputs are likely, and the ability to delete a wrongly-created session will be important to correct these possibly frequently-occurring situations.
* Credits: No reuse of code or third-party libraries.

* **New Feature**: Added the ability to take attendance of students for each session.
* What it does: Enables Avengers to easily record the attendance of their students for each session, allowing for easy tracking of the Avenger's students' attendance.
* Justification: This feature greatly complements the session feature as each session can now store information regarding students' attendance to identify studio tutorial sessions that they have attended.
* Credits: No reuse of code or third-party libraries.

* **New Feature**: Added the ability to view the attendance of particular student(s).
* What it does: Allows Avengers to retrieve an instant overview of their students' attendance to easily identify any studio tutorial sessions that they may have missed.
* Justification: This feature is a significant enhancement to our product as it provides a quick and convenient way for Avengers to monitor individual students' attendance and ensure they are not missing crucial studio tutorial sessions.
* Highlights: This enhancement needs to be able to filter the sessions based on whether the given students are present in that session. The use of Predicate<Session> allowed for easy filtering of the session by checking for the presence of given students in each session.
* Credits: No reuse of code or third-party libraries.

* **New Features**:
* Create session
* Add remarks to sessions
* Take attendance of students
* View attendance of students

* **Code contributed**: [RepoSense](https://nus-cs2103-ay2324s1.github.io/tp-dashboard/?search=ldinghan&breakdown=true)

* **Project management**: To be added
* **Project management**:
* Reviewed and approved pull requests


* **Enhancements to existing features**: To be added
* **Enhancements to existing features**:
* Converted `address` fields to `teleHandle` fields since address is not as relevant for our product's use case and Telegram Chat is the primary form of communication.


* **Documentation**:
* User Guide: To be added

* Developer Guide: To be added
* User Guide:
* Added documentation for the Session Management Section.
* Designed the annotated images displaying the different sections of the UI of the product.

* Developer Guide:
* Designed the class diagram for `Session`.

* **Review/mentoring contributions**: To be added

Expand Down
70 changes: 57 additions & 13 deletions docs/team/raydenlim.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,30 +19,74 @@ F.A.K.E.J.A.R.V.I.S. is a brownfield project built on Address Book 3 (AB3), with

Given below are my contributions to the project.

* **New Features**:
* GradedTests
* View graded tests of students at a glance.
* Dynamically update/edit any graded test scores.
<br><br>
* Credits:
* My last braincell and his friend
* **New Feature 1**: Added the Graded Test component
* **What it does**: Enables users to view the graded tests of their students at a glance.
* **Justification**: Currently in CS1101S, the Avengers would have to navigate through the many folders in Canvas to access their student's results 1 by 1. This process is time-consuming as the grades are not consolidated in one single platform.
* **Highlights**: The graded tests are displayed within the Student's card, enabling the Avengers to retrieve their student's grades at a glance. This provides a super convenient way for Avengers to better track their student's performance.
* **Credits**: No reuse of code or third-party libraries used.

<br>

* **Code contributed**: [RepoSense link](https://tinyurl.com/CS2103T15raydenlim)
* **New Feature 2**: Added the ability to edit graded tests.
* **What it does**: Enables users to dynamically edit their student's graded test scores.
* **Justification**: The ability to edit graded test scores is essential to accommodate situations where grades may need to be adjusted, updated, or corrected.
* **Highlights**: As the fields are optional, users can easily modify the scores for individual components of a student's graded test, without having to key in the scores for the unconcerned fields. Moreover, graded test scores can be edited via the `edit` and `editgradedtest` command.
* `edit INDEX gt/ RA1:0 | RA2:0 | MidTerms:0 | Finals:0 | PE:0`
* Readability: The command is more descriptive, making it clear that it is editing a person's graded test.
* Flexibility: Users can potentially edit other person-related attributes if needed in the future by
extending the command.
* `editgradedtest ra1/0 ra2/0 mt/0 f/0 pe/0`
* Conciseness: It's shorter and easier to type, which can be beneficial if users need to edit graded test scores frequently.
* Consistency: If the primary use case for this command is editing graded test scores, it might provide a more streamlined experience.
* **Credits**: No reuse of code or third-party libraries used.
<br>

* **Project management**:
* **Code contributed**: [raydenlim's RepoSense](https://tinyurl.com/CS2103T15raydenlim)
<br>

* **Enhancements to existing features**:
* **Enhancements implemented**:

<br>

* **Documentation**:
* User Guide:
* **Contributions to User Guide**:
* Added documentation for Graded Test Management Section.
* Organised the format of the User Guide.
* Expanded on the command summary with examples.
* Updated the Tables of Content.

<br>
* **Contributions Developer Guide**:
* Designed the class diagram for `GradedTest`

* Developer Guide:
<br>

* **Community**:
* **Contributions to team-based tasks**:
* Updated User Guide and Error Messages to be more lucid.
* Set up an Excel Sheet for PE-D bugs for enhanced clarity.
* Made the logo for F.A.K.E.J.A.R.V.I.S.
* Update the logo of the UI.
* Bug Hunting.

<br>

* **Review/mentoring contributions**:
* [raydenlim's tp comments](https://nus-cs2103-ay2324s1.github.io/dashboards/contents/tp-comments.html#9-lim-song-raydenlim-73-comments)

<br>

* **Contributions beyond the project team**:
* [raydenlim's forum post](https://nus-cs2103-ay2324s1.github.io/dashboards/contents/forum-activities.html#60-lim-song-raydenlim-6-posts)
* Contributed to forum discussions, and shared some unusual bugs and how to resolve them. (examples: [Assisting](https://github.com/nus-cs2103-AY2324S1/forum/issues/122#issuecomment-1711100005),
[Unusual Bugs](https://github.com/nus-cs2103-AY2324S1/forum/issues/274#issuecomment-1770647394))

<br>

* **Tools**:
* Jave
* Java
* IntelliJ
* FXML
* PlantUML
* GitHub
* CATcher Smoke Test
10 changes: 6 additions & 4 deletions src/main/java/seedu/address/logic/parser/ParserUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.format.ResolverStyle;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
Expand Down Expand Up @@ -41,9 +42,9 @@
*/
public class ParserUtil {

public static final String MESSAGE_INVALID_INDEX = "Task index is not a non-zero unsigned integer.";
public static final String MESSAGE_INVALID_DATE = "Date is needs to be in the format dd/MM/yyyy.";
public static final String MESSAGE_INVALID_TIME = "Time is needs to be in the format HH:mm.";
public static final String MESSAGE_INVALID_INDEX = "Index not a non-zero unsigned integer.";
public static final String MESSAGE_INVALID_DATE = "Date needs to be in the format dd/MM/yyyy.";
public static final String MESSAGE_INVALID_TIME = "Time needs to be in the format HH:mm.";

/**
* Parses {@code oneBasedIndex} into an {@code Index} and returns it. Leading and trailing whitespaces will be
Expand Down Expand Up @@ -168,7 +169,8 @@ public static Set<Tag> parseTags(Collection<String> tags) throws ParseException
public static LocalDate parseDate(String date) throws ParseException {
requireNonNull(date);
String trimmedDate = date.trim();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/uuuu")
.withResolverStyle(ResolverStyle.STRICT);
try {
return LocalDate.parse(trimmedDate, formatter);
} catch (DateTimeParseException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@
import static seedu.address.logic.parser.CliSyntax.PREFIX_TASK_PROGRESS;
import static seedu.address.model.Model.PREDICATE_SHOW_ALL_TASKS;

import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;

import seedu.address.logic.commands.ViewTasksCommand;
Expand Down Expand Up @@ -46,27 +49,42 @@ public ViewTasksCommand parse(String args) throws ParseException {
Predicate<Task> predicate = PREDICATE_SHOW_ALL_TASKS;

if (argMultimap.getValue(PREFIX_TASK_NAME).isPresent()) {
String[] taskNameKeywords = argMultimap.getValue(PREFIX_TASK_NAME).get().split("\\s+");
String[] taskNameKeywords = ParserUtil.parseTaskName(
argMultimap.getValue(PREFIX_TASK_NAME).get()).taskName.split("\\s+");
predicate = new TaskNameContainsKeywordsPredicate(Arrays.asList(taskNameKeywords));
}

if (argMultimap.getValue(PREFIX_TASK_DESCRIPTION).isPresent()) {
String[] taskDescKeywords = argMultimap.getValue(PREFIX_TASK_DESCRIPTION).get().split("\\s+");
String[] taskDescKeywords = ParserUtil.parseTaskDescription(
argMultimap.getValue(PREFIX_TASK_DESCRIPTION).get()).description.split("\\s+");
predicate = new TaskDescriptionContainsKeywordsPredicate(Arrays.asList(taskDescKeywords));
}

if (argMultimap.getValue(PREFIX_TASK_PRIORITY).isPresent()) {
String[] taskPriorityKeywords = argMultimap.getValue(PREFIX_TASK_PRIORITY).get().split("\\s+");
predicate = new TaskPriorityContainsKeywordsPredicate(Arrays.asList(taskPriorityKeywords));

List<String> checkedTaskPriorityKeywords = new ArrayList<>();
for (String str : taskPriorityKeywords) {
checkedTaskPriorityKeywords.add(ParserUtil.parseTaskPriority(str).name());
}

predicate = new TaskPriorityContainsKeywordsPredicate(checkedTaskPriorityKeywords);
}

if (argMultimap.getValue(PREFIX_TASK_PROGRESS).isPresent()) {
String[] taskProgressKeywords = argMultimap.getValue(PREFIX_TASK_PROGRESS).get().split("\\s+");
predicate = new TaskProgressContainsKeywordsPredicate(Arrays.asList(taskProgressKeywords));

List<String> checkedTaskProgressKeywords = new ArrayList<>();
for (String str : taskProgressKeywords) {
checkedTaskProgressKeywords.add(ParserUtil.parseTaskProgress(str).name());
}

predicate = new TaskProgressContainsKeywordsPredicate(checkedTaskProgressKeywords);
}

if (argMultimap.getValue(PREFIX_DATE).isPresent()) {
String[] dateKeywords = argMultimap.getValue(PREFIX_DATE).get().split("\\s+");
String[] dateKeywords = ParserUtil.parseDate(argMultimap.getValue(PREFIX_DATE).get())
.format(DateTimeFormatter.ofPattern("dd/MM/uuuu")).split("\\s+");
predicate = new DateContainsKeywordsPredicate(Arrays.asList(dateKeywords));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,14 @@ public void parse_validTaskDescArgs_returnsViewTasksCommand() {
assertParseSuccess(parser, " " + PREFIX_TASK_DESCRIPTION + "prs book", expectedCommand);

// multiple whitespaces between keywords
assertParseSuccess(parser, " " + PREFIX_TASK_DESCRIPTION + "prs \n \t book", expectedCommand);
assertParseSuccess(parser, " " + PREFIX_TASK_DESCRIPTION + "prs \t book", expectedCommand);
}

@Test
public void parse_validTaskProgressArgs_returnsViewTasksCommand() {
// no leading and trailing whitespaces
ViewTasksCommand expectedCommand =
new ViewTasksCommand(new TaskProgressContainsKeywordsPredicate(Arrays.asList("done", "pending")));
new ViewTasksCommand(new TaskProgressContainsKeywordsPredicate(Arrays.asList("DONE", "PENDING")));
assertParseSuccess(parser, " " + PREFIX_TASK_PROGRESS + "done pending", expectedCommand);

// multiple whitespaces between keywords
Expand All @@ -70,7 +70,7 @@ public void parse_validTaskProgressArgs_returnsViewTasksCommand() {
public void parse_validTaskPriorityArgs_returnsViewTasksCommand() {
// no leading and trailing whitespaces
ViewTasksCommand expectedCommand =
new ViewTasksCommand(new TaskPriorityContainsKeywordsPredicate(Arrays.asList("low", "high")));
new ViewTasksCommand(new TaskPriorityContainsKeywordsPredicate(Arrays.asList("LOW", "HIGH")));
assertParseSuccess(parser, " " + PREFIX_TASK_PRIORITY + "low high", expectedCommand);

// multiple whitespaces between keywords
Expand Down

0 comments on commit 9e0b65c

Please sign in to comment.