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
1 change: 0 additions & 1 deletion source/backend/challenge/modules/task/dtos/TaskDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,4 @@ public class TaskDTO {

private String title;
private String description;

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,4 @@ public class TaskProgressDTO {

private Long id;
private int progress;

}
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package backend.challenge.modules.task.infra.http.controllers;

import backend.challenge.modules.task.dtos.TaskDTO;
import backend.challenge.modules.task.infra.http.views.TaskView;
import backend.challenge.modules.task.models.Task;
import backend.challenge.modules.task.services.*;
import kikaha.urouting.api.*;

import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.List;

@Singleton
@Path("tasks")
Expand All @@ -20,56 +22,81 @@ public class TaskController {

@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
){
this.createTaskService = createTaskService;
this.deleteTaskService = deleteTaskService;
this.retrieveAllTasksService = retrieveAllTasksService;
this.retrieveTaskByIdService = null;
this.updateTaskService = null;
this.retrieveTaskByIdService = retrieveTaskByIdService;
this.updateTaskService = updateTaskService;
}

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

return DefaultResponse.ok().entity("Hello world");
try {
List<Task> allTasks = retrieveAllTasksService.execute();
return DefaultResponse.ok().entity(allTasks);
} catch (Exception e) {
return DefaultResponse.badRequest().entity(e.getMessage());
}
}

@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");
try {
Task task = retrieveTaskByIdService.execute(taskId);
if (task == null) {
return DefaultResponse.notFound();
}
return DefaultResponse.ok().entity(task);
} catch (Exception e) {
return DefaultResponse.badRequest().entity(e.getMessage());
}
}

@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");
try {
TaskDTO taskDto = TaskDTO.create();
taskDto.setTitle(task.getTitle());
taskDto.setDescription(task.getDescription());
Task newTask = createTaskService.execute(taskDto);
return DefaultResponse.created().entity(newTask);
} catch (Exception e) {
return DefaultResponse.badRequest().entity(e.getMessage());
}
}

@PUT
@Path("single/{taskId}")
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 DefaultResponse.ok().entity("Hello world");
try {
Task updateTask = retrieveTaskByIdService.execute(taskId);
if (updateTask == null) {
return DefaultResponse.notFound();
}
updateTask.setTitle(task.getTitle());
updateTask.setDescription(task.getDescription());
Task updatedTask = updateTaskService.execute(updateTask, task);
return DefaultResponse.ok().entity(updatedTask);
} catch (Exception e) {
return DefaultResponse.badRequest().entity(e.getMessage());
}
}

@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");
try {
Task deleteTask = retrieveTaskByIdService.execute(taskId);
if (deleteTask == null) {
return DefaultResponse.notFound();
}
deleteTaskService.execute(taskId);

return DefaultResponse.noContent();
}catch (Exception e) {
return DefaultResponse.badRequest().entity(e.getMessage());
}
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package backend.challenge.modules.task.infra.http.controllers;

import backend.challenge.modules.task.dtos.TaskProgressDTO;
import backend.challenge.modules.task.infra.http.views.TaskProgressView;
import backend.challenge.modules.task.models.Task;
import backend.challenge.modules.task.services.*;
Expand All @@ -13,11 +14,13 @@
public class TaskProgressController {

private final IUpdateTaskProgressService updateTaskProgressService;
private final IRetrieveTaskByIdService retrieveTaskByIdService;

@Inject
public TaskProgressController(final IUpdateTaskProgressService updateTaskProgressService) {
public TaskProgressController(final IUpdateTaskProgressService updateTaskProgressService, final IRetrieveTaskByIdService retrieveTaskByIdService) {
this.updateTaskProgressService = updateTaskProgressService;
}
this.retrieveTaskByIdService = retrieveTaskByIdService;
}

@PUT
@Path("single/{taskId}")
Expand All @@ -29,7 +32,25 @@ public Response updateProgress(@PathParam("taskId") Long taskId, TaskProgressVie
o `status` deve ser alterado para `COMPLETE`
*/

return DefaultResponse.ok().entity("Hello world");
try {
if (taskProgressView.getProgress() < 1 || taskProgressView.getProgress() > 100) {
return DefaultResponse.badRequest().entity("Enter a value between 1 and 100");
}

TaskProgressDTO taskProgressDTO = TaskProgressDTO.create();
taskProgressDTO.setId(taskId);
taskProgressDTO.setProgress(taskProgressView.getProgress());
Task taskToUpdate = retrieveTaskByIdService.execute(taskId);

if (taskToUpdate == null) {
return DefaultResponse.notFound();
}

taskToUpdate = updateTaskProgressService.execute(taskProgressDTO);
return DefaultResponse.ok().entity(taskToUpdate);
} catch (Exception e) {
return DefaultResponse.badRequest().entity(e.getMessage());
}
}

}
16 changes: 8 additions & 8 deletions source/backend/challenge/modules/task/models/Task.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,21 @@
import backend.challenge.modules.task.enums.TaskStatus;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.util.Date;

