Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 113 additions & 0 deletions domainmodel.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
## Core Requirements Domain Model

### 1. I want to add tasks to my todo list.

| Class | Instance Variables | Methods | Scenario | Output |
| -------- | -------------------------------- | --------------------------- | --------------------------------- | ------ |
| TodoList | List<Task> tasks | addTask(Task task): boolean | task.name does not exist in tasks | true |
| | | | task.name already exists in tasks | false |
| Task | String name<br>boolean completed | | | |


### 2. I want to see all the tasks in my todo list.

| Class | Instance Variables | Methods | Scenario | Output |
| -------- | ------------------ | ------------------------- | ------------------------------ | -------------------- |
| TodoList | List<Task> tasks | getAllTasks(): List<Task> | tasks contains at least 1 task | list of task objects |
| | | | tasks is empty or null | null |


### 3. I want to change the status of a task between incomplete and complete.

| Class | Instance Variables | Methods | Scenario | Output |
| -------- | ------------------ | ---------------------------------- | --------------------------------------------------------------- | ------ |
| TodoList | List<Task> tasks | toggleStatus(String name): boolean | tasks contains a Task with name = "X" | true |
| | | | tasks is empty or tasks does not contain a Task with name = "X" | false |


### 4. I want to be able to get only the complete tasks.

| Class | Instance Variables | Methods | Scenario | Output |
| -------- | ------------------ | ------------------------------ | -------------------------------------------------------- | ----------------------- |
| TodoList | List<Task> tasks | getCompleteTasks(): List<Task> | tasks contains at least one Task where completed == true | list of completed tasks |
| | | | tasks is empty or no Task is completed | empty list or null |


### 5. I want to be able to get only the incomplete tasks.

| Class | Instance Variables | Methods | Scenario | Output |
| -------- | ------------------ | -------------------------------- | --------------------------------------------------------- | ------------------------ |
| TodoList | List<Task> tasks | getIncompleteTasks(): List<Task> | tasks contains at least one Task where completed == false | list of incomplete tasks |
| | | | tasks is empty or all Tasks are completed | empty list or null |


### 6. I want to search for a task and receive a message that says it wasn't found if it doesn't exist.

| Class | Instance Variables | Methods | Scenario | Output |
| -------- | ------------------ | ----------------------------- | --------------------------------------------------- | ---------------- |
| TodoList | List<Task> tasks | findTask(String name): String | tasks contains a Task with name = "X" | task name |
| | | | tasks is empty or does not contain a Task with name | "Task not found" |


### 7. I want to remove tasks from my list.

| Class | Instance Variables | Methods | Scenario | Output |
| -------- | ------------------ | -------------------------------- | --------------------------------------------------- | ------ |
| TodoList | List<Task> tasks | removeTask(String name): boolean | tasks contains a Task with name = "X" | true |
| | | | tasks is empty or does not contain a Task with name | false |


### 8. I want to see all the tasks in my list ordered alphabetically in ascending order.

| Class | Instance Variables | Methods | Scenario | Output |
| -------- | ------------------ | ------------------------------- | ----------------------------- | --------------- |
| TodoList | List<Task> tasks | getTasksAscending(): List<Task> | tasks contains multiple tasks | list sorted A-Z |


### 9. I want to see all the tasks in my list ordered alphabetically in descending order.

| Class | Instance Variables | Methods | Scenario | Output |
| -------- | ------------------ | -------------------------------- | ----------------------------- | --------------- |
| TodoList | List<Task> tasks | getTasksDescending(): List<Task> | tasks contains multiple tasks | list sorted Z-A |


## Extension Requirements Domain Model

### 1. I want to be able to get a task by a unique ID.

| Class | Instance Variables | Methods | Scenario | Output |
| -------- | ------------------------------------------------------------------------ | ---------------------------- | ----------------------------------- | ----------- |
| TodoList | List<Task> tasks | getTaskById(String id): Task | tasks contains a task with ID = "X" | Task object |
| | | | tasks is empty or no task with ID | null |
| Task | String id<br>String name<br>boolean completed<br>LocalDateTime createdAt | | | |



### 2. I want to update the name of a task by providing its ID and a new name.

| Class | Instance Variables | Methods | Scenario | Output |
| -------- | ------------------------------------------------------------------------ | -------------------------------------------------- | ------------------------------------- | ------ |
| TodoList | List<Task> tasks | updateTaskName(String id, String newName): boolean | task with ID exists<br>name is unique | true |
| | | | task not found<br>name not unique | false |
| Task | String id<br>String name<br>boolean completed<br>LocalDateTime createdAt | | | |



### 3. I want to be able to change the status of a task by providing its ID.

