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
@@ -0,0 +1,7 @@
package com.finboostplus.DTO;

import java.math.BigDecimal;

public record UserMonthlyExpensesDTO(String month,
BigDecimal total) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.finboostplus.DTO.UserCreateDTO;
import com.finboostplus.DTO.UserDataDTO;
import com.finboostplus.DTO.UserExpensesDTO;
import com.finboostplus.DTO.UserMonthlyExpensesDTO;
import com.finboostplus.DTO.UserUpdateDTO;
import com.finboostplus.config.TokenRevocationUtil;
import com.finboostplus.service.ExpenseService;
Expand Down Expand Up @@ -107,6 +108,12 @@ public ResponseEntity<Page<UserExpensesDTO>> getAllUserExpenses(
return ResponseEntity.ok(expenses);
}

@GetMapping("/me/monthly-expenses")
public ResponseEntity<List<UserMonthlyExpensesDTO>> getUserMonthlyExpenses() {
List<UserMonthlyExpensesDTO> expenses = userService.getUserMonthlyExpenses();
return ResponseEntity.ok(expenses);
}

@GetMapping("/me/classify-spending-by-category")
public ResponseEntity<List<CategoryRegisterDTO>> getCategoryRegister() {
List<CategoryRegisterDTO> category = expenseService.getCategoryRegister();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

import com.finboostplus.DTO.CategoryRegisterDTO;
import com.finboostplus.DTO.UserExpensesDTO;
import com.finboostplus.DTO.UserMonthlyExpensesDTO;
import com.finboostplus.model.Expense;
import com.finboostplus.projection.GroupAuthorityExpenseProjection;
import com.finboostplus.projection.GroupMemberExpenseProjection;
Expand Down Expand Up @@ -43,6 +44,39 @@ public interface ExpenseRepository extends JpaRepository<Expense, Long> {
""")
Page<UserExpensesDTO> getAllUserExpenses(Long userId, Pageable pageable);

@Query(nativeQuery = true, value = """
WITH
MESES AS (
SELECT
GENERATE_SERIES(1, 12) AS MES_NUM
)
SELECT
TO_CHAR(TO_DATE(M.MES_NUM::TEXT, 'MM'), 'FMMonth') AS MONTH,
COALESCE(SUM(UED.PARTIAL_VALUE), 0) AS TOTAL
FROM
MESES M
LEFT JOIN EXPENSES E ON EXTRACT(
MONTH
FROM
E.DEADLINE_DATE
) = M.MES_NUM
AND EXTRACT(
YEAR
FROM
E.DEADLINE_DATE
) = EXTRACT(
YEAR
FROM
CURRENT_DATE
)
LEFT JOIN USER_EXPENSE_DIVISIONS UED ON E.ID = UED.EXPENSE_ID
AND UED.USER_ID = 1
GROUP BY
M.MES_NUM
ORDER BY
M.MES_NUM
""")
List<UserMonthlyExpensesDTO> getUserMonthlyExpenses(Long userId);
// @Query(nativeQuery = true, value = """
// SELECT expenses.id, expenses.title, expenses.description,
// categories.name as categoryName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.finboostplus.DTO.UserCreateDTO;
import com.finboostplus.DTO.UserDataDTO;
import com.finboostplus.DTO.UserExpensesDTO;
import com.finboostplus.DTO.UserMonthlyExpensesDTO;
import com.finboostplus.DTO.UserUpdateDTO;
import com.finboostplus.exception.ForbiddenResourceException;
import com.finboostplus.exception.GroupNotFoundException;
Expand Down Expand Up @@ -106,6 +107,12 @@ public Page<UserExpensesDTO> getAllUserExpenses(Pageable pageable) {
return expenseRepository.getAllUserExpenses(user.getId(), pageable);
}

public List<UserMonthlyExpensesDTO> getUserMonthlyExpenses() {
User user = userRepository.findByEmailIgnoreCase(authenticated())
.orElseThrow(() -> new UsernameNotFoundException("Usuário não encontrado"));
return expenseRepository.getUserMonthlyExpenses(user.getId());
}

@Transactional
public boolean saveUser(UserCreateDTO dto) {
Optional<User> userOptional = userRepository.findByEmailIgnoreCase(dto.email());
Expand Down Expand Up @@ -259,7 +266,7 @@ public boolean switchAuthority(Long newOwnerId, Long groupId, SwitchAuthorityReq
return true;
}
if (!groupMemberRepository.doesUserHasAnyAuthority(user.getId(),
group.getId(), List.of("OWNER" ,"ADMIN")))
group.getId(), List.of("OWNER", "ADMIN")))
throw new ForbiddenResourceException("Acesso negado");
newUserAuth.setAuthorization(setAuthority);
groupMemberRepository.save(newUserAuth);
Expand Down
Loading