Merge master
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
package com.faf223.expensetrackerfaf.service;
|
||||
|
||||
import com.faf223.expensetrackerfaf.model.Credential;
|
||||
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 Optional<Credential> findByEmail(String email) {
|
||||
return credentialRepository.findByEmail(email);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import com.faf223.expensetrackerfaf.model.*;
|
||||
import com.faf223.expensetrackerfaf.repository.CredentialRepository;
|
||||
import com.faf223.expensetrackerfaf.repository.ExpenseRepository;
|
||||
import com.faf223.expensetrackerfaf.repository.UserRepository;
|
||||
import com.faf223.expensetrackerfaf.util.TransactionFilter;
|
||||
import com.faf223.expensetrackerfaf.util.exceptions.UserNotAuthenticatedException;
|
||||
import com.faf223.expensetrackerfaf.util.exceptions.UserNotFoundException;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -11,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;
|
||||
@@ -25,6 +27,7 @@ public class ExpenseService implements ITransactionService {
|
||||
private final ExpenseRepository expenseRepository;
|
||||
private final CredentialRepository credentialRepository;
|
||||
private final UserRepository userRepository;
|
||||
private final TransactionFilter transactionFilter;
|
||||
|
||||
public void createOrUpdate(IMoneyTransaction expense) {
|
||||
expenseRepository.save((Expense) expense);
|
||||
@@ -47,37 +50,47 @@ public class ExpenseService implements ITransactionService {
|
||||
|
||||
@Override
|
||||
public List<Expense> getTransactionsByDate(LocalDate date, String email) {
|
||||
return getTransactionsByDate(date)
|
||||
.stream()
|
||||
.filter(transaction -> {
|
||||
Optional<Credential> 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<Expense>) transactionFilter.filterByEmail(getTransactionsByDate(date), email);
|
||||
}
|
||||
|
||||
// TODO: store transaction month in a separate field in the DB and change this logic
|
||||
@Override
|
||||
public List<Expense> getTransactionsByMonth(Month month) {
|
||||
LocalDate startOfMonth = LocalDate.of(LocalDate.now().getYear(), month, 1);
|
||||
LocalDate endOfMonth = startOfMonth.plusMonths(1).minusDays(1);
|
||||
|
||||
return expenseRepository.findByDateBetween(startOfMonth, endOfMonth);
|
||||
return expenseRepository.filterByMonth(month.getValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expense> getTransactionsByMonth(Month month, String email) {
|
||||
return getTransactionsByMonth(month)
|
||||
.stream()
|
||||
.filter(transaction -> {
|
||||
Optional<Credential> 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<Expense>) transactionFilter.filterByEmail(getTransactionsByMonth(month), email);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expense> getLastWeekTransactions() {
|
||||
return expenseRepository.findLastWeek();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expense> getLastWeekTransactions(String email) {
|
||||
return (List<Expense>) transactionFilter.filterByEmail(getLastWeekTransactions(), email);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expense> getLastMonthTransactions() {
|
||||
return expenseRepository.findLastMonth();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expense> getLastMonthTransactions(String email) {
|
||||
return (List<Expense>) transactionFilter.filterByEmail(getLastMonthTransactions(), email);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expense> getYearIntervalTransactions(int start, int end) {
|
||||
return expenseRepository.filterByYearInterval(start, end);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Expense> getYearIntervalTransactions(String email, int start, int end) {
|
||||
return (List<Expense>) transactionFilter.filterByEmail(getYearIntervalTransactions(start, end), email);
|
||||
}
|
||||
|
||||
public List<Expense> getTransactions() {
|
||||
@@ -113,4 +126,5 @@ public class ExpenseService implements ITransactionService {
|
||||
|
||||
throw new UserNotAuthenticatedException("You are not authenticated");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -17,6 +17,12 @@ public interface ITransactionService {
|
||||
List<? extends IMoneyTransaction> getTransactionsByDate(LocalDate date, String email);
|
||||
List<? extends IMoneyTransaction> getTransactionsByMonth(Month month);
|
||||
List<? extends IMoneyTransaction> getTransactionsByMonth(Month month, String email);
|
||||
List<? extends IMoneyTransaction> getLastWeekTransactions();
|
||||
List<? extends IMoneyTransaction> getLastWeekTransactions(String email);
|
||||
List<? extends IMoneyTransaction> getLastMonthTransactions();
|
||||
List<? extends IMoneyTransaction> getLastMonthTransactions(String email);
|
||||
List<? extends IMoneyTransaction> getYearIntervalTransactions(int start, int end);
|
||||
List<? extends IMoneyTransaction> getYearIntervalTransactions(String email, int start, int end);
|
||||
IMoneyTransaction getTransactionById(long id);
|
||||
void deleteTransactionById(long it);
|
||||
boolean belongsToUser(IMoneyTransaction transaction);
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.faf223.expensetrackerfaf.model.User;
|
||||
import com.faf223.expensetrackerfaf.repository.CredentialRepository;
|
||||
import com.faf223.expensetrackerfaf.repository.IncomeRepository;
|
||||
import com.faf223.expensetrackerfaf.repository.UserRepository;
|
||||
import com.faf223.expensetrackerfaf.util.TransactionFilter;
|
||||
import com.faf223.expensetrackerfaf.util.exceptions.UserNotAuthenticatedException;
|
||||
import com.faf223.expensetrackerfaf.util.exceptions.UserNotFoundException;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -28,6 +29,7 @@ public class IncomeService implements ITransactionService {
|
||||
private final IncomeRepository incomeRepository;
|
||||
private final CredentialRepository credentialRepository;
|
||||
private final UserRepository userRepository;
|
||||
private final TransactionFilter transactionFilter;
|
||||
|
||||
public void createOrUpdate(IMoneyTransaction income) {
|
||||
incomeRepository.save((Income) income);
|
||||
@@ -54,37 +56,47 @@ public class IncomeService implements ITransactionService {
|
||||
|
||||
@Override
|
||||
public List<Income> getTransactionsByDate(LocalDate date, String email) {
|
||||
return getTransactionsByDate(date)
|
||||
.stream()
|
||||
.filter(transaction -> {
|
||||
Optional<Credential> 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<Income>) transactionFilter.filterByEmail(getTransactionsByDate(date), email);
|
||||
}
|
||||
|
||||
// TODO: store transaction month in a separate field in the DB and change this logic
|
||||
@Override
|
||||
public List<Income> getTransactionsByMonth(Month month) {
|
||||
LocalDate startOfMonth = LocalDate.of(LocalDate.now().getYear(), month, 1);
|
||||
LocalDate endOfMonth = startOfMonth.plusMonths(1).minusDays(1);
|
||||
|
||||
return incomeRepository.findByDateBetween(startOfMonth, endOfMonth);
|
||||
return incomeRepository.filterByMonth(month.getValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Income> getTransactionsByMonth(Month month, String email) {
|
||||
return getTransactionsByMonth(month)
|
||||
.stream()
|
||||
.filter(transaction -> {
|
||||
Optional<Credential> 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<Income>) transactionFilter.filterByEmail(getTransactionsByMonth(month), email);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Income> getLastWeekTransactions() {
|
||||
return incomeRepository.findLastWeek();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Income> getLastWeekTransactions(String email) {
|
||||
return (List<Income>) transactionFilter.filterByEmail(getLastWeekTransactions(), email);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Income> getLastMonthTransactions() {
|
||||
return incomeRepository.findLastMonth();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Income> getLastMonthTransactions(String email) {
|
||||
return (List<Income>) transactionFilter.filterByEmail(getLastMonthTransactions(), email);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Income> getYearIntervalTransactions(int start, int end) {
|
||||
return incomeRepository.filterByYearInterval(start, end);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Income> getYearIntervalTransactions(String email, int start, int end) {
|
||||
return (List<Income>) transactionFilter.filterByEmail(getYearIntervalTransactions(start, end), email);
|
||||
}
|
||||
|
||||
public Income getTransactionById(long id) {
|
||||
|
||||
Reference in New Issue
Block a user