diff --git a/pom.xml b/pom.xml index ffad089..f38313e 100644 --- a/pom.xml +++ b/pom.xml @@ -36,7 +36,11 @@ test 3.1.2 + + org.springframework.boot + spring-boot-starter-security + org.springframework.boot spring-boot-starter-data-jpa diff --git a/src/main/java/com/faf223/expensetrackerfaf/model/Categories.java b/src/main/java/com/faf223/expensetrackerfaf/model/Categories.java index d30264f..a309f85 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/model/Categories.java +++ b/src/main/java/com/faf223/expensetrackerfaf/model/Categories.java @@ -1,3 +1,4 @@ + package com.faf223.expensetrackerfaf.model; public class Categories { diff --git a/src/main/java/com/faf223/expensetrackerfaf/model/Expense.java b/src/main/java/com/faf223/expensetrackerfaf/model/Expense.java index 1ffbec4..48f80c4 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/model/Expense.java +++ b/src/main/java/com/faf223/expensetrackerfaf/model/Expense.java @@ -1,26 +1,43 @@ + package com.faf223.expensetrackerfaf.model; - import com.faf223.expensetrackerfaf.util.IMoneyTransaction; +import jakarta.persistence.*; +@Entity +@Table(name = "expense") public class Expense implements IMoneyTransaction { - private int userId; + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + @ManyToOne + @JoinColumn(name = "user_id", referencedColumnName = "id") + private User user; private int amount; private Categories.ExpenseCategory category; - public Expense(int userId, int amount, Categories.ExpenseCategory category) { - this.userId = userId; + public Expense(User user, int amount, Categories.ExpenseCategory category) { + this.user = user; this.amount = amount; this.category = category; } + public Expense() {} + @Override - public long getUserId() { - return userId; + public User getUser() { + return user; } public void setUserId(int userId) { - this.userId = userId; + this.user = user; + } + + @Override + public long getUserId() { + return 0; } @Override diff --git a/src/main/java/com/faf223/expensetrackerfaf/model/Income.java b/src/main/java/com/faf223/expensetrackerfaf/model/Income.java index a3449e5..098c4de 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/model/Income.java +++ b/src/main/java/com/faf223/expensetrackerfaf/model/Income.java @@ -1,22 +1,39 @@ package com.faf223.expensetrackerfaf.model; import com.faf223.expensetrackerfaf.util.IMoneyTransaction; +import jakarta.persistence.*; +@Entity +@Table(name = "income") public class Income implements IMoneyTransaction { - private long userId; + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + @ManyToOne + @JoinColumn(name = "user_id", referencedColumnName = "id") + private User user; private int amount; private Categories.IncomeCategory category; - public Income(long userId, int amount, Categories.IncomeCategory category) { - this.userId = userId; + public Income(User user, int amount, Categories.IncomeCategory category) { + this.user = user; this.amount = amount; this.category = category; } + public Income() {} + + @Override + public User getUser() { + return user; + } + @Override public long getUserId() { - return userId; + return 0; } @Override @@ -29,8 +46,8 @@ public class Income implements IMoneyTransaction { return category.getEffectiveName(); } - public void setUserId(long userId) { - this.userId = userId; + public void setUserId(User user) { + this.user = user; } public void setAmount(int amount) { diff --git a/src/main/java/com/faf223/expensetrackerfaf/model/Role.java b/src/main/java/com/faf223/expensetrackerfaf/model/Role.java index d241cf8..d9393e8 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/model/Role.java +++ b/src/main/java/com/faf223/expensetrackerfaf/model/Role.java @@ -1,7 +1,6 @@ + package com.faf223.expensetrackerfaf.model; public enum Role { - UNREGISTERED, REGISTERED, ADMIN; - } diff --git a/src/main/java/com/faf223/expensetrackerfaf/model/User.java b/src/main/java/com/faf223/expensetrackerfaf/model/User.java index 35fe0fc..65ed712 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/model/User.java +++ b/src/main/java/com/faf223/expensetrackerfaf/model/User.java @@ -1,12 +1,25 @@ + package com.faf223.expensetrackerfaf.model; +import jakarta.persistence.*; import java.util.List; +@Entity +@Table(name = "User") public class User { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; - private String name, email, login, password; + private String name; + private String email; + private String login; + private String password; private Role role; + + @OneToMany(mappedBy = "user") private List expenses; + + @OneToMany(mappedBy = "user") private List incomes; public User(long id, String name, String email, String login, String password, Role role, List expenses, List incomes) { diff --git a/src/main/java/com/faf223/expensetrackerfaf/security/PersonDetails.java b/src/main/java/com/faf223/expensetrackerfaf/security/PersonDetails.java new file mode 100644 index 0000000..36842c8 --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/security/PersonDetails.java @@ -0,0 +1,59 @@ +package com.faf223.expensetrackerfaf.security; + +import com.faf223.expensetrackerfaf.entities.Role; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Collection; +import java.util.List; + +public class PersonDetails implements UserDetails { + + private final User user; + + @Enumerated(EnumType.STRING) + private Role role; + + public PersonDetails(User user) { + this.user = user; + } + + @Override + public Collection getAuthorities() { + return List.of(new SimpleGrantedAuthority(role.name())); + } + + @Override + public String getPassword() { + return user.getPassword(); + } + + @Override + public String getUsername() { + return user.getUsername(); + } + + @Override + public boolean isAccountNonExpired() { + return true; + } + + @Override + public boolean isAccountNonLocked() { + return true; + } + + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } +} diff --git a/src/main/java/com/faf223/expensetrackerfaf/util/IMoneyTransaction.java b/src/main/java/com/faf223/expensetrackerfaf/util/IMoneyTransaction.java index 2eb4488..7dfe2fd 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/util/IMoneyTransaction.java +++ b/src/main/java/com/faf223/expensetrackerfaf/util/IMoneyTransaction.java @@ -1,7 +1,11 @@ package com.faf223.expensetrackerfaf.util; +import com.faf223.expensetrackerfaf.model.User; + public interface IMoneyTransaction { + User getUser(); + long getUserId(); int getAmount(); String getCategory();