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
6 changes: 6 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,12 @@
<version>${version.junit}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${version.mockito}</version>
<scope>test</scope>
</dependency>
<!-- Other dependencies -->
<dependency>
<groupId>org.projectlombok</groupId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package backend.challenge.modules.task.dtos;

public interface ITaskDtoFactory {
public TaskDTO build(String title, String description);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package backend.challenge.modules.task.dtos;

public interface ITaskProgressDtoFactory {

public TaskProgressDTO build(Long taskId, int progress);
}
12 changes: 12 additions & 0 deletions source/backend/challenge/modules/task/dtos/TaskDtoFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package backend.challenge.modules.task.dtos;

public class TaskDtoFactory implements ITaskDtoFactory{

@Override
public TaskDTO build(String title, String description) {
TaskDTO taskDTO = TaskDTO.create();
taskDTO.setTitle(title);
taskDTO.setDescription(description);
return taskDTO;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package backend.challenge.modules.task.dtos;

public class TaskProgressDtoFactory implements ITaskProgressDtoFactory{

@Override
public TaskProgressDTO build(Long taskId, int progress) {
TaskProgressDTO taskProgressDTO = TaskProgressDTO.create();
taskProgressDTO.setId(taskId);
taskProgressDTO.setProgress(progress);
return taskProgressDTO;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package backend.challenge.modules.task.infra.http.controllers;

import backend.challenge.modules.task.dtos.TaskDtoFactory;
import backend.challenge.modules.task.dtos.TaskProgressDtoFactory;
import backend.challenge.modules.task.infra.http.views.TaskProgressView;
import backend.challenge.modules.task.infra.http.views.TaskView;
import backend.challenge.modules.task.models.Task;
import backend.challenge.modules.task.services.*;
Expand All @@ -17,40 +20,42 @@ public class TaskController {
private final IRetrieveAllTasksService retrieveAllTasksService;
private final IRetrieveTaskByIdService retrieveTaskByIdService;
private final IUpdateTaskService updateTaskService;
private final IUpdateTaskProgressService updateTaskProgressService;

@Inject
public TaskController(
final ICreateTaskService createTaskService,
final IDeleteTaskService deleteTaskService,
final IRetrieveAllTasksService retrieveAllTasksService
) {
final ICreateTaskService createTaskService,
final IDeleteTaskService deleteTaskService,
final IRetrieveAllTasksService retrieveAllTasksService,
final IRetrieveTaskByIdService retrieveTaskByIdService,
final IUpdateTaskService updateTaskService,
final IUpdateTaskProgressService updateTaskProgressService
) {
this.createTaskService = createTaskService;
this.deleteTaskService = deleteTaskService;
this.retrieveAllTasksService = retrieveAllTasksService;
this.retrieveTaskByIdService = null;
this.updateTaskService = null;
}
this.retrieveTaskByIdService = retrieveTaskByIdService;
this.updateTaskService = updateTaskService;
this.updateTaskProgressService = updateTaskProgressService;
}

@GET
public Response show() {
// TODO: Rota que lista todas as tarefas

return DefaultResponse.ok().entity("Hello world");
return DefaultResponse.ok().entity(retrieveAllTasksService.execute());
}

@GET
@Path("single/{taskId}")
public Response index(@PathParam("taskId") Long taskId) {
// TODO: A rota deve retornar somente a tarefa a qual o id corresponder

return DefaultResponse.ok().entity("Hello world");
return retrieveTaskByIdService.execute(taskId);
}

@POST
public Response create(TaskView task) {
// TODO: A rota deve receber title e description, sendo o `title` o título da tarefa e `description` uma descrição da tarefa.

return DefaultResponse.ok().entity("Hello world");
return createTaskService.execute(new TaskDtoFactory().build(task.getTitle(), task.getDescription()));
}

@PUT
Expand All @@ -60,16 +65,25 @@ public Response update(@PathParam("taskId") Long taskId, Task task) {
TODO: A rota deve alterar apenas o title e description da tarefa
que possua o id igual ao id correspondente nos parâmetros da rota.
*/
return updateTaskService.execute(taskId, task);
}

return DefaultResponse.ok().entity("Hello world");
@PUT
@Path("progress/single/{taskId}")
public Response updateProgress(@PathParam("taskId") Long taskId, TaskProgressView taskProgressView) {
/*
TODO: A rota deve alterar apenas o title e description da tarefa
que possua o id igual ao id correspondente nos parâmetros da rota.
*/
return updateTaskProgressService.execute(new TaskProgressDtoFactory().build(taskId, taskProgressView.getProgress()));
}

@DELETE
@Path("single/{taskId}")
public Response delete(@PathParam("taskId") Long taskId) {
// TODO: A rota deve deletar a tarefa com o id correspondente nos parâmetros da rota

return DefaultResponse.ok().entity("Hello world");
deleteTaskService.execute(taskId);
return DefaultResponse.ok().entity("Tarefa removida com sucesso");
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package backend.challenge.modules.task.models;

import backend.challenge.modules.task.dtos.TaskDTO;

public interface ITaskFactory {

public Task build(TaskDTO taskDTO);
}
2 changes: 2 additions & 0 deletions source/backend/challenge/modules/task/models/Task.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package backend.challenge.modules.task.models;

import backend.challenge.modules.task.enums.TaskStatus;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
Expand All @@ -18,6 +19,7 @@ public class Task {
private String description;
private int progress;
private TaskStatus status;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date createdAt;

}
22 changes: 22 additions & 0 deletions source/backend/challenge/modules/task/models/TaskFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package backend.challenge.modules.task.models;

import backend.challenge.modules.task.dtos.TaskDTO;
import backend.challenge.modules.task.enums.TaskStatus;

import java.util.Date;
import java.util.UUID;

public class TaskFactory implements ITaskFactory{

@Override
public Task build(TaskDTO taskDTO) {
Task task = new Task();
task.setId(Math.abs(UUID.randomUUID().getLeastSignificantBits()));
task.setTitle(taskDTO.getTitle());
task.setDescription(taskDTO.getDescription());
task.setProgress(0);
task.setStatus(TaskStatus.PROGRESS);
task.setCreatedAt(new Date());
return task;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public interface ITaskRepository {
List<Task> show();
Task create(TaskDTO taskDTO);
Task update(Task task);
Task updateProgress(Task task);
void delete(Long taskId);

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,45 +2,68 @@

import backend.challenge.modules.task.dtos.TaskDTO;
import backend.challenge.modules.task.models.Task;
import backend.challenge.modules.task.models.TaskFactory;

import javax.inject.Singleton;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

@Singleton
public class TaskRepository implements ITaskRepository {

List<Task> taskList = new ArrayList<>();

@Override
public Task index(final Long taskId) {
public Task index(final Long taskId){
// TODO: Criar método responsável por retornar tarefa por id

return null;
List<Task> retrivedtask = taskList.stream().filter(task -> task.getId().equals(taskId)).collect(Collectors.toList());
Task task = null;
if (!retrivedtask.isEmpty()) {
task = retrivedtask.get(0);
}
return task;
}

@Override
public List<Task> show() {
// TODO: Criar método responsável por retornar todas as tarefas

return null;
return taskList;
}

@Override
public Task create(final TaskDTO taskDTO) {
// TODO: Criar método responsável por criar uma tarefa

return null;
Task task = null;
if (taskDTO.getTitle().trim().isEmpty()) {
return task;
}
task = new TaskFactory().build(taskDTO);
taskList.add(task);
return task;
}

@Override
public Task update(final Task task) {
// TODO: Criar método responsável por atualizar uma tarefa
// TODO: Criar método responsável por atualizar progresso e status da tarefa
Task retrivedTask = this.index(task.getId());
retrivedTask.setTitle(task.getTitle());
retrivedTask.setDescription(task.getDescription());
return retrivedTask;
}

return null;
@Override
public Task updateProgress(Task task) {
Task retrivedTask = this.index(task.getId());
retrivedTask.setProgress(task.getProgress());
retrivedTask.setStatus(task.getStatus());
return retrivedTask;
}

@Override
public void delete(final Long taskId) {
// TODO: Criar método responsável por deletar tarefa por id

Task task = this.index(taskId);
taskList.remove(task);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import backend.challenge.modules.task.dtos.TaskDTO;
import backend.challenge.modules.task.models.Task;
import backend.challenge.modules.task.repositories.ITaskRepository;
import kikaha.urouting.api.DefaultResponse;

import javax.inject.Inject;
import javax.inject.Singleton;
Expand All @@ -18,10 +19,12 @@ public CreateTaskService(final ITaskRepository taskRepository) {
}

@Override
public Task execute(TaskDTO taskDTO) {
public DefaultResponse execute(TaskDTO taskDTO) {
// TODO: Criar serviço responsável por criar uma tarefa

return null;
Task task = taskRepository.create(taskDTO);
if (task == null) {
return DefaultResponse.notModified().entity("Titulo não pode ser vazio");
}
return DefaultResponse.ok().entity(task);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public DeleteTaskService(final ITaskRepository taskRepository) {
@Override
public void execute(Long taskId) {
// TODO: Criar serviço responsável por deletar a tarefa
taskRepository.delete(taskId);
}

}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package backend.challenge.modules.task.services;

import backend.challenge.modules.task.dtos.TaskDTO;
import backend.challenge.modules.task.models.Task;
import kikaha.urouting.api.DefaultResponse;

public interface ICreateTaskService {

Task execute(TaskDTO taskDTO);
DefaultResponse execute(TaskDTO taskDTO);

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package backend.challenge.modules.task.services;

import backend.challenge.modules.task.models.Task;
import kikaha.urouting.api.DefaultResponse;

public interface IRetrieveTaskByIdService {

Task execute(Long taskId);
DefaultResponse execute(Long taskId);

}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package backend.challenge.modules.task.services;

import backend.challenge.modules.task.dtos.TaskProgressDTO;
import backend.challenge.modules.task.models.Task;
import kikaha.urouting.api.DefaultResponse;

public interface IUpdateTaskProgressService {

Task execute(TaskProgressDTO taskProgressDTO);
DefaultResponse execute(TaskProgressDTO taskProgressDTO);

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package backend.challenge.modules.task.services;

import backend.challenge.modules.task.models.Task;
import kikaha.urouting.api.DefaultResponse;

public interface IUpdateTaskService {

Task execute(Task task);
DefaultResponse execute(Long taskId, Task task);

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ public RetrieveAllTasksService(final ITaskRepository taskRepository) {
@Override
public List<Task> execute() {
// TODO: Criar serviço responsável por recuperar todas as tarefas

return null;
return taskRepository.show();
}

}
Loading