Update Rest API #33

Merged
mirrerror merged 4 commits from dimas_restupdate into master 2023-11-13 08:55:06 +00:00
7 changed files with 84 additions and 2 deletions
Showing only changes of commit acbb6285d9 - Show all commits

View File

@@ -19,8 +19,11 @@ import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDate;
import java.time.Month;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@RestController
@@ -80,14 +83,19 @@ public class ExpenseController {
}
@GetMapping("/personal-expenses")
public ResponseEntity<List<ExpenseDTO>> getExpensesByUser() {
public ResponseEntity<List<ExpenseDTO>> getExpensesByUser(@RequestParam Optional<LocalDate> date,
@RequestParam Optional<Month> month) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null && authentication.getPrincipal() instanceof UserDetails userDetails) {
String email = userDetails.getUsername();
List<ExpenseDTO> expenses = expenseService.getTransactionsByEmail(email).stream().map(expenseMapper::toDto).collect(Collectors.toList());
List<ExpenseDTO> expenses;
expenses = date.map(localDate -> expenseService.getTransactionsByDate(localDate).stream().map(expenseMapper::toDto).toList())
.orElseGet(() -> month.map(value -> expenseService.getTransactionsByMonth(value).stream().map(expenseMapper::toDto).toList())
.orElseGet(() -> expenseService.getTransactionsByEmail(email).stream().map(expenseMapper::toDto).toList()));
if (!expenses.isEmpty()) {
return ResponseEntity.ok(expenses);

View File

@@ -1,5 +1,6 @@
package com.faf223.expensetrackerfaf.controller;
import com.faf223.expensetrackerfaf.dto.ExpenseDTO;
import com.faf223.expensetrackerfaf.dto.IncomeCreationDTO;
import com.faf223.expensetrackerfaf.dto.IncomeDTO;
import com.faf223.expensetrackerfaf.dto.mappers.IncomeMapper;
@@ -17,8 +18,11 @@ import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDate;
import java.time.Month;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@RestController
@@ -96,6 +100,31 @@ public class IncomeController {
return ResponseEntity.notFound().build();
}
@GetMapping("/personal-incomes")
public ResponseEntity<List<IncomeDTO>> getExpensesByUser(@RequestParam Optional<LocalDate> date,
@RequestParam Optional<Month> month) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null && authentication.getPrincipal() instanceof UserDetails userDetails) {
String email = userDetails.getUsername();
List<IncomeDTO> incomes;
incomes = date.map(localDate -> incomeService.getTransactionsByDate(localDate).stream().map(incomeMapper::toDto).toList())
.orElseGet(() -> month.map(value -> incomeService.getTransactionsByMonth(value).stream().map(incomeMapper::toDto).toList())
.orElseGet(() -> incomeService.getTransactionsByEmail(email).stream().map(incomeMapper::toDto).toList()));
if (!incomes.isEmpty()) {
return ResponseEntity.ok(incomes);
} else {
return ResponseEntity.ok(Collections.emptyList());
}
}
return ResponseEntity.notFound().build();
}
@GetMapping("/categories")
public ResponseEntity<List<IncomeCategory>> getAllCategories() {
List<IncomeCategory> categories = incomeCategoryService.getAllCategories();

View File

@@ -5,9 +5,13 @@ import com.faf223.expensetrackerfaf.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.time.LocalDate;
import java.util.List;
@Repository
public interface ExpenseRepository extends JpaRepository<Expense, Long> {
List<Expense> findByUser(User user);
List<Expense> findByDate(LocalDate date);
List<Expense> findByDateBetween(LocalDate start, LocalDate end);
}

View File

@@ -5,9 +5,13 @@ import com.faf223.expensetrackerfaf.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.time.LocalDate;
import java.util.List;
@Repository
public interface IncomeRepository extends JpaRepository<Income, Long> {
List<Income> findByUser(User user);
List<Income> findByDate(LocalDate date);
List<Income> findByDateBetween(LocalDate start, LocalDate end);
}

View File

@@ -8,6 +8,8 @@ import com.faf223.expensetrackerfaf.repository.ExpenseRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.Month;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@@ -33,6 +35,20 @@ public class ExpenseService implements ITransactionService {
return new ArrayList<>();
}
@Override
public List<Expense> getTransactionsByDate(LocalDate date) {
return expenseRepository.findByDate(date);
}
// 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);
}
public List<Expense> getTransactions() {
return expenseRepository.findAll();
}

View File

@@ -2,6 +2,8 @@ package com.faf223.expensetrackerfaf.service;
import com.faf223.expensetrackerfaf.model.IMoneyTransaction;
import java.time.LocalDate;
import java.time.Month;
import java.util.List;
public interface ITransactionService {
@@ -9,6 +11,8 @@ public interface ITransactionService {
void createOrUpdate(IMoneyTransaction transaction);
List<? extends IMoneyTransaction> getTransactions();
List<? extends IMoneyTransaction> getTransactionsByEmail(String email);
List<? extends IMoneyTransaction> getTransactionsByDate(LocalDate date);
List<? extends IMoneyTransaction> getTransactionsByMonth(Month month);
IMoneyTransaction getTransactionById(long id);
void deleteTransactionById(long it);

View File

@@ -1,6 +1,7 @@
package com.faf223.expensetrackerfaf.service;
import com.faf223.expensetrackerfaf.model.Credential;
import com.faf223.expensetrackerfaf.model.Expense;
import com.faf223.expensetrackerfaf.model.IMoneyTransaction;
import com.faf223.expensetrackerfaf.model.Income;
import com.faf223.expensetrackerfaf.repository.CredentialRepository;
@@ -8,6 +9,8 @@ import com.faf223.expensetrackerfaf.repository.IncomeRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.Month;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@@ -37,6 +40,20 @@ public class IncomeService implements ITransactionService {
return new ArrayList<>();
}
@Override
public List<Income> getTransactionsByDate(LocalDate date) {
return incomeRepository.findByDate(date);
}
// 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);
}
public Income getTransactionById(long id) {
return incomeRepository.findById(id).orElse(null);
}