diff --git a/backend/src/main/java/net/beetechgroup/beetask/entities/Task.java b/backend/src/main/java/net/beetechgroup/beetask/entities/Task.java index 7d3a7c4..8fcbde5 100644 --- a/backend/src/main/java/net/beetechgroup/beetask/entities/Task.java +++ b/backend/src/main/java/net/beetechgroup/beetask/entities/Task.java @@ -1,14 +1,17 @@ package net.beetechgroup.beetask.entities; +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; public class Task { private Long id; private String title; private String description; - private String status; + private TaskStatus status; private String project; - private List activities; + private List history = new ArrayList<>(); public Long getId() { return id; @@ -34,11 +37,11 @@ public class Task { this.description = description; } - public String getStatus() { + public TaskStatus getStatus() { return status; } - public void setStatus(String status) { + public void setStatus(TaskStatus status) { this.status = status; } @@ -50,12 +53,52 @@ public class Task { this.project = project; } - public List getActivities() { - return activities; + public List getHistory() { + return history; } - public void setActivities(List activities) { - this.activities = activities; + public void setHistory(List history) { + this.history = history; + } + + public boolean isRunning() { + return history.stream().anyMatch(TaskHistoryItem::isRunning); + } + + private TaskHistoryItem getCurrentRunningItem() { + return history.stream() + .filter(TaskHistoryItem::isRunning) + .findFirst() + .orElse(null); +} + + public void start() { + TaskHistoryItem current = getCurrentRunningItem(); + + if (current != null) { + throw new IllegalStateException("Tarefa já está em execução"); + } + + this.status = TaskStatus.IN_PROGRESS; + TaskHistoryItem item = new TaskHistoryItem(); + item.setStartAt(LocalDateTime.now()); + this.history.add(item); + } + + public void stop() { + TaskHistoryItem current = getCurrentRunningItem(); + + if (current == null) { + throw new IllegalStateException("Task não está em execução"); + } + + current.setEndAt(LocalDateTime.now()); +} + +public Duration getTotalTime() { + return history.stream() + .map(TaskHistoryItem::getDuration) + .reduce(Duration.ZERO, Duration::plus); } } diff --git a/backend/src/main/java/net/beetechgroup/beetask/entities/TaskHistoryItem.java b/backend/src/main/java/net/beetechgroup/beetask/entities/TaskHistoryItem.java new file mode 100644 index 0000000..cd63d2b --- /dev/null +++ b/backend/src/main/java/net/beetechgroup/beetask/entities/TaskHistoryItem.java @@ -0,0 +1,36 @@ +package net.beetechgroup.beetask.entities; + +import java.time.Duration; +import java.time.LocalDateTime; + +public class TaskHistoryItem { + private LocalDateTime startAt; + private LocalDateTime endAt; + + public void setEndAt(LocalDateTime endAt) { + this.endAt = endAt; + } + + public LocalDateTime getStartAt() { + return startAt; + } + + public void setStartAt(LocalDateTime startAt) { + this.startAt = startAt; + } + + public LocalDateTime getEndAt() { + return endAt; + } + + public Duration getDuration() { + if (endAt == null) { + return Duration.between(startAt, LocalDateTime.now()); + } + return Duration.between(startAt, endAt); + } + + public boolean isRunning() { + return endAt == null; + } +} diff --git a/backend/src/main/java/net/beetechgroup/beetask/entities/TaskStatus.java b/backend/src/main/java/net/beetechgroup/beetask/entities/TaskStatus.java new file mode 100644 index 0000000..a5132d6 --- /dev/null +++ b/backend/src/main/java/net/beetechgroup/beetask/entities/TaskStatus.java @@ -0,0 +1,18 @@ +package net.beetechgroup.beetask.entities; + +public enum TaskStatus { + NOT_STARTED("NOT_STARTED"), + IN_PROGRESS("IN_PROGRESS"), + COMPLETED("COMPLETED"), + CANCELED("CANCELED"); + + private String status; + + TaskStatus(String status) { + this.status = status; + } + + public String getStatus() { + return status; + } +} diff --git a/backend/src/main/java/net/beetechgroup/beetask/frameworks/config/TaskUseCaseConfig.java b/backend/src/main/java/net/beetechgroup/beetask/frameworks/config/TaskUseCaseConfig.java index 53b4f3d..79aad3c 100644 --- a/backend/src/main/java/net/beetechgroup/beetask/frameworks/config/TaskUseCaseConfig.java +++ b/backend/src/main/java/net/beetechgroup/beetask/frameworks/config/TaskUseCaseConfig.java @@ -2,8 +2,10 @@ package net.beetechgroup.beetask.frameworks.config; import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.inject.Produces; -import net.beetechgroup.beetask.usecase.createtask.CreateTaskUseCase; import net.beetechgroup.beetask.usecase.repository.TaskRepository; +import net.beetechgroup.beetask.usecase.task.create.CreateTaskUseCase; +import net.beetechgroup.beetask.usecase.task.start.StartTaskUseCase; +import net.beetechgroup.beetask.usecase.task.stop.StopTaskUseCase; @ApplicationScoped public class TaskUseCaseConfig { @@ -12,4 +14,14 @@ public class TaskUseCaseConfig { public CreateTaskUseCase createTaskUseCase(TaskRepository taskRepository) { return new CreateTaskUseCase(taskRepository); } + + @Produces + public StartTaskUseCase startTaskUseCase(TaskRepository taskRepository) { + return new StartTaskUseCase(taskRepository); + } + + @Produces + public StopTaskUseCase stopTaskUseCase(TaskRepository taskRepository) { + return new StopTaskUseCase(taskRepository); + } } diff --git a/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/entities/TaskEntity.java b/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/entities/TaskEntity.java index 29aa6d3..a2f82d8 100644 --- a/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/entities/TaskEntity.java +++ b/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/entities/TaskEntity.java @@ -2,11 +2,15 @@ package net.beetechgroup.beetask.frameworks.persistence.entities; import java.util.List; +import jakarta.persistence.CollectionTable; +import jakarta.persistence.ElementCollection; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; import jakarta.persistence.Table; +import net.beetechgroup.beetask.entities.TaskStatus; @Entity @Table(name = "tasks") @@ -16,12 +20,19 @@ public class TaskEntity { private Long id; private String title; private String description; - private String status; + private TaskStatus status; private String project; - @jakarta.persistence.ElementCollection - @jakarta.persistence.CollectionTable(name = "task_activities", joinColumns = @jakarta.persistence.JoinColumn(name = "task_id")) - @jakarta.persistence.Column(name = "activity") - private List activities; + @ElementCollection + @CollectionTable(name = "task_history", joinColumns = @JoinColumn(name = "task_id")) + private List history; + + public void setHistory(List history) { + this.history = history; + } + + public List getHistory() { + return history; + } public Long getId() { return id; @@ -47,11 +58,11 @@ public class TaskEntity { this.description = description; } - public String getStatus() { + public TaskStatus getStatus() { return status; } - public void setStatus(String status) { + public void setStatus(TaskStatus status) { this.status = status; } @@ -63,12 +74,4 @@ public class TaskEntity { this.project = project; } - public List getActivities() { - return activities; - } - - public void setActivities(List activities) { - this.activities = activities; - } - } diff --git a/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/entities/TaskHistoryItemEntity.java b/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/entities/TaskHistoryItemEntity.java new file mode 100644 index 0000000..21c4636 --- /dev/null +++ b/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/entities/TaskHistoryItemEntity.java @@ -0,0 +1,27 @@ +package net.beetechgroup.beetask.frameworks.persistence.entities; + +import java.time.LocalDateTime; + +import jakarta.persistence.Embeddable; + +@Embeddable +public class TaskHistoryItemEntity { + private LocalDateTime startAt; + private LocalDateTime endAt; + + public LocalDateTime getStartAt() { + return startAt; + } + + public void setStartAt(LocalDateTime startAt) { + this.startAt = startAt; + } + + public LocalDateTime getEndAt() { + return endAt; + } + + public void setEndAt(LocalDateTime endAt) { + this.endAt = endAt; + } +} diff --git a/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/mapper/TaskHistoryItemMapper.java b/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/mapper/TaskHistoryItemMapper.java new file mode 100644 index 0000000..a8a18a1 --- /dev/null +++ b/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/mapper/TaskHistoryItemMapper.java @@ -0,0 +1,22 @@ +package net.beetechgroup.beetask.frameworks.persistence.mapper; + +import net.beetechgroup.beetask.entities.TaskHistoryItem; +import net.beetechgroup.beetask.frameworks.persistence.entities.TaskHistoryItemEntity; + +public class TaskHistoryItemMapper { + public static TaskHistoryItemEntity toEntity(TaskHistoryItem item) { + TaskHistoryItemEntity entity = new TaskHistoryItemEntity(); + entity.setStartAt(item.getStartAt()); + entity.setEndAt(item.getEndAt()); + return entity; + } + + public static TaskHistoryItem toDomain(TaskHistoryItemEntity entity) { + if (entity == null) return null; + + TaskHistoryItem item = new TaskHistoryItem(); + item.setStartAt(entity.getStartAt()); + item.setEndAt(entity.getEndAt()); + return item; + } +} \ No newline at end of file diff --git a/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/mapper/TaskMapper.java b/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/mapper/TaskMapper.java index 445342f..a0b3a5a 100644 --- a/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/mapper/TaskMapper.java +++ b/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/mapper/TaskMapper.java @@ -1,5 +1,6 @@ package net.beetechgroup.beetask.frameworks.persistence.mapper; +import java.util.ArrayList; import net.beetechgroup.beetask.entities.Task; import net.beetechgroup.beetask.frameworks.persistence.entities.TaskEntity; @@ -12,7 +13,7 @@ public class TaskMapper { entity.setDescription(task.getDescription()); entity.setStatus(task.getStatus()); entity.setProject(task.getProject()); - entity.setActivities(task.getActivities()); + entity.setHistory(new ArrayList<>(task.getHistory().stream().map(TaskHistoryItemMapper::toEntity).toList())); return entity; } @@ -25,7 +26,7 @@ public class TaskMapper { task.setDescription(entity.getDescription()); task.setStatus(entity.getStatus()); task.setProject(entity.getProject()); - task.setActivities(entity.getActivities()); + task.setHistory(new ArrayList<>(entity.getHistory().stream().map(TaskHistoryItemMapper::toDomain).toList())); return task; } diff --git a/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/repository/TaskRepositoryImpl.java b/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/repository/TaskRepositoryImpl.java index 1de1347..f2c9842 100644 --- a/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/repository/TaskRepositoryImpl.java +++ b/backend/src/main/java/net/beetechgroup/beetask/frameworks/persistence/repository/TaskRepositoryImpl.java @@ -7,6 +7,7 @@ import jakarta.transaction.Transactional; import net.beetechgroup.beetask.entities.Task; import net.beetechgroup.beetask.frameworks.persistence.entities.TaskEntity; import net.beetechgroup.beetask.frameworks.persistence.mapper.TaskMapper; +import net.beetechgroup.beetask.usecase.exceptions.TaskNotFoundException; import net.beetechgroup.beetask.usecase.repository.TaskRepository; @ApplicationScoped @@ -19,7 +20,20 @@ public class TaskRepositoryImpl implements TaskRepository { @Transactional public Task save(Task task) { TaskEntity entity = TaskMapper.toEntity(task); - em.persist(entity); + if (entity.getId() == null) { + em.persist(entity); + } else { + entity = em.merge(entity); + } + return TaskMapper.toDomain(entity); + } + + @Override + public Task findById(Long id) { + TaskEntity entity = em.find(TaskEntity.class, id); + if (entity == null) { + throw new TaskNotFoundException("Task not found"); + } return TaskMapper.toDomain(entity); } } \ No newline at end of file diff --git a/backend/src/main/java/net/beetechgroup/beetask/interfaceadapters/controllers/TaskController.java b/backend/src/main/java/net/beetechgroup/beetask/interfaceadapters/controllers/TaskController.java index 32b3a62..e9e6ed2 100644 --- a/backend/src/main/java/net/beetechgroup/beetask/interfaceadapters/controllers/TaskController.java +++ b/backend/src/main/java/net/beetechgroup/beetask/interfaceadapters/controllers/TaskController.java @@ -3,7 +3,9 @@ package net.beetechgroup.beetask.interfaceadapters.controllers; import jakarta.inject.Inject; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import org.eclipse.microprofile.openapi.annotations.Operation; @@ -13,7 +15,9 @@ import net.beetechgroup.beetask.entities.Task; import net.beetechgroup.beetask.interfaceadapters.dtos.TaskDTOMapper; import net.beetechgroup.beetask.interfaceadapters.dtos.TaskRequestDTO; import net.beetechgroup.beetask.interfaceadapters.dtos.TaskResponseDTO; -import net.beetechgroup.beetask.usecase.createtask.CreateTaskUseCase; +import net.beetechgroup.beetask.usecase.task.create.CreateTaskUseCase; +import net.beetechgroup.beetask.usecase.task.start.StartTaskUseCase; +import net.beetechgroup.beetask.usecase.task.stop.StopTaskUseCase; @Path("/tasks") @Produces(MediaType.APPLICATION_JSON) @@ -24,11 +28,36 @@ public class TaskController { @Inject CreateTaskUseCase createTaskUseCase; + @Inject + StartTaskUseCase startTaskUseCase; + + @Inject + StopTaskUseCase stopTaskUseCase; + @POST @Operation(summary = "Create a new task", description = "Creates a new task in the system") @APIResponse(responseCode = "201", description = "Task created successfully") public TaskResponseDTO createTask(TaskRequestDTO request) { - Task task = createTaskUseCase.execute(TaskDTOMapper.toInput(request)); - return TaskDTOMapper.toResponse(task); + Task task = createTaskUseCase.execute(TaskDTOMapper.toCreateTaskInput(request)); + return TaskDTOMapper.toTaskResponseDTO(task); } + + @PUT + @Path("/{id}/start") + @Operation(summary = "Start a task", description = "Starts a task in the system") + @APIResponse(responseCode = "200", description = "Task started successfully") + public TaskResponseDTO startTask(@PathParam("id") Long id) { + Task task = startTaskUseCase.execute(TaskDTOMapper.toStartTaskInput(id)); + return TaskDTOMapper.toTaskResponseDTO(task); + } + + @PUT + @Path("/{id}/stop") + @Operation(summary = "Stop a task", description = "Stops a task in the system") + @APIResponse(responseCode = "200", description = "Task stopped successfully") + public TaskResponseDTO stopTask(@PathParam("id") Long id) { + Task task = stopTaskUseCase.execute(TaskDTOMapper.toStopTaskInput(id)); + return TaskDTOMapper.toTaskResponseDTO(task); + } + } diff --git a/backend/src/main/java/net/beetechgroup/beetask/interfaceadapters/dtos/TaskDTOMapper.java b/backend/src/main/java/net/beetechgroup/beetask/interfaceadapters/dtos/TaskDTOMapper.java index 78f3c6b..a7f2da3 100644 --- a/backend/src/main/java/net/beetechgroup/beetask/interfaceadapters/dtos/TaskDTOMapper.java +++ b/backend/src/main/java/net/beetechgroup/beetask/interfaceadapters/dtos/TaskDTOMapper.java @@ -1,28 +1,37 @@ package net.beetechgroup.beetask.interfaceadapters.dtos; import net.beetechgroup.beetask.entities.Task; -import net.beetechgroup.beetask.usecase.createtask.CreateTaskInput; +import net.beetechgroup.beetask.usecase.task.create.CreateTaskInput; +import net.beetechgroup.beetask.usecase.task.start.StartTaskInput; +import net.beetechgroup.beetask.usecase.task.stop.StopTaskInput; public class TaskDTOMapper { - public static CreateTaskInput toInput(TaskRequestDTO request) { + public static CreateTaskInput toCreateTaskInput(TaskRequestDTO request) { return new CreateTaskInput( request.title(), request.description(), request.status(), - request.project(), - request.activities() + request.project() ); } - public static TaskResponseDTO toResponse(Task task) { + public static TaskResponseDTO toTaskResponseDTO(Task task) { return new TaskResponseDTO( task.getId(), task.getTitle(), task.getDescription(), task.getStatus(), task.getProject(), - task.getActivities() + task.getHistory() ); } + + public static StartTaskInput toStartTaskInput(Long id) { + return new StartTaskInput(id); + } + + public static StopTaskInput toStopTaskInput(Long id) { + return new StopTaskInput(id); + } } diff --git a/backend/src/main/java/net/beetechgroup/beetask/interfaceadapters/dtos/TaskRequestDTO.java b/backend/src/main/java/net/beetechgroup/beetask/interfaceadapters/dtos/TaskRequestDTO.java index ffde8f7..e181cd1 100644 --- a/backend/src/main/java/net/beetechgroup/beetask/interfaceadapters/dtos/TaskRequestDTO.java +++ b/backend/src/main/java/net/beetechgroup/beetask/interfaceadapters/dtos/TaskRequestDTO.java @@ -1,11 +1,11 @@ package net.beetechgroup.beetask.interfaceadapters.dtos; -import java.util.List; +import net.beetechgroup.beetask.entities.TaskStatus; public record TaskRequestDTO( + Long id, String title, String description, - String status, - String project, - List activities) { + TaskStatus status, + String project) { } diff --git a/backend/src/main/java/net/beetechgroup/beetask/interfaceadapters/dtos/TaskResponseDTO.java b/backend/src/main/java/net/beetechgroup/beetask/interfaceadapters/dtos/TaskResponseDTO.java index 9634186..e691779 100644 --- a/backend/src/main/java/net/beetechgroup/beetask/interfaceadapters/dtos/TaskResponseDTO.java +++ b/backend/src/main/java/net/beetechgroup/beetask/interfaceadapters/dtos/TaskResponseDTO.java @@ -2,11 +2,14 @@ package net.beetechgroup.beetask.interfaceadapters.dtos; import java.util.List; +import net.beetechgroup.beetask.entities.TaskHistoryItem; +import net.beetechgroup.beetask.entities.TaskStatus; + public record TaskResponseDTO( - Long id, - String title, - String description, - String status, - String project, - List activities) { + Long id, + String title, + String description, + TaskStatus status, + String project, + List history) { } diff --git a/backend/src/main/java/net/beetechgroup/beetask/usecase/createtask/CreateTaskInput.java b/backend/src/main/java/net/beetechgroup/beetask/usecase/createtask/CreateTaskInput.java deleted file mode 100644 index 501fdb4..0000000 --- a/backend/src/main/java/net/beetechgroup/beetask/usecase/createtask/CreateTaskInput.java +++ /dev/null @@ -1,11 +0,0 @@ -package net.beetechgroup.beetask.usecase.createtask; - -import java.util.List; - -public record CreateTaskInput( - String title, - String description, - String status, - String project, - List activities) { -} diff --git a/backend/src/main/java/net/beetechgroup/beetask/usecase/createtask/CreateTaskOutput.java b/backend/src/main/java/net/beetechgroup/beetask/usecase/createtask/CreateTaskOutput.java deleted file mode 100644 index 1ac98af..0000000 --- a/backend/src/main/java/net/beetechgroup/beetask/usecase/createtask/CreateTaskOutput.java +++ /dev/null @@ -1,5 +0,0 @@ -package net.beetechgroup.beetask.usecase.createtask; - -public class CreateTaskOutput { - -} \ No newline at end of file diff --git a/backend/src/main/java/net/beetechgroup/beetask/usecase/exceptions/TaskNotFoundException.java b/backend/src/main/java/net/beetechgroup/beetask/usecase/exceptions/TaskNotFoundException.java new file mode 100644 index 0000000..1fb07c9 --- /dev/null +++ b/backend/src/main/java/net/beetechgroup/beetask/usecase/exceptions/TaskNotFoundException.java @@ -0,0 +1,7 @@ +package net.beetechgroup.beetask.usecase.exceptions; + +public class TaskNotFoundException extends RuntimeException { + public TaskNotFoundException(String message) { + super(message); + } +} diff --git a/backend/src/main/java/net/beetechgroup/beetask/usecase/repository/TaskRepository.java b/backend/src/main/java/net/beetechgroup/beetask/usecase/repository/TaskRepository.java index e1f58b2..e8c7168 100644 --- a/backend/src/main/java/net/beetechgroup/beetask/usecase/repository/TaskRepository.java +++ b/backend/src/main/java/net/beetechgroup/beetask/usecase/repository/TaskRepository.java @@ -4,4 +4,5 @@ import net.beetechgroup.beetask.entities.Task; public interface TaskRepository { Task save(Task task); + Task findById(Long id); } \ No newline at end of file diff --git a/backend/src/main/java/net/beetechgroup/beetask/usecase/task/create/CreateTaskInput.java b/backend/src/main/java/net/beetechgroup/beetask/usecase/task/create/CreateTaskInput.java new file mode 100644 index 0000000..e908e58 --- /dev/null +++ b/backend/src/main/java/net/beetechgroup/beetask/usecase/task/create/CreateTaskInput.java @@ -0,0 +1,10 @@ +package net.beetechgroup.beetask.usecase.task.create; + +import net.beetechgroup.beetask.entities.TaskStatus; + +public record CreateTaskInput( + String title, + String description, + TaskStatus status, + String project) { +} diff --git a/backend/src/main/java/net/beetechgroup/beetask/usecase/task/create/CreateTaskOutput.java b/backend/src/main/java/net/beetechgroup/beetask/usecase/task/create/CreateTaskOutput.java new file mode 100644 index 0000000..92611f5 --- /dev/null +++ b/backend/src/main/java/net/beetechgroup/beetask/usecase/task/create/CreateTaskOutput.java @@ -0,0 +1,5 @@ +package net.beetechgroup.beetask.usecase.task.create; + +public class CreateTaskOutput { + +} \ No newline at end of file diff --git a/backend/src/main/java/net/beetechgroup/beetask/usecase/createtask/CreateTaskUseCase.java b/backend/src/main/java/net/beetechgroup/beetask/usecase/task/create/CreateTaskUseCase.java similarity index 85% rename from backend/src/main/java/net/beetechgroup/beetask/usecase/createtask/CreateTaskUseCase.java rename to backend/src/main/java/net/beetechgroup/beetask/usecase/task/create/CreateTaskUseCase.java index 59e1eb3..93153bb 100644 --- a/backend/src/main/java/net/beetechgroup/beetask/usecase/createtask/CreateTaskUseCase.java +++ b/backend/src/main/java/net/beetechgroup/beetask/usecase/task/create/CreateTaskUseCase.java @@ -1,4 +1,4 @@ -package net.beetechgroup.beetask.usecase.createtask; +package net.beetechgroup.beetask.usecase.task.create; import net.beetechgroup.beetask.entities.Task; import net.beetechgroup.beetask.usecase.repository.TaskRepository; @@ -16,7 +16,6 @@ public class CreateTaskUseCase { task.setDescription(input.description()); task.setStatus(input.status()); task.setProject(input.project()); - task.setActivities(input.activities()); return taskRepository.save(task); } } diff --git a/backend/src/main/java/net/beetechgroup/beetask/usecase/task/start/StartTaskInput.java b/backend/src/main/java/net/beetechgroup/beetask/usecase/task/start/StartTaskInput.java new file mode 100644 index 0000000..71fbbe4 --- /dev/null +++ b/backend/src/main/java/net/beetechgroup/beetask/usecase/task/start/StartTaskInput.java @@ -0,0 +1,4 @@ +package net.beetechgroup.beetask.usecase.task.start; + +public record StartTaskInput(Long id) { +} \ No newline at end of file diff --git a/backend/src/main/java/net/beetechgroup/beetask/usecase/task/start/StartTaskUseCase.java b/backend/src/main/java/net/beetechgroup/beetask/usecase/task/start/StartTaskUseCase.java new file mode 100644 index 0000000..3d2ffae --- /dev/null +++ b/backend/src/main/java/net/beetechgroup/beetask/usecase/task/start/StartTaskUseCase.java @@ -0,0 +1,19 @@ +package net.beetechgroup.beetask.usecase.task.start; + +import net.beetechgroup.beetask.entities.Task; +import net.beetechgroup.beetask.usecase.repository.TaskRepository; + +public class StartTaskUseCase { + + private final TaskRepository taskRepository; + + public StartTaskUseCase(TaskRepository taskRepository) { + this.taskRepository = taskRepository; + } + + public Task execute(StartTaskInput input) { + Task task = taskRepository.findById(input.id()); + task.start(); + return taskRepository.save(task); + } +} diff --git a/backend/src/main/java/net/beetechgroup/beetask/usecase/task/stop/StopTaskInput.java b/backend/src/main/java/net/beetechgroup/beetask/usecase/task/stop/StopTaskInput.java new file mode 100644 index 0000000..95fe40a --- /dev/null +++ b/backend/src/main/java/net/beetechgroup/beetask/usecase/task/stop/StopTaskInput.java @@ -0,0 +1,4 @@ +package net.beetechgroup.beetask.usecase.task.stop; + +public record StopTaskInput(Long id) { +} diff --git a/backend/src/main/java/net/beetechgroup/beetask/usecase/task/stop/StopTaskUseCase.java b/backend/src/main/java/net/beetechgroup/beetask/usecase/task/stop/StopTaskUseCase.java new file mode 100644 index 0000000..6bc2b8d --- /dev/null +++ b/backend/src/main/java/net/beetechgroup/beetask/usecase/task/stop/StopTaskUseCase.java @@ -0,0 +1,19 @@ +package net.beetechgroup.beetask.usecase.task.stop; + +import net.beetechgroup.beetask.entities.Task; +import net.beetechgroup.beetask.usecase.repository.TaskRepository; + +public class StopTaskUseCase { + + private final TaskRepository taskRepository; + + public StopTaskUseCase(TaskRepository taskRepository) { + this.taskRepository = taskRepository; + } + + public Task execute(StopTaskInput input) { + Task task = taskRepository.findById(input.id()); + task.stop(); + return taskRepository.save(task); + } +}