diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java index aed21b6..d2298e5 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/ExpenseController.java @@ -1,5 +1,8 @@ package com.faf223.expensetrackerfaf.controller; +import com.faf223.expensetrackerfaf.dto.ExpenseCreationDTO; +import com.faf223.expensetrackerfaf.dto.ExpenseDTO; +import com.faf223.expensetrackerfaf.dto.mappers.ExpenseMapper; import com.faf223.expensetrackerfaf.model.Expense; import com.faf223.expensetrackerfaf.service.ExpenseService; import org.springframework.beans.factory.annotation.Autowired; @@ -8,50 +11,55 @@ import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.stream.Collectors; @RestController @RequestMapping("/expenses") public class ExpenseController { private final ExpenseService expenseService; + private final ExpenseMapper expenseMapper; @Autowired - public ExpenseController(ExpenseService expenseService) { + public ExpenseController(ExpenseService expenseService, ExpenseMapper expenseMapper) { this.expenseService = expenseService; + this.expenseMapper = expenseMapper; } @GetMapping() - public ResponseEntity> getAllExpenses() { - List expenses = expenseService.getExpenses(); + public ResponseEntity> getAllExpenses() { + List expenses = expenseService.getExpenses().stream().map(expenseMapper::toDto).collect(Collectors.toList()); if (!expenses.isEmpty()) return ResponseEntity.ok(expenses); else return ResponseEntity.notFound().build(); } @PostMapping() - public ResponseEntity createNewExpense(@RequestBody Expense expense, + public ResponseEntity createNewExpense(@RequestBody ExpenseCreationDTO expenseDTO, BindingResult bindingResult) { + Expense expense = expenseMapper.toExpense(expenseDTO); if (!bindingResult.hasErrors()) { expenseService.createOrUpdateExpense(expense); - return ResponseEntity.ok(expense); + return ResponseEntity.ok(expenseMapper.toDto(expense)); } else { return ResponseEntity.notFound().build(); } } @PatchMapping() - public ResponseEntity updateExpense(@RequestBody Expense expense, + public ResponseEntity updateExpense(@RequestBody ExpenseCreationDTO expenseDTO, BindingResult bindingResult) { + Expense expense = expenseMapper.toExpense(expenseDTO); if (!bindingResult.hasErrors()) { expenseService.createOrUpdateExpense(expense); - return ResponseEntity.ok(expense); + return ResponseEntity.ok(expenseMapper.toDto(expense)); } else { return ResponseEntity.notFound().build(); } } @GetMapping("/{userUuid}") - public ResponseEntity> getExpensesByUser(@PathVariable String userUuid) { - List expenses = expenseService.getExpensesByUserId(userUuid); + public ResponseEntity> getExpensesByUser(@PathVariable String userUuid) { + List expenses = expenseService.getExpensesByUserId(userUuid).stream().map(expenseMapper::toDto).collect(Collectors.toList()); if (!expenses.isEmpty()) return ResponseEntity.ok(expenses); else return ResponseEntity.notFound().build(); } diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java index ffc0497..ad342f7 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/IncomeController.java @@ -1,5 +1,8 @@ package com.faf223.expensetrackerfaf.controller; +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.service.IncomeService; import org.springframework.beans.factory.annotation.Autowired; @@ -8,51 +11,55 @@ import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.stream.Collectors; @RestController @RequestMapping("/incomes") public class IncomeController { private final IncomeService incomeService; + private final IncomeMapper incomeMapper; @Autowired - public IncomeController(IncomeService incomeService) { + public IncomeController(IncomeService incomeService, IncomeMapper incomeMapper) { this.incomeService = incomeService; + this.incomeMapper = incomeMapper; } @GetMapping() - public ResponseEntity> getAllIncomes() { - List incomes = incomeService.getIncomes(); + public ResponseEntity> getAllIncomes() { + List incomes = incomeService.getIncomes().stream().map(incomeMapper::toDto).collect(Collectors.toList()); if (!incomes.isEmpty()) return ResponseEntity.ok(incomes); else return ResponseEntity.notFound().build(); } @PostMapping() - public ResponseEntity createNewIncome(@RequestBody Income income, + public ResponseEntity createNewIncome(@RequestBody IncomeCreationDTO incomeDTO, BindingResult bindingResult) { + Income income = incomeMapper.toIncome(incomeDTO); if (!bindingResult.hasErrors()) { incomeService.createOrUpdateIncome(income); - return ResponseEntity.ok(income); + return ResponseEntity.ok(incomeMapper.toDto(income)); } else { return ResponseEntity.notFound().build(); } } @PatchMapping() - public ResponseEntity updateIncome(@RequestBody Income income, + public ResponseEntity updateIncome(@RequestBody IncomeCreationDTO incomeDTO, BindingResult bindingResult) { + Income income = incomeMapper.toIncome(incomeDTO); if (!bindingResult.hasErrors()) { - System.out.println("amount: " + income.getAmount()); incomeService.createOrUpdateIncome(income); - return ResponseEntity.ok(income); + return ResponseEntity.ok(incomeMapper.toDto(income)); } else { return ResponseEntity.notFound().build(); } } @GetMapping("/{userUuid}") - public ResponseEntity> getIncomesByUser(@PathVariable String userUuid) { - List incomes = incomeService.getIncomesByUserId(userUuid); + public ResponseEntity> getIncomesByUser(@PathVariable String userUuid) { + List incomes = incomeService.getIncomesByUserId(userUuid).stream().map(incomeMapper::toDto).collect(Collectors.toList()); if (!incomes.isEmpty()) return ResponseEntity.ok(incomes); else return ResponseEntity.notFound().build(); } diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/UserController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/UserController.java index afe8623..97b3648 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/UserController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/UserController.java @@ -1,5 +1,8 @@ package com.faf223.expensetrackerfaf.controller; +import com.faf223.expensetrackerfaf.dto.UserCreationDTO; +import com.faf223.expensetrackerfaf.dto.UserDTO; +import com.faf223.expensetrackerfaf.dto.mappers.UserMapper; import com.faf223.expensetrackerfaf.model.User; import com.faf223.expensetrackerfaf.service.UserService; import org.springframework.beans.factory.annotation.Autowired; @@ -8,51 +11,56 @@ import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.stream.Collectors; @RestController @RequestMapping("/users") public class UserController { private final UserService userService; + private final UserMapper userMapper; @Autowired - public UserController(UserService userService) { + public UserController(UserService userService, UserMapper userMapper) { this.userService = userService; + this.userMapper = userMapper; } @GetMapping() - public ResponseEntity> getAllUsers() { - List users = userService.getUsers(); + public ResponseEntity> getAllUsers() { + List users = userService.getUsers().stream().map(userMapper::toDto).collect(Collectors.toList()); if (!users.isEmpty()) return ResponseEntity.ok(users); else return ResponseEntity.notFound().build(); } @PostMapping() - public ResponseEntity createNewUser(@RequestBody User user, + public ResponseEntity createNewUser(@RequestBody UserCreationDTO userDTO, BindingResult bindingResult) { + User user = userMapper.toUser(userDTO); if (!bindingResult.hasErrors()) { userService.createOrUpdateUser(user); - return ResponseEntity.ok(user); + return ResponseEntity.ok(userMapper.toDto(user)); } else { return ResponseEntity.notFound().build(); } } @PatchMapping() - public ResponseEntity updateUser(@RequestBody User user, + public ResponseEntity updateUser(@RequestBody UserCreationDTO userDTO, BindingResult bindingResult) { + User user = userMapper.toUser(userDTO); if (!bindingResult.hasErrors()) { userService.createOrUpdateUser(user); - return ResponseEntity.ok(user); + return ResponseEntity.ok(userMapper.toDto(user)); } else { return ResponseEntity.notFound().build(); } } @GetMapping("/{userUuid}") - public ResponseEntity getUser(@PathVariable String userUuid) { + public ResponseEntity getUser(@PathVariable String userUuid) { User user = userService.getUserById(userUuid); - if (user != null) return ResponseEntity.ok(user); + if (user != null) return ResponseEntity.ok(userMapper.toDto(user)); else return ResponseEntity.notFound().build(); } } diff --git a/src/main/java/com/faf223/expensetrackerfaf/dto/ExpenseCreationDTO.java b/src/main/java/com/faf223/expensetrackerfaf/dto/ExpenseCreationDTO.java new file mode 100644 index 0000000..3042800 --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/dto/ExpenseCreationDTO.java @@ -0,0 +1,12 @@ +package com.faf223.expensetrackerfaf.dto; + +import com.faf223.expensetrackerfaf.model.User; +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class ExpenseCreationDTO { + private long expenseId; + private User user; +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/dto/ExpenseDTO.java b/src/main/java/com/faf223/expensetrackerfaf/dto/ExpenseDTO.java new file mode 100644 index 0000000..b18643a --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/dto/ExpenseDTO.java @@ -0,0 +1,18 @@ +package com.faf223.expensetrackerfaf.dto; + +import com.faf223.expensetrackerfaf.model.ExpenseCategory; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDate; + +@Data +@AllArgsConstructor +public class ExpenseDTO { + private long expenseId; + private UserDTO userDTO; + private ExpenseCategory expenseCategory; + private LocalDate date; + private BigDecimal amount; +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/dto/IncomeCreationDTO.java b/src/main/java/com/faf223/expensetrackerfaf/dto/IncomeCreationDTO.java new file mode 100644 index 0000000..e35c522 --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/dto/IncomeCreationDTO.java @@ -0,0 +1,12 @@ +package com.faf223.expensetrackerfaf.dto; + +import com.faf223.expensetrackerfaf.model.User; +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class IncomeCreationDTO { + private long incomeId; + private User userDTO; +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/dto/IncomeDTO.java b/src/main/java/com/faf223/expensetrackerfaf/dto/IncomeDTO.java new file mode 100644 index 0000000..3ee4998 --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/dto/IncomeDTO.java @@ -0,0 +1,18 @@ +package com.faf223.expensetrackerfaf.dto; + +import com.faf223.expensetrackerfaf.model.IncomeCategory; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDate; + +@Data +@AllArgsConstructor +public class IncomeDTO { + private long incomeId; + private UserDTO userDTO; + private IncomeCategory category; + private LocalDate date; + private BigDecimal amount; +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/dto/UserCreationDTO.java b/src/main/java/com/faf223/expensetrackerfaf/dto/UserCreationDTO.java new file mode 100644 index 0000000..b947426 --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/dto/UserCreationDTO.java @@ -0,0 +1,10 @@ +package com.faf223.expensetrackerfaf.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class UserCreationDTO { + private String uuid; +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/dto/UserDTO.java b/src/main/java/com/faf223/expensetrackerfaf/dto/UserDTO.java new file mode 100644 index 0000000..9f79253 --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/dto/UserDTO.java @@ -0,0 +1,13 @@ +package com.faf223.expensetrackerfaf.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class UserDTO { + private String uuid; + private String name; + private String surname; + private String username; +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/ExpenseMapper.java b/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/ExpenseMapper.java new file mode 100644 index 0000000..7e91e8b --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/ExpenseMapper.java @@ -0,0 +1,31 @@ +package com.faf223.expensetrackerfaf.dto.mappers; + +import com.faf223.expensetrackerfaf.dto.ExpenseCreationDTO; +import com.faf223.expensetrackerfaf.dto.ExpenseDTO; +import com.faf223.expensetrackerfaf.model.Expense; +import com.faf223.expensetrackerfaf.service.ExpenseService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class ExpenseMapper { + + private final ExpenseService expenseService; + private final UserMapper userMapper; + + @Autowired + public ExpenseMapper(ExpenseService expenseService, UserMapper userMapper) { + this.expenseService = expenseService; + this.userMapper = userMapper; + } + + public ExpenseDTO toDto(Expense expense) { + return new ExpenseDTO(expense.getExpenseId(), userMapper.toDto(expense.getUser()), + expense.getCategory(), expense.getDate(), expense.getAmount()); + } + + public Expense toExpense(ExpenseCreationDTO expenseDTO) { + return expenseService.getExpenseById(expenseDTO.getExpenseId()); + } + +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/IncomeMapper.java b/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/IncomeMapper.java new file mode 100644 index 0000000..91c08d3 --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/IncomeMapper.java @@ -0,0 +1,31 @@ +package com.faf223.expensetrackerfaf.dto.mappers; + +import com.faf223.expensetrackerfaf.dto.IncomeCreationDTO; +import com.faf223.expensetrackerfaf.dto.IncomeDTO; +import com.faf223.expensetrackerfaf.model.Income; +import com.faf223.expensetrackerfaf.service.IncomeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class IncomeMapper { + + private final IncomeService incomeService; + private final UserMapper userMapper; + + @Autowired + public IncomeMapper(IncomeService incomeService, UserMapper userMapper) { + this.incomeService = incomeService; + this.userMapper = userMapper; + } + + public IncomeDTO toDto(Income income) { + return new IncomeDTO(income.getIncomeId(), userMapper.toDto(income.getUser()), + income.getCategory(), income.getDate(), income.getAmount()); + } + + public Income toIncome(IncomeCreationDTO incomeDTO) { + return incomeService.getIncomeById(incomeDTO.getIncomeId()); + } + +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/UserMapper.java b/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/UserMapper.java new file mode 100644 index 0000000..a403a24 --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/UserMapper.java @@ -0,0 +1,28 @@ +package com.faf223.expensetrackerfaf.dto.mappers; + +import com.faf223.expensetrackerfaf.dto.UserCreationDTO; +import com.faf223.expensetrackerfaf.dto.UserDTO; +import com.faf223.expensetrackerfaf.model.User; +import com.faf223.expensetrackerfaf.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class UserMapper { + + private final UserService userService; + + @Autowired + public UserMapper(UserService userService) { + this.userService = userService; + } + + public UserDTO toDto(User user) { + return new UserDTO(user.getUuid(), user.getName(), user.getSurname(), user.getUsername()); + } + + public User toUser(UserCreationDTO userDTO) { + return userService.getUserById(userDTO.getUuid()); + } + +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/model/User.java b/src/main/java/com/faf223/expensetrackerfaf/model/User.java index b5a30a9..0460db9 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/model/User.java +++ b/src/main/java/com/faf223/expensetrackerfaf/model/User.java @@ -10,7 +10,7 @@ import lombok.Data; public class User { @Id @Column(table = "users", name = "user_uuid") - private String userUuid; + private String uuid; private String name; private String surname; diff --git a/src/main/java/com/faf223/expensetrackerfaf/repository/ExpenseRepository.java b/src/main/java/com/faf223/expensetrackerfaf/repository/ExpenseRepository.java index 4cd39d0..38fb2fb 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/repository/ExpenseRepository.java +++ b/src/main/java/com/faf223/expensetrackerfaf/repository/ExpenseRepository.java @@ -8,5 +8,5 @@ import java.util.List; @Repository public interface ExpenseRepository extends JpaRepository { - List findByUserUserUuid(String userUuid); + List findByUserUuid(String userUuid); } diff --git a/src/main/java/com/faf223/expensetrackerfaf/repository/IncomeRepository.java b/src/main/java/com/faf223/expensetrackerfaf/repository/IncomeRepository.java index 9a1a592..2f199af 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/repository/IncomeRepository.java +++ b/src/main/java/com/faf223/expensetrackerfaf/repository/IncomeRepository.java @@ -8,5 +8,5 @@ import java.util.List; @Repository public interface IncomeRepository extends JpaRepository { - List findByUserUserUuid(String userUuid); + List findByUserUuid(String userUuid); } diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java b/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java index 56ef226..942c5a1 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java +++ b/src/main/java/com/faf223/expensetrackerfaf/service/ExpenseService.java @@ -22,10 +22,14 @@ public class ExpenseService { } public List getExpensesByUserId(String userUuid) { - return expenseRepository.findByUserUserUuid(userUuid); + return expenseRepository.findByUserUuid(userUuid); } public List getExpenses() { return expenseRepository.findAll(); } + + public Expense getExpenseById(long id) { + return expenseRepository.findById(id).orElse(null); + } } \ 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 65347fb..cde77d0 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java +++ b/src/main/java/com/faf223/expensetrackerfaf/service/IncomeService.java @@ -26,6 +26,10 @@ public class IncomeService { } public List getIncomesByUserId(String userUuid) { - return incomeRepository.findByUserUserUuid(userUuid); + return incomeRepository.findByUserUuid(userUuid); + } + + public Income getIncomeById(long id) { + return incomeRepository.findById(id).orElse(null); } }