From 65c5c3f2df2ad71fb6a7263a0ee03b1bb7b17a1c Mon Sep 17 00:00:00 2001 From: mirrerror Date: Tue, 24 Oct 2023 19:59:23 +0300 Subject: [PATCH] refactor code, add interfaces for services --- .../controller/ExpenseController.java | 15 +++++++++++---- .../controller/IncomeController.java | 19 ++++++++++++++----- .../dto/mappers/ExpenseMapper.java | 2 +- .../dto/mappers/IncomeMapper.java | 3 +-- .../service/ExpenseCategoryService.java | 14 +++++++++++--- .../service/ExpenseService.java | 13 +++++++------ .../service/ICategoryService.java | 12 ++++++++++++ .../service/ITransactionService.java | 14 ++++++++++++++ .../service/IncomeCategoryService.java | 14 +++++++++++--- .../service/IncomeService.java | 13 +++++++------ 10 files changed, 89 insertions(+), 30 deletions(-) create mode 100644 src/main/java/com/faf223/expensetrackerfaf/service/ICategoryService.java create mode 100644 src/main/java/com/faf223/expensetrackerfaf/service/ITransactionService.java diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java index f8cbb19..532d01c 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java @@ -35,7 +35,7 @@ public class ExpenseController { @GetMapping() @PreAuthorize("hasRole('ADMIN')") public ResponseEntity> getAllExpenses() { - List expenses = expenseService.getExpenses().stream().map(expenseMapper::toDto).collect(Collectors.toList()); + List expenses = expenseService.getTransactions().stream().map(expenseMapper::toDto).collect(Collectors.toList()); if (!expenses.isEmpty()) return ResponseEntity.ok(expenses); else return ResponseEntity.notFound().build(); } @@ -53,7 +53,7 @@ public class ExpenseController { User user = userService.getUserByEmail(email); expense.setUser(user); - expenseService.createOrUpdateExpense(expense); + expenseService.createOrUpdate(expense); ExpenseDTO createdExpenseDTO = expenseMapper.toDto(expense); return ResponseEntity.status(HttpStatus.CREATED).body(createdExpenseDTO); } @@ -67,7 +67,7 @@ public class ExpenseController { BindingResult bindingResult) { Expense expense = expenseMapper.toExpense(expenseDTO); if (!bindingResult.hasErrors()) { - expenseService.createOrUpdateExpense(expense); + expenseService.createOrUpdate(expense); return ResponseEntity.ok(expenseMapper.toDto(expense)); } else { return ResponseEntity.notFound().build(); @@ -82,7 +82,7 @@ public class ExpenseController { if (authentication != null && authentication.getPrincipal() instanceof UserDetails userDetails) { String email = userDetails.getUsername(); - List expenses = expenseService.getExpensesByEmail(email).stream().map(expenseMapper::toDto).collect(Collectors.toList()); + List expenses = expenseService.getTransactionsByEmail(email).stream().map(expenseMapper::toDto).collect(Collectors.toList()); if (!expenses.isEmpty()) { return ResponseEntity.ok(expenses); @@ -91,4 +91,11 @@ public class ExpenseController { return ResponseEntity.notFound().build(); } + + @GetMapping("/categories") + public ResponseEntity> getAllCategories() { + List categories = expenseCategoryService.getAllCategories(); + if (!categories.isEmpty()) return ResponseEntity.ok(categories); + else return ResponseEntity.notFound().build(); + } } \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java index 85526b0..aecab85 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java @@ -1,11 +1,12 @@ 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; import com.faf223.expensetrackerfaf.model.Income; +import com.faf223.expensetrackerfaf.model.IncomeCategory; import com.faf223.expensetrackerfaf.model.User; +import com.faf223.expensetrackerfaf.service.IncomeCategoryService; import com.faf223.expensetrackerfaf.service.IncomeService; import com.faf223.expensetrackerfaf.service.UserService; import lombok.RequiredArgsConstructor; @@ -29,11 +30,12 @@ public class IncomeController { private final IncomeService incomeService; private final UserService userService; private final IncomeMapper incomeMapper; + private final IncomeCategoryService incomeCategoryService; @GetMapping() @PreAuthorize("hasRole('ADMIN')") public ResponseEntity> getAllIncomes() { - List incomes = incomeService.getIncomes().stream().map(incomeMapper::toDto).collect(Collectors.toList()); + List incomes = incomeService.getTransactions().stream().map(incomeMapper::toDto).collect(Collectors.toList()); if (!incomes.isEmpty()) return ResponseEntity.ok(incomes); else return ResponseEntity.notFound().build(); } @@ -51,7 +53,7 @@ public class IncomeController { income.setUser(user); System.out.println(income); - incomeService.createOrUpdateIncome(income); + incomeService.createOrUpdate(income); IncomeDTO createdIncomeDTO = incomeMapper.toDto(income); return ResponseEntity.status(HttpStatus.CREATED).body(createdIncomeDTO); } @@ -64,7 +66,7 @@ public class IncomeController { BindingResult bindingResult) { Income income = incomeMapper.toIncome(incomeDTO); if (!bindingResult.hasErrors()) { - incomeService.createOrUpdateIncome(income); + incomeService.createOrUpdate(income); return ResponseEntity.ok(incomeMapper.toDto(income)); } else { return ResponseEntity.notFound().build(); @@ -79,7 +81,7 @@ public class IncomeController { if (authentication != null && authentication.getPrincipal() instanceof UserDetails userDetails) { String email = userDetails.getUsername(); - List incomes = incomeService.getIncomesByEmail(email).stream().map(incomeMapper::toDto).collect(Collectors.toList()); + List incomes = incomeService.getTransactionsByEmail(email).stream().map(incomeMapper::toDto).collect(Collectors.toList()); if (!incomes.isEmpty()) { return ResponseEntity.ok(incomes); @@ -88,4 +90,11 @@ public class IncomeController { return ResponseEntity.notFound().build(); } + + @GetMapping("/categories") + public ResponseEntity> getAllCategories() { + List categories = incomeCategoryService.getAllCategories(); + if (!categories.isEmpty()) return ResponseEntity.ok(categories); + else return ResponseEntity.notFound().build(); + } } \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/ExpenseMapper.java b/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/ExpenseMapper.java index fc5bcd1..9bc257f 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/ExpenseMapper.java +++ b/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/ExpenseMapper.java @@ -31,7 +31,7 @@ public class ExpenseMapper { public Expense toExpense(ExpenseCreationDTO expenseDTO) { - return new Expense(expenseCategoryService.getExpenseCategory(expenseDTO.getExpenseCategory()), LocalDate.now(), expenseDTO.getAmount()); + return new Expense(expenseCategoryService.getCategoryById(expenseDTO.getExpenseCategory()), LocalDate.now(), expenseDTO.getAmount()); } } \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/IncomeMapper.java b/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/IncomeMapper.java index 0224ac5..a59a2dd 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/IncomeMapper.java +++ b/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/IncomeMapper.java @@ -31,8 +31,7 @@ public class IncomeMapper { } public Income toIncome(IncomeCreationDTO incomeDTO) { - - return new Income(incomeCategoryService.getExpenseCategory(incomeDTO.getIncomeCategory()), LocalDate.now(), incomeDTO.getAmount()); + return new Income(incomeCategoryService.getCategoryById(incomeDTO.getIncomeCategory()), LocalDate.now(), incomeDTO.getAmount()); } } \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseCategoryService.java b/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseCategoryService.java index 088f791..2d90b6a 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseCategoryService.java +++ b/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseCategoryService.java @@ -5,14 +5,22 @@ import com.faf223.expensetrackerfaf.repository.ExpenseCategoryRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; + @Service @RequiredArgsConstructor -public class ExpenseCategoryService { +public class ExpenseCategoryService implements ICategoryService { private final ExpenseCategoryRepository expenseCategoryRepository; - public ExpenseCategory getExpenseCategory(long category) { - return expenseCategoryRepository.getReferenceById(category); + @Override + public List getAllCategories() { + return expenseCategoryRepository.findAll(); + } + + @Override + public ExpenseCategory getCategoryById(long id) { + return expenseCategoryRepository.getReferenceById(id); } } \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java b/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java index 1bea04a..4209fd6 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java +++ b/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java @@ -2,6 +2,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.repository.CredentialRepository; import com.faf223.expensetrackerfaf.repository.ExpenseRepository; import lombok.RequiredArgsConstructor; @@ -13,16 +14,16 @@ import java.util.Optional; @Service @RequiredArgsConstructor -public class ExpenseService { +public class ExpenseService implements ITransactionService { private final ExpenseRepository expenseRepository; private final CredentialRepository credentialRepository; - public void createOrUpdateExpense(Expense expense) { - expenseRepository.save(expense); + public void createOrUpdate(IMoneyTransaction expense) { + expenseRepository.save((Expense) expense); } - public List getExpensesByEmail(String email) { + public List getTransactionsByEmail(String email) { Optional credential = credentialRepository.findByEmail(email); if (credential.isPresent()) { @@ -32,11 +33,11 @@ public class ExpenseService { return new ArrayList<>(); } - public List getExpenses() { + public List getTransactions() { return expenseRepository.findAll(); } - public Expense getExpenseById(long id) { + public Expense getTransactionById(long id) { return expenseRepository.findById(id).orElse(null); } } \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/ICategoryService.java b/src/main/java/com/faf223/expensetrackerfaf/service/ICategoryService.java new file mode 100644 index 0000000..d48d8f7 --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/service/ICategoryService.java @@ -0,0 +1,12 @@ +package com.faf223.expensetrackerfaf.service; + +import com.faf223.expensetrackerfaf.model.IMoneyTransactionCategory; + +import java.util.List; + +public interface ICategoryService { + + List getAllCategories(); + IMoneyTransactionCategory getCategoryById(long id); + +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/ITransactionService.java b/src/main/java/com/faf223/expensetrackerfaf/service/ITransactionService.java new file mode 100644 index 0000000..6219bef --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/service/ITransactionService.java @@ -0,0 +1,14 @@ +package com.faf223.expensetrackerfaf.service; + +import com.faf223.expensetrackerfaf.model.IMoneyTransaction; + +import java.util.List; + +public interface ITransactionService { + + void createOrUpdate(IMoneyTransaction transaction); + List getTransactions(); + List getTransactionsByEmail(String email); + IMoneyTransaction getTransactionById(long id); + +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/IncomeCategoryService.java b/src/main/java/com/faf223/expensetrackerfaf/service/IncomeCategoryService.java index 2a143b1..b7ce745 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/service/IncomeCategoryService.java +++ b/src/main/java/com/faf223/expensetrackerfaf/service/IncomeCategoryService.java @@ -5,13 +5,21 @@ import com.faf223.expensetrackerfaf.repository.IncomeCategoryRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; + @Service @RequiredArgsConstructor -public class IncomeCategoryService { +public class IncomeCategoryService implements ICategoryService { private final IncomeCategoryRepository incomeCategoryRepository; - public IncomeCategory getExpenseCategory(long category) { - return incomeCategoryRepository.getReferenceById(category); + @Override + public List getAllCategories() { + return incomeCategoryRepository.findAll(); + } + + @Override + public IncomeCategory getCategoryById(long id) { + return incomeCategoryRepository.getReferenceById(id); } } \ No newline at end of file diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java b/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java index 16946a9..8287d01 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java +++ b/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java @@ -1,6 +1,7 @@ package com.faf223.expensetrackerfaf.service; import com.faf223.expensetrackerfaf.model.Credential; +import com.faf223.expensetrackerfaf.model.IMoneyTransaction; import com.faf223.expensetrackerfaf.model.Income; import com.faf223.expensetrackerfaf.repository.CredentialRepository; import com.faf223.expensetrackerfaf.repository.IncomeRepository; @@ -13,20 +14,20 @@ import java.util.Optional; @Service @RequiredArgsConstructor -public class IncomeService { +public class IncomeService implements ITransactionService { private final IncomeRepository incomeRepository; private final CredentialRepository credentialRepository; - public void createOrUpdateIncome(Income income) { - incomeRepository.save(income); + public void createOrUpdate(IMoneyTransaction income) { + incomeRepository.save((Income) income); } - public List getIncomes() { + public List getTransactions() { return incomeRepository.findAll(); } - public List getIncomesByEmail(String email) { + public List getTransactionsByEmail(String email) { Optional credential = credentialRepository.findByEmail(email); if (credential.isPresent()) { @@ -36,7 +37,7 @@ public class IncomeService { return new ArrayList<>(); } - public Income getIncomeById(long id) { + public Income getTransactionById(long id) { return incomeRepository.findById(id).orElse(null); } }