listagem apenas das minhas tasks

This commit is contained in:
Gabriel Santana de Menezes 2026-05-07 09:01:11 -04:00
parent b7803fef05
commit 6800688284
8 changed files with 51 additions and 4 deletions

View file

@ -7,6 +7,7 @@ import net.beetechgroup.beetask.usecase.repository.TaskRepository;
import net.beetechgroup.beetask.usecase.repository.UserRepository;
import net.beetechgroup.beetask.usecase.task.create.CreateTaskUseCase;
import net.beetechgroup.beetask.usecase.task.listall.ListAllTasksUseCase;
import net.beetechgroup.beetask.usecase.task.listall.ListMyTasksUseCase;
import net.beetechgroup.beetask.usecase.task.start.StartTaskUseCase;
import net.beetechgroup.beetask.usecase.task.stop.StopTaskUseCase;
import net.beetechgroup.beetask.usecase.task.update.UpdateTaskStatusUseCase;
@ -36,6 +37,11 @@ public class TaskUseCaseConfig {
return new ListAllTasksUseCase(taskRepository);
}
@Produces
public ListMyTasksUseCase listMyTasksUseCase(TaskRepository taskRepository) {
return new ListMyTasksUseCase(taskRepository);
}
@Produces
public UpdateTaskStatusUseCase updateTaskStatusUseCase(TaskRepository taskRepository) {
return new UpdateTaskStatusUseCase(taskRepository);

View file

@ -53,4 +53,9 @@ public class TaskRepositoryImpl implements TaskRepository, PanacheRepository<Tas
"and t.finishedAt >= ?2 and t.finishedAt <= ?3",
email, start, end).list().stream().map(TaskEntityMapper::toDomain).toList();
}
@Override
public List<Task> findTasksByUser(String email) {
return find("user.email = ?1", email).list().stream().map(TaskEntityMapper::toDomain).toList();
}
}

View file

@ -24,6 +24,7 @@ import net.beetechgroup.beetask.usecase.task.create.CreateTaskInput;
import net.beetechgroup.beetask.usecase.task.create.CreateTaskOutput;
import net.beetechgroup.beetask.usecase.task.create.CreateTaskUseCase;
import net.beetechgroup.beetask.usecase.task.listall.ListAllTasksUseCase;
import net.beetechgroup.beetask.usecase.task.listall.ListMyTasksUseCase;
import net.beetechgroup.beetask.usecase.task.start.StartTaskUseCase;
import net.beetechgroup.beetask.usecase.task.stop.StopTaskUseCase;
import net.beetechgroup.beetask.usecase.task.update.UpdateTaskStatusUseCase;
@ -48,6 +49,9 @@ public class TaskController {
@Inject
ListAllTasksUseCase listAllTasksUseCase;
@Inject
ListMyTasksUseCase listMyTasksUseCase;
@Inject
UpdateTaskStatusUseCase updateTaskStatusUseCase;
@ -123,4 +127,13 @@ public class TaskController {
return listAllTasksUseCase.execute().stream().map(TaskControllerMapper::toCreateTaskResponse).toList();
}
@GET
@Path("/mine")
@Operation(summary = "List my tasks", description = "Lists all tasks belonging to the authenticated user")
@APIResponse(responseCode = "200", description = "Tasks listed successfully")
public List<CreateTaskResponse> listMyTasks() {
String email = securityIdentity.getPrincipal().getName();
return listMyTasksUseCase.execute(email).stream().map(TaskControllerMapper::toCreateTaskResponse).toList();
}
}

View file

@ -11,4 +11,5 @@ public interface TaskRepository {
List<Task> findAllTasks();
List<Task> findTasksWorkedByUserInPeriod(String email, LocalDateTime start, LocalDateTime end);
List<Task> findTasksFinishedByUserInPeriod(String email, LocalDateTime start, LocalDateTime end);
List<Task> findTasksByUser(String email);
}

View file

@ -0,0 +1,20 @@
package net.beetechgroup.beetask.usecase.task.listall;
import net.beetechgroup.beetask.usecase.repository.TaskRepository;
import net.beetechgroup.beetask.usecase.task.create.CreateTaskMapper;
import net.beetechgroup.beetask.usecase.task.create.CreateTaskOutput;
import java.util.List;
public class ListMyTasksUseCase {
private final TaskRepository taskRepository;
public ListMyTasksUseCase(TaskRepository taskRepository) {
this.taskRepository = taskRepository;
}
public List<CreateTaskOutput> execute(String email) {
return taskRepository.findTasksByUser(email).stream().map(CreateTaskMapper::toCreateTaskOutput).toList();
}
}

View file

@ -1,6 +1,5 @@
import { DragDropContext, Draggable, Droppable } from '@hello-pangea/dnd'
import type { DropResult } from '@hello-pangea/dnd'
import { motion } from 'framer-motion'
import {
AlertCircle,
CheckCircle2,
@ -55,7 +54,7 @@ export function TaskBoardPage() {
const loadTasks = async (silent = false) => {
if (!silent) setIsLoading(true)
try {
const response = await taskService.getTasks()
const response = await taskService.getMyTasks()
setTasks(response)
} catch (error) {
console.error('Failed to load tasks', error)

View file

@ -5,7 +5,6 @@ import {
CheckCircle2,
Clock,
Filter,
Layers,
Plus,
RefreshCw,
Search,
@ -64,7 +63,7 @@ export function TaskListPage() {
setErrorMessage(null)
try {
const response = await taskService.getTasks()
const response = await taskService.getMyTasks()
setTasks(response)
} catch (error) {
setErrorMessage(

View file

@ -6,6 +6,10 @@ export const taskService = {
return apiFetch<TaskResponse[]>('/tasks')
},
async getMyTasks(): Promise<TaskResponse[]> {
return apiFetch<TaskResponse[]>('/tasks/mine')
},
async createTask(task: { title: string; description?: string; projectId?: number | null; status?: TaskStatus }): Promise<TaskResponse> {
return apiFetch<TaskResponse>('/tasks', {
method: 'POST',