From 24291435967bf176e7ba48d13fd82a3cf8024b12 Mon Sep 17 00:00:00 2001 From: Jetulio Date: Wed, 5 Nov 2025 18:04:04 -0300 Subject: [PATCH] fix: ajuste nos end points de grupo e retorno de status --- .../controller/ExpenseController.java | 3 ++ .../java/com/finboostplus/enums/Status.java | 7 ++-- .../repository/ExpenseRepository.java | 8 ++-- .../repository/GroupRepository.java | 42 +++++++++++++------ .../finboostplus/service/ExpenseService.java | 27 ++++++------ 5 files changed, 53 insertions(+), 34 deletions(-) diff --git a/backend/finboostplus_server/src/main/java/com/finboostplus/controller/ExpenseController.java b/backend/finboostplus_server/src/main/java/com/finboostplus/controller/ExpenseController.java index 2e0ed8b..a61a90d 100644 --- a/backend/finboostplus_server/src/main/java/com/finboostplus/controller/ExpenseController.java +++ b/backend/finboostplus_server/src/main/java/com/finboostplus/controller/ExpenseController.java @@ -66,6 +66,9 @@ public ResponseEntity> getAllGroupExpenses( @RequestParam(name = "page", defaultValue = "0") Integer page, @RequestParam(name = "size", defaultValue = "4") Integer size) { Pageable pageable = PageRequest.of(page, size); + if (status == null) { + status = Status.NOTAPPLY; + } Page expenses = expenseService.getAllGroupExpenses( groupId, status, allMemberExpenses, allGroupMembersExpenses, pageable); return ResponseEntity.ok(expenses); diff --git a/backend/finboostplus_server/src/main/java/com/finboostplus/enums/Status.java b/backend/finboostplus_server/src/main/java/com/finboostplus/enums/Status.java index cc03b39..868a6d4 100644 --- a/backend/finboostplus_server/src/main/java/com/finboostplus/enums/Status.java +++ b/backend/finboostplus_server/src/main/java/com/finboostplus/enums/Status.java @@ -1,7 +1,8 @@ package com.finboostplus.enums; public enum Status { - PAID, - UNPAID, - PENDING + NOTAPPLY, + PAID, + UNPAID, + PENDING } diff --git a/backend/finboostplus_server/src/main/java/com/finboostplus/repository/ExpenseRepository.java b/backend/finboostplus_server/src/main/java/com/finboostplus/repository/ExpenseRepository.java index 21de475..48d3d2c 100644 --- a/backend/finboostplus_server/src/main/java/com/finboostplus/repository/ExpenseRepository.java +++ b/backend/finboostplus_server/src/main/java/com/finboostplus/repository/ExpenseRepository.java @@ -85,7 +85,7 @@ public interface ExpenseRepository extends JpaRepository { UED.PARTIAL_VALUE AS PARTIAL_VALUE, C.ID AS CATEGORY_ID, C.Name AS CATEGORY_NAME, - UED.STATUS AS STATUS, + E.STATUS AS STATUS, E.DEADLINE_DATE AS DEADLINE_DATE, G.ICON FROM @@ -116,7 +116,7 @@ WHEN E.DEADLINE_DATE > NOW() THEN 3 UED.PARTIAL_VALUE AS PARTIAL_VALUE, C.ID AS CATEGORY_ID, C.Name AS CATEGORY_NAME, - UED.STATUS AS STATUS, + E.STATUS AS STATUS, E.DEADLINE_DATE AS DEADLINE_DATE, G.ICON FROM @@ -153,7 +153,7 @@ Page getAllGroupExpensesFiltered(Long memberId, Lo COALESCE(E.VALUE, 0) - COALESCE(UED_PAID.TOTAL_PAID, 0) AS REMAINING_VALUE, E.DEADLINE_DATE AS DEADLINE_DATE, G.ICON, - UED_USER.STATUS AS STATUS + E.STATUS AS STATUS FROM EXPENSES E INNER JOIN GROUPS G ON G.ID = E.GROUP_ID INNER JOIN CATEGORIES C ON C.ID = E.CATEGORY_ID @@ -198,7 +198,7 @@ Page getAllGroupExpensesOfAllMembers(Long userI COALESCE(E.VALUE, 0) - COALESCE(UED_PAID.TOTAL_PAID, 0) AS REMAINING_VALUE, E.DEADLINE_DATE AS DEADLINE_DATE, G.ICON, - UED_USER.STATUS AS STATUS + E.STATUS AS STATUS FROM EXPENSES E INNER JOIN GROUPS G ON G.ID = E.GROUP_ID INNER JOIN CATEGORIES C ON C.ID = E.CATEGORY_ID diff --git a/backend/finboostplus_server/src/main/java/com/finboostplus/repository/GroupRepository.java b/backend/finboostplus_server/src/main/java/com/finboostplus/repository/GroupRepository.java index 4fee32b..97f1ac3 100644 --- a/backend/finboostplus_server/src/main/java/com/finboostplus/repository/GroupRepository.java +++ b/backend/finboostplus_server/src/main/java/com/finboostplus/repository/GroupRepository.java @@ -15,15 +15,26 @@ @Repository public interface GroupRepository extends JpaRepository { @Query(nativeQuery = true, value = """ - SELECT groups.id,groups.name,groups.description,group_members.auth_level as authority, groups.icon, groups.created_at, - COALESCE(SUM(expenses.value), 0) AS totalExpenses - FROM group_members - INNER JOIN groups ON group_members.group_id = groups.id - INNER JOIN users ON group_members.user_id = users.id - LEFT JOIN expenses ON expenses.group_id = groups.id - WHERE users.id =:memberId - GROUP BY groups.id, auth_level - """) + SELECT + GROUP_MEMBERS.USER_ID, + GROUPS.ID, + GROUPS.NAME, + GROUPS.DESCRIPTION, + GROUP_MEMBERS.AUTH_LEVEL AS AUTHORITY, + GROUPS.ICON, + GROUPS.CREATED_AT, + COALESCE(SUM(EXPENSES.VALUE), 0) AS TOTAL_EXPENSES + FROM + GROUP_MEMBERS + INNER JOIN GROUPS ON GROUP_MEMBERS.GROUP_ID = GROUPS.ID + INNER JOIN EXPENSES ON EXPENSES.GROUP_ID = GROUPS.ID + WHERE + GROUP_MEMBERS.USER_ID = :memberId + GROUP BY + GROUPS.ID, + GROUP_MEMBERS.USER_ID, + AUTH_LEVEL + """) Page listUserGroupsPaged(Long memberId, Pageable pageable); @Modifying @@ -40,10 +51,15 @@ public interface GroupRepository extends JpaRepository { G.DESCRIPTION, G.ICON, GM.AUTH_LEVEL AS AUTHORIZATION, - (SELECT COALESCE(SUM (E.VALUE), 0) - FROM EXPENSES E - INNER JOIN USER_EXPENSE_DIVISIONS UED ON E.ID = UED.EXPENSE_ID - WHERE E.GROUP_ID = :groupId + ( + SELECT + COALESCE(SUM(UED.PARTIAL_VALUE), 0) + FROM + EXPENSES E + INNER JOIN USER_EXPENSE_DIVISIONS UED ON E.ID = UED.EXPENSE_ID + WHERE + E.GROUP_ID = :groupId + AND UED.USER_ID = :userId ) AS TOTAL FROM GROUPS AS G diff --git a/backend/finboostplus_server/src/main/java/com/finboostplus/service/ExpenseService.java b/backend/finboostplus_server/src/main/java/com/finboostplus/service/ExpenseService.java index 84e4072..3325764 100644 --- a/backend/finboostplus_server/src/main/java/com/finboostplus/service/ExpenseService.java +++ b/backend/finboostplus_server/src/main/java/com/finboostplus/service/ExpenseService.java @@ -148,12 +148,6 @@ public boolean createNewExpense(ExpenseCreateDTO expenseDTO, Long groupId) { public UserExpenseDivisionDTO getExpenseInfoDetails(Long groupId, Long expenseId) { User user = userRepository.findByEmailIgnoreCase(userService.authenticated()) .orElseThrow(() -> new UserNotFoundException("Usuário não encontrado")); - boolean hasAuthority = groupMemberRepository - .doesUserHasAnyAuthority(user.getId(), groupId, AUTHLEVELS); - if (!hasAuthority) { - throw new ForbiddenResourceException( - "Acesso negado"); - } Group group = groupRepository.findById(groupId) .orElseThrow(() -> new GroupNotFoundException("Grupo não encontrado")); Expense expense = expenseRepository.findById(expenseId).orElseThrow( @@ -162,7 +156,8 @@ public UserExpenseDivisionDTO getExpenseInfoDetails(Long groupId, Long expenseId List memberList = getExpenseDivisionDetails(group.getId(), expenseId); return new UserExpenseDivisionDTO(expense.getId(), expense.getTitle(), expense.getDescription(), groupId, group.getName(), expense.getStatus(), - expense.getValue(), category.getId(), category.getName(), expense.getCreatedAt(), memberList); + expense.getValue(), category.getId(), category.getName(), expense.getCreatedAt(), + memberList); } private List getExpenseDivisionDetails(Long groupId, Long expenseId) { @@ -177,23 +172,27 @@ private List getExpenseDivisionDetails(Long group // } @Transactional(readOnly = true) - public Page getAllGroupExpenses(Long groupId, Status status, boolean allMemberExpenses, + public Page getAllGroupExpenses(Long groupId, Status status, + boolean allMemberExpenses, boolean allGroupMembersExpenses, Pageable pageable) { User user = userRepository.findByEmailIgnoreCase(userService.authenticated()) .orElseThrow(() -> new UserNotFoundException("Usuário não encontrado")); if (!groupMemberRepository.isUserMemberOfGroup(user.getId(), groupId)) { throw new ForbiddenResourceException("Acesso negado"); } - if (allGroupMembersExpenses == true) { + boolean hasAuthority = groupMemberRepository + .doesUserHasAnyAuthority(user.getId(), groupId, AUTHLEVELS); + if (allGroupMembersExpenses == true && hasAuthority) { allMemberExpenses = false; - if (groupMemberRepository.doesUserHasAnyAuthority(user.getId(), groupId, AUTHLEVELS) - && status == null) { - return (Page) expenseRepository.getAllGroupExpensesOfAllMembers(user.getId(), groupId, pageable); + if (status == Status.NOTAPPLY) { + return (Page) expenseRepository.getAllGroupExpensesOfAllMembers(user.getId(), + groupId, pageable); } - return (Page) expenseRepository.getAllGroupExpensesOfAllMembersFiltered(user.getId(), groupId, + return (Page) expenseRepository.getAllGroupExpensesOfAllMembersFiltered(user.getId(), + groupId, status.name(), pageable); } - if (allMemberExpenses == true && status == null) { + if (allMemberExpenses == true && status == Status.NOTAPPLY) { return (Page) expenseRepository.getAllGroupExpenses(user.getId(), groupId, pageable); } return (Page) expenseRepository.getAllGroupExpensesFiltered(user.getId(), groupId,