@Getter
@Setter
@NoArgsConstructor
@Accessors(chain = true)
public class Task {

private Long id;
private String title;
private String description;
private int progress;
private TaskStatus status;
private Date createdAt;

private Long id;
private String title;
private String description;
private int progress;
private TaskStatus status;
private Date createdAt;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package backend.challenge.modules.task.repositories;

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

import java.util.List;
Expand All @@ -12,5 +13,6 @@ public interface ITaskRepository {
Task create(TaskDTO taskDTO);
Task update(Task task);
void delete(Long taskId);
Task UpdateProgress(TaskProgressDTO taskProgressDTO);

}
Original file line number Diff line number Diff line change
@@ -1,46 +1,73 @@
package backend.challenge.modules.task.repositories;

import backend.challenge.modules.task.dtos.TaskDTO;
import backend.challenge.modules.task.dtos.TaskProgressDTO;
import backend.challenge.modules.task.enums.TaskStatus;
import backend.challenge.modules.task.models.Task;

import javax.inject.Singleton;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;

@Singleton
public class TaskRepository implements ITaskRepository {

private final static List<Task> tasks = new ArrayList<>();

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

return null;
return tasks.stream().filter(task -> task.getId().equals(taskId)).findFirst().orElse(null);
}

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

return null;
return tasks;
}

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

newTask.setId(UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE);
newTask.setTitle(taskDTO.getTitle());
newTask.setDescription(taskDTO.getDescription());
newTask.setProgress(0);
newTask.setStatus(TaskStatus.PROGRESS);
newTask.setCreatedAt(new Date());
tasks.add(newTask);

return null;
return newTask;
}

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

return null;
return taskUpdate;
}

@Override
public void delete(final Long taskId) {
// TODO: Criar método responsável por deletar tarefa por id
Task taskToDelete = this.index(taskId);
tasks.remove(taskToDelete);
}

@Override
public Task UpdateProgress(TaskProgressDTO taskProgressDTO) {
Task task = index(taskProgressDTO.getId());

if (taskProgressDTO.getProgress() > 0 && taskProgressDTO.getProgress() <= 100) {
task.setProgress(taskProgressDTO.getProgress());
if (taskProgressDTO.getProgress() == 100) {
task.setStatus(TaskStatus.COMPLETE);
}
}
return task;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,8 @@ public CreateTaskService(final ITaskRepository taskRepository) {

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

return null;
return taskRepository.create(taskDTO);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,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
Expand Up @@ -4,6 +4,5 @@

public interface IUpdateTaskService {

Task execute(Task task);

Task execute(Task task, Task newTask);
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,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();
}

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

import backend.challenge.modules.task.models.Task;
import backend.challenge.modules.task.repositories.ITaskRepository;

import javax.inject.Inject;
import javax.inject.Singleton;

@Singleton
public class RetrieveTaskByIdService implements IRetrieveTaskByIdService{
private final ITaskRepository taskRepository;

@Inject
public RetrieveTaskByIdService(final ITaskRepository taskRepository) {
this.taskRepository = taskRepository;
}

@Override
public Task execute(Long taskID) {
return this.taskRepository.index(taskID);
}


}
Loading