| Class | Instance Variables | Methods | Scenario | Output |
| -------- | ------------------------------------------------------------------------ | ------------------------------------ | ------------------- | ------ |
| TodoList | List<Task> tasks | toggleStatusById(String id): boolean | task with ID exists | true |
| | | | task not found | false |
| Task | String id<br>String name<br>boolean completed<br>LocalDateTime createdAt | | | |



### 4. I want to be able to see the date and time that I created each task.

| Class | Instance Variables | Methods | Scenario | Output |
| ----- | ------------------------------------------------------------------------ | ----------------------------- | -------- | ---------------- |
| Task | String id<br>String name<br>boolean completed<br>LocalDateTime createdAt | getCreatedAt(): LocalDateTime | | Date/time object |



23 changes: 23 additions & 0 deletions src/main/java/com/booleanuk/core/Task.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.booleanuk.core;

public class Task {
private String name;
private boolean completed;

public Task(String name) {
this.name = name;
}

public String getName() {
return name;
}
public boolean isCompleted() {
return completed;
}

public void setCompleted(boolean completed) {
this.completed = completed;
}


}
87 changes: 87 additions & 0 deletions src/main/java/com/booleanuk/core/TodoList.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,92 @@
package com.booleanuk.core;

import java.util.ArrayList;
import java.util.List;
import java.util.Comparator;

public class TodoList {
private List<Task> tasks;

public TodoList() {
this.tasks = new ArrayList<>();
}

public boolean addTask(Task task) {
for (Task t : tasks) {
if (t.getName().equals(task.getName())) {
return false;
}
}
tasks. add(task);
return true;
}

public List<Task> getAllTasks(){
return this.tasks;
}

public boolean toggleStatus(String name) {
for (Task t : tasks) {
if (t.getName().equals(name)) {
t.setCompleted(!t.isCompleted());
return true;
}
}
return false;
}

public List<Task> getCompleteTasks() {
List<Task> completed = new ArrayList<>();
for (Task task : this.tasks) {
if (task.isCompleted()) {
completed.add(task);
}
}
return completed;
}

public List<Task> getIncompleteTasks(){
List<Task> incompleted = new ArrayList<>();
for (Task task : this.tasks) {
if (!task.isCompleted()){
incompleted.add(task);
}
}
return incompleted;
}

public String findTask(String name) {
for (Task task : tasks) {
if (task.getName().equals(name)) {
return task.getName();
}

}
return "Task not found!";
}

public boolean removeTask(String name) {
for (Task task : tasks) {
if (task.getName().equals(name)) {
tasks.remove(task);
return true;
}
}
return false;
}

public List<Task> getTasksSortedAscending() {
List<Task> sortedTasks = new ArrayList<>(tasks);
sortedTasks.sort(Comparator.comparing(Task::getName));
return sortedTasks;
}

public List<Task> getTasksSortedDescending() {
List<Task> sortedTasks = new ArrayList<>(tasks);
sortedTasks.sort(Comparator.comparing(Task::getName).reversed());
return sortedTasks;
}



}
42 changes: 42 additions & 0 deletions src/main/java/com/booleanuk/extension/Task.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.booleanuk.extension;

import java.time.LocalDateTime;
import java.util.UUID;

public class Task {
private final String id;
private String name;
private boolean completed;
private final LocalDateTime createdAt;

public Task(String name) {
this.id = UUID.randomUUID().toString();
this.name = name;
this.completed = false;
this.createdAt = LocalDateTime.now();
}

public String getId() {
return id;
}

public String getName() {
return name;
}

public boolean isCompleted() {
return completed;
}

public LocalDateTime getCreatedAt() {
return createdAt;
}

public void setName(String name) {
this.name = name;
}

public void toggleCompleted() {
this.completed = !this.completed;
}
}
59 changes: 59 additions & 0 deletions src/main/java/com/booleanuk/extension/TodoList.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.booleanuk.extension;

import java.util.ArrayList;
import java.util.List;

public class TodoList {
private final List<Task> tasks;

public TodoList() {
this.tasks = new ArrayList<>();
}

public boolean addTask(Task task) {

for (Task t : tasks) {
if (t.getName().equalsIgnoreCase(task.getName())) {
return false;
}
}
tasks.add(task);
return true;
}

public Task getTaskById(String id) {
for (Task t : tasks) {
if (t.getId().equals(id)) {
return t;
}
}
return null;
}
public boolean updateTaskName(String id, String newName) {
for (Task t : tasks) {
if (t.getName().equalsIgnoreCase(newName)) {
return false;
}
}
Task task = getTaskById(id);
if (task != null) {
task.setName(newName);
return true;
}
return false;
}

public boolean toggleStatusById(String id) {
Task task = getTaskById(id);
if (task != null) {
task.toggleCompleted();
return true;
}
return false;
}

public List<Task> getAllTasks() {

return this.tasks;
}
}
Loading
Loading