diff --git a/src/main/java/com/faf223/expensetrackerfaf/config/ApplicationConfig.java b/src/main/java/com/faf223/expensetrackerfaf/config/ApplicationConfig.java index 57d1823..fd41b70 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/config/ApplicationConfig.java +++ b/src/main/java/com/faf223/expensetrackerfaf/config/ApplicationConfig.java @@ -1,8 +1,7 @@ package com.faf223.expensetrackerfaf.config; -import com.faf223.expensetrackerfaf.repository.CredentialRepository; -import com.faf223.expensetrackerfaf.repository.UserRepository; import com.faf223.expensetrackerfaf.security.PersonDetails; +import com.faf223.expensetrackerfaf.service.CredentialService; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -19,12 +18,11 @@ import org.springframework.security.crypto.password.PasswordEncoder; @RequiredArgsConstructor public class ApplicationConfig { - private final UserRepository userRepository; - private final CredentialRepository credentialRepository; + private final CredentialService credentialService; @Bean public UserDetailsService userDetailsService() { - return username -> new PersonDetails(credentialRepository.findByEmail(username).orElseThrow((() -> new UsernameNotFoundException("User not found")))); + return username -> new PersonDetails(credentialService.findByEmail(username).orElseThrow((() -> new UsernameNotFoundException("User not found")))); } @Bean diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java index ec91ea7..84da712 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java @@ -2,7 +2,6 @@ package com.faf223.expensetrackerfaf.controller; import com.faf223.expensetrackerfaf.dto.ExpenseCreationDTO; import com.faf223.expensetrackerfaf.dto.ExpenseDTO; -import com.faf223.expensetrackerfaf.dto.IncomeDTO; import com.faf223.expensetrackerfaf.dto.mappers.ExpenseMapper; import com.faf223.expensetrackerfaf.model.Expense; import com.faf223.expensetrackerfaf.model.ExpenseCategory; @@ -23,6 +22,7 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; @@ -97,8 +97,9 @@ public class ExpenseController { } @GetMapping("/personal-expenses") + @Transactional(readOnly = true) public ResponseEntity> getExpensesByUser(@RequestParam Optional date, - @RequestParam Optional month, + @RequestParam Optional month, @RequestParam Optional startYear, @RequestParam Optional endYear, @RequestParam Optional lastUnit) { @@ -113,7 +114,7 @@ public class ExpenseController { if(date.isPresent()) expenses = expenseService.getTransactionsByDate(date.get(), email).stream().map(expenseMapper::toDto).toList(); else if(month.isPresent()) - expenses = expenseService.getTransactionsByMonth(month.get(), email).stream().map(expenseMapper::toDto).toList(); + expenses = expenseService.getTransactionsByMonth(Month.of(month.get()), email).stream().map(expenseMapper::toDto).toList(); else if(startYear.isPresent() && endYear.isPresent()) expenses = expenseService.getYearIntervalTransactions(email, startYear.get(), endYear.get()).stream().map(expenseMapper::toDto).toList(); else if(lastUnit.isPresent()) { diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java index 0e2a888..c66a544 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java @@ -22,6 +22,7 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; @@ -96,8 +97,9 @@ public class IncomeController { } @GetMapping("/personal-incomes") - public ResponseEntity> getExpensesByUser(@RequestParam Optional date, - @RequestParam Optional month, + @Transactional(readOnly = true) + public ResponseEntity> getIncomesByUser(@RequestParam Optional date, + @RequestParam Optional month, @RequestParam Optional startYear, @RequestParam Optional endYear, @RequestParam Optional lastUnit) { @@ -112,7 +114,7 @@ public class IncomeController { if(date.isPresent()) incomes = incomeService.getTransactionsByDate(date.get(), email).stream().map(incomeMapper::toDto).toList(); else if(month.isPresent()) - incomes = incomeService.getTransactionsByMonth(month.get(), email).stream().map(incomeMapper::toDto).toList(); + incomes = incomeService.getTransactionsByMonth(Month.of(month.get()), email).stream().map(incomeMapper::toDto).toList(); else if(startYear.isPresent() && endYear.isPresent()) incomes = incomeService.getYearIntervalTransactions(email, startYear.get(), endYear.get()).stream().map(incomeMapper::toDto).toList(); else if(lastUnit.isPresent()) { diff --git a/src/main/java/com/faf223/expensetrackerfaf/repository/IncomeRepository.java b/src/main/java/com/faf223/expensetrackerfaf/repository/IncomeRepository.java index 013131d..d1cd7a2 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/repository/IncomeRepository.java +++ b/src/main/java/com/faf223/expensetrackerfaf/repository/IncomeRepository.java @@ -5,6 +5,7 @@ import com.faf223.expensetrackerfaf.model.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.query.Procedure; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.util.List; @@ -16,15 +17,19 @@ public interface IncomeRepository extends JpaRepository { List findByDateBetween(LocalDate start, LocalDate end); + @Transactional(readOnly = true) @Procedure(procedureName = "get_incomes_by_month") List filterByMonth(int month); + @Transactional(readOnly = true) @Procedure(procedureName = "get_last_week_incomes") List findLastWeek(); + @Transactional(readOnly = true) @Procedure(procedureName = "get_last_month_incomes") List findLastMonth(); + @Transactional(readOnly = true) @Procedure(procedureName = "get_incomes_by_year_interval") List filterByYearInterval(int start, int end); } diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/CredentialService.java b/src/main/java/com/faf223/expensetrackerfaf/service/CredentialService.java index cd68ab2..180f029 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/service/CredentialService.java +++ b/src/main/java/com/faf223/expensetrackerfaf/service/CredentialService.java @@ -5,14 +5,16 @@ import com.faf223.expensetrackerfaf.repository.CredentialRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.Optional; + @Service @RequiredArgsConstructor public class CredentialService { private final CredentialRepository credentialRepository; - public Credential findByEmail(String email) { - return credentialRepository.findByEmail(email).orElse(null); + public Optional findByEmail(String email) { + return credentialRepository.findByEmail(email); } } diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java b/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java index bc0a690..1ded82e 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java +++ b/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java @@ -12,6 +12,7 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.time.Month; diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java b/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java index d778ac8..5b56d4b 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java +++ b/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java @@ -56,15 +56,7 @@ public class IncomeService implements ITransactionService { @Override public List getTransactionsByDate(LocalDate date, String email) { - return getTransactionsByDate(date) - .stream() - .filter(transaction -> { - Optional credential = credentialRepository.findByEmail(email); - if(credential.isEmpty()) - throw new UserNotFoundException("The user has not been found"); - return credential.get().getUser().equals(transaction.getUser()); - }) - .toList(); + return (List) transactionFilter.filterByEmail(getTransactionsByDate(date), email); } @Override @@ -74,15 +66,7 @@ public class IncomeService implements ITransactionService { @Override public List getTransactionsByMonth(Month month, String email) { - return getTransactionsByMonth(month) - .stream() - .filter(transaction -> { - Optional credential = credentialRepository.findByEmail(email); - if(credential.isEmpty()) - throw new UserNotFoundException("The user has not been found"); - return credential.get().getUser().equals(transaction.getUser()); - }) - .toList(); + return (List) transactionFilter.filterByEmail(getTransactionsByMonth(month), email); } @Override diff --git a/src/main/java/com/faf223/expensetrackerfaf/util/TransactionFilter.java b/src/main/java/com/faf223/expensetrackerfaf/util/TransactionFilter.java index 3f27dd7..f6380b5 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/util/TransactionFilter.java +++ b/src/main/java/com/faf223/expensetrackerfaf/util/TransactionFilter.java @@ -8,6 +8,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import java.util.List; +import java.util.Optional; @Component @RequiredArgsConstructor @@ -19,10 +20,10 @@ public class TransactionFilter { return transactions .stream() .filter(transaction -> { - Credential credential = credentialService.findByEmail(email); - if(credential == null) + Optional credential = credentialService.findByEmail(email); + if(credential.isEmpty()) throw new UserNotFoundException("The user has not been found"); - return credential.getUser().equals(transaction.getUser()); + return credential.get().getUser().equals(transaction.getUser()); }) .toList(); }