Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ public ResponseEntity<Page<GroupMemberExpenseProjection>> 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<GroupMemberExpenseProjection> expenses = expenseService.getAllGroupExpenses(
groupId, status, allMemberExpenses, allGroupMembersExpenses, pageable);
return ResponseEntity.ok(expenses);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.finboostplus.enums;

public enum Status {
PAID,
UNPAID,
PENDING
NOTAPPLY,
PAID,
UNPAID,
PENDING
}
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ public interface ExpenseRepository extends JpaRepository<Expense, Long> {
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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -153,7 +153,7 @@ Page<GroupMemberExpenseProjection> 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
Expand Down Expand Up @@ -198,7 +198,7 @@ Page<GroupAuthorityExpenseProjection> 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,26 @@
@Repository
public interface GroupRepository extends JpaRepository<Group, Long> {
@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<GroupProjection> listUserGroupsPaged(Long memberId, Pageable pageable);

@Modifying
Expand All @@ -40,10 +51,15 @@ public interface GroupRepository extends JpaRepository<Group, Long> {
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -162,7 +156,8 @@ public UserExpenseDivisionDTO getExpenseInfoDetails(Long groupId, Long expenseId
List<UserExpenseDivisionProjection> 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<UserExpenseDivisionProjection> getExpenseDivisionDetails(Long groupId, Long expenseId) {
Expand All @@ -177,23 +172,27 @@ private List<UserExpenseDivisionProjection> getExpenseDivisionDetails(Long group
// }

@Transactional(readOnly = true)
public <T extends GroupExpenseProjection> Page<T> getAllGroupExpenses(Long groupId, Status status, boolean allMemberExpenses,
public <T extends GroupExpenseProjection> Page<T> 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<T>) expenseRepository.getAllGroupExpensesOfAllMembers(user.getId(), groupId, pageable);
if (status == Status.NOTAPPLY) {
return (Page<T>) expenseRepository.getAllGroupExpensesOfAllMembers(user.getId(),
groupId, pageable);
}
return (Page<T>) expenseRepository.getAllGroupExpensesOfAllMembersFiltered(user.getId(), groupId,
return (Page<T>) expenseRepository.getAllGroupExpensesOfAllMembersFiltered(user.getId(),
groupId,
status.name(), pageable);
}
if (allMemberExpenses == true && status == null) {
if (allMemberExpenses == true && status == Status.NOTAPPLY) {
return (Page<T>) expenseRepository.getAllGroupExpenses(user.getId(), groupId, pageable);
}
return (Page<T>) expenseRepository.getAllGroupExpensesFiltered(user.getId(), groupId,
Expand Down
Loading