diff --git a/src/main/java/com/faf223/expensetrackerfaf/controller/UserController.java b/src/main/java/com/faf223/expensetrackerfaf/controller/UserController.java index 4886484..65f883e 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controller/UserController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controller/UserController.java @@ -23,10 +23,7 @@ import org.springframework.security.core.userdetails.UserDetails; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; +import java.util.*; @RestController @RequestMapping("/users") @@ -86,7 +83,7 @@ public class UserController { @GetMapping() @PreAuthorize("hasRole('ADMIN')") - public ResponseEntity> getAllUsers() { + public ResponseEntity> getAllUsers() { ArrayList users = new ArrayList<>(userService.getUsers()); return ResponseEntity.ok(userMapper.toDto(users)); diff --git a/src/main/java/com/faf223/expensetrackerfaf/dto/FamilyCreationDTO.java b/src/main/java/com/faf223/expensetrackerfaf/dto/FamilyCreationDTO.java new file mode 100644 index 0000000..17cfc27 --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/dto/FamilyCreationDTO.java @@ -0,0 +1,14 @@ +package com.faf223.expensetrackerfaf.dto; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class FamilyCreationDTO { + @NotNull(message = "Name must not be null") + @NotEmpty(message = "Name must not be empty") + private String name; +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/dto/FamilyDTO.java b/src/main/java/com/faf223/expensetrackerfaf/dto/FamilyDTO.java new file mode 100644 index 0000000..c52d3d9 --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/dto/FamilyDTO.java @@ -0,0 +1,14 @@ +package com.faf223.expensetrackerfaf.dto; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class FamilyDTO { + @NotNull(message = "Name must not be null") + @NotEmpty(message = "Name must not be empty") + private String name; +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/FamilyMapper.java b/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/FamilyMapper.java new file mode 100644 index 0000000..50c5954 --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/FamilyMapper.java @@ -0,0 +1,25 @@ +package com.faf223.expensetrackerfaf.dto.mappers; + +import com.faf223.expensetrackerfaf.dto.FamilyCreationDTO; +import com.faf223.expensetrackerfaf.dto.FamilyDTO; +import com.faf223.expensetrackerfaf.model.Family; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class FamilyMapper { + + private final UserMapper userMapper; + + public FamilyDTO toDto(Family family) { + return new FamilyDTO(family.getId(), family.getName(), userMapper.toDto(family.getMembers())); + } + + public Family toFamily(FamilyCreationDTO familyCreationDTO) { + Family family = new Family(); + family.setName(familyCreationDTO.getName()); + return family; + } + +} 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 b3059ce..6a6ebba 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/IncomeMapper.java +++ b/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/IncomeMapper.java @@ -2,12 +2,9 @@ package com.faf223.expensetrackerfaf.dto.mappers; import com.faf223.expensetrackerfaf.dto.IncomeCreationDTO; import com.faf223.expensetrackerfaf.dto.IncomeDTO; -import com.faf223.expensetrackerfaf.model.Expense; import com.faf223.expensetrackerfaf.model.Income; import com.faf223.expensetrackerfaf.service.IncomeCategoryService; -import com.faf223.expensetrackerfaf.service.IncomeService; import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.time.LocalDate; diff --git a/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/UserMapper.java b/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/UserMapper.java index 7e3cfab..07b3e86 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/UserMapper.java +++ b/src/main/java/com/faf223/expensetrackerfaf/dto/mappers/UserMapper.java @@ -6,6 +6,7 @@ import com.faf223.expensetrackerfaf.model.User; import org.springframework.stereotype.Component; import java.util.ArrayList; +import java.util.List; @Component public class UserMapper { @@ -14,11 +15,9 @@ public class UserMapper { return new UserDTO(user.getFirstName(), user.getLastName(), user.getUsername()); } - public ArrayList toDto(ArrayList user) { - - ArrayList list = new ArrayList<>(); - - for (User u: user) + public List toDto(List user) { + List list = new ArrayList<>(); + for (User u : user) list.add(toDto(u)); return list; diff --git a/src/main/java/com/faf223/expensetrackerfaf/model/Expense.java b/src/main/java/com/faf223/expensetrackerfaf/model/Expense.java index 3b0cd72..411c54a 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/model/Expense.java +++ b/src/main/java/com/faf223/expensetrackerfaf/model/Expense.java @@ -38,9 +38,6 @@ public class Expense implements IMoneyTransaction { @DecimalMin(value = "0.0", inclusive = false) private BigDecimal amount; - public Expense(LocalDate date, BigDecimal amount) { - } - public Expense(ExpenseCategory expenseCategory, LocalDate date, BigDecimal amount) { this.category = expenseCategory; this.date = date; diff --git a/src/main/java/com/faf223/expensetrackerfaf/model/Family.java b/src/main/java/com/faf223/expensetrackerfaf/model/Family.java new file mode 100644 index 0000000..38df80b --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/model/Family.java @@ -0,0 +1,28 @@ +package com.faf223.expensetrackerfaf.model; + +import jakarta.persistence.*; +import jakarta.validation.constraints.NotEmpty; +import lombok.*; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Entity(name = "families") +@Builder +public class Family { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "family_id") + private Long id; + + @NotEmpty + private String name; + + @OneToMany(mappedBy = "family", fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ToString.Exclude + private List members; + +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/model/User.java b/src/main/java/com/faf223/expensetrackerfaf/model/User.java index 26dbd9c..36718fe 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/model/User.java +++ b/src/main/java/com/faf223/expensetrackerfaf/model/User.java @@ -1,48 +1,55 @@ - package com.faf223.expensetrackerfaf.model; +package com.faf223.expensetrackerfaf.model; - import jakarta.persistence.*; - import jakarta.validation.constraints.NotEmpty; - import jakarta.validation.constraints.NotNull; - import lombok.*; +import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.persistence.*; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.*; - import java.util.List; +import java.util.List; - @Entity(name = "users") - @Data - @Builder - @NoArgsConstructor - @AllArgsConstructor - public class User { - @Id - @Column(name = "user_uuid") - @GeneratedValue(strategy = GenerationType.UUID) - private String userUuid; +@Entity(name = "users") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class User { + @Id + @Column(name = "user_uuid") + @GeneratedValue(strategy = GenerationType.UUID) + private String userUuid; - @Column(name = "name") - @NotNull(message = "First name must not be null") - @NotEmpty(message = "First name must not be empty") - private String firstName; + @Column(name = "name") + @NotNull(message = "First name must not be null") + @NotEmpty(message = "First name must not be empty") + private String firstName; - @Column(name = "surname") - @NotNull(message = "Last name must not be null") - @NotEmpty(message = "Last name must not be empty") - private String lastName; + @Column(name = "surname") + @NotNull(message = "Last name must not be null") + @NotEmpty(message = "Last name must not be empty") + private String lastName; - @Column(name = "username") - @NotNull(message = "Username must not be null") - @NotEmpty(message = "Username must not be empty") - private String username; + @Column(name = "username") + @NotNull(message = "Username must not be null") + @NotEmpty(message = "Username must not be empty") + private String username; - @Transient - // @NotNull(message = "Password must not be null") - // @NotEmpty(message = "Password must not be empty") - private String password; + @Transient +// @NotNull(message = "Password must not be null") +// @NotEmpty(message = "Password must not be empty") + private String password; - @OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.ALL) - @ToString.Exclude - private List expenses; + @OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ToString.Exclude + private List expenses; - @OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.ALL) - @ToString.Exclude - private List incomes; - } + @OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ToString.Exclude + private List incomes; + + @ManyToOne + @JoinColumn(name = "family_id") + @ToString.Exclude + @JsonIgnore + private Family family; +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/repository/FamilyRepository.java b/src/main/java/com/faf223/expensetrackerfaf/repository/FamilyRepository.java new file mode 100644 index 0000000..6fa3998 --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/repository/FamilyRepository.java @@ -0,0 +1,9 @@ +package com.faf223.expensetrackerfaf.repository; + +import com.faf223.expensetrackerfaf.model.IncomeCategory; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface FamilyRepository extends JpaRepository { +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/repository/IncomeCategoryRepository.java b/src/main/java/com/faf223/expensetrackerfaf/repository/IncomeCategoryRepository.java index e6c8402..bc1739f 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/repository/IncomeCategoryRepository.java +++ b/src/main/java/com/faf223/expensetrackerfaf/repository/IncomeCategoryRepository.java @@ -6,4 +6,4 @@ import org.springframework.stereotype.Repository; @Repository public interface IncomeCategoryRepository extends JpaRepository { -} \ No newline at end of file +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/service/FamilyService.java b/src/main/java/com/faf223/expensetrackerfaf/service/FamilyService.java new file mode 100644 index 0000000..8b294af --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/service/FamilyService.java @@ -0,0 +1,13 @@ +package com.faf223.expensetrackerfaf.service; + +import com.faf223.expensetrackerfaf.repository.FamilyRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class FamilyService { + + private final FamilyRepository familyRepository; + +}