From 690e29a578c9682c0cbd80c9bf8057315a3843e1 Mon Sep 17 00:00:00 2001 From: Dmitrii Cravcenco Date: Thu, 21 Sep 2023 11:41:53 +0300 Subject: [PATCH 1/2] Add dependency --- pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pom.xml b/pom.xml index e717a1a..dcb0a47 100644 --- a/pom.xml +++ b/pom.xml @@ -27,6 +27,10 @@ test 3.1.2 + + org.springframework.boot + spring-boot-starter-security + From 248982d128c9804535630f6c080ac7383f6a5fc3 Mon Sep 17 00:00:00 2001 From: Dmitrii Cravcenco Date: Thu, 21 Sep 2023 12:44:43 +0300 Subject: [PATCH 2/2] Edit entities, add security package --- .../controllers/MainController.java | 2 +- .../entities/Categories.java | 2 +- .../expensetrackerfaf}/entities/Expense.java | 28 ++++++--- .../expensetrackerfaf/entities/Income.java | 55 +++++++++++++++++ .../expensetrackerfaf}/entities/Role.java | 4 +- .../expensetrackerfaf}/entities/User.java | 17 +++++- .../security/PersonDetails.java | 59 +++++++++++++++++++ .../util/IMoneyTransaction.java | 12 ++++ src/main/java/entities/IMoneyTransaction.java | 9 --- src/main/java/entities/Income.java | 41 ------------- 10 files changed, 165 insertions(+), 64 deletions(-) rename src/main/java/{ => com/faf223/expensetrackerfaf}/entities/Categories.java (95%) rename src/main/java/{ => com/faf223/expensetrackerfaf}/entities/Expense.java (51%) create mode 100644 src/main/java/com/faf223/expensetrackerfaf/entities/Income.java rename src/main/java/{ => com/faf223/expensetrackerfaf}/entities/Role.java (55%) rename src/main/java/{ => com/faf223/expensetrackerfaf}/entities/User.java (82%) create mode 100644 src/main/java/com/faf223/expensetrackerfaf/security/PersonDetails.java create mode 100644 src/main/java/com/faf223/expensetrackerfaf/util/IMoneyTransaction.java delete mode 100644 src/main/java/entities/IMoneyTransaction.java delete mode 100644 src/main/java/entities/Income.java diff --git a/src/main/java/com/faf223/expensetrackerfaf/controllers/MainController.java b/src/main/java/com/faf223/expensetrackerfaf/controllers/MainController.java index fe74c84..e8dd45b 100644 --- a/src/main/java/com/faf223/expensetrackerfaf/controllers/MainController.java +++ b/src/main/java/com/faf223/expensetrackerfaf/controllers/MainController.java @@ -1,6 +1,6 @@ package com.faf223.expensetrackerfaf.controllers; -import entities.User; +import com.faf223.expensetrackerfaf.entities.User; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; diff --git a/src/main/java/entities/Categories.java b/src/main/java/com/faf223/expensetrackerfaf/entities/Categories.java similarity index 95% rename from src/main/java/entities/Categories.java rename to src/main/java/com/faf223/expensetrackerfaf/entities/Categories.java index 43bda11..57c10cb 100644 --- a/src/main/java/entities/Categories.java +++ b/src/main/java/com/faf223/expensetrackerfaf/entities/Categories.java @@ -1,4 +1,4 @@ -package entities; +package com.faf223.expensetrackerfaf.entities; public class Categories { diff --git a/src/main/java/entities/Expense.java b/src/main/java/com/faf223/expensetrackerfaf/entities/Expense.java similarity index 51% rename from src/main/java/entities/Expense.java rename to src/main/java/com/faf223/expensetrackerfaf/entities/Expense.java index c6b2c3b..0aa321b 100644 --- a/src/main/java/entities/Expense.java +++ b/src/main/java/com/faf223/expensetrackerfaf/entities/Expense.java @@ -1,24 +1,38 @@ -package entities; +package com.faf223.expensetrackerfaf.entities; +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 diff --git a/src/main/java/com/faf223/expensetrackerfaf/entities/Income.java b/src/main/java/com/faf223/expensetrackerfaf/entities/Income.java new file mode 100644 index 0000000..e179b1c --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/entities/Income.java @@ -0,0 +1,55 @@ +package com.faf223.expensetrackerfaf.entities; + +import com.faf223.expensetrackerfaf.util.IMoneyTransaction; +import jakarta.persistence.*; + +@Entity +@Table(name = "income") +public class Income implements IMoneyTransaction { + + @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(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 int getAmount() { + return amount; + } + + @Override + public String getCategory() { + return category.getEffectiveName(); + } + + public void setUserId(User user) { + this.user = user; + } + + public void setAmount(int amount) { + this.amount = amount; + } + + public void setCategory(Categories.IncomeCategory category) { + this.category = category; + } +} diff --git a/src/main/java/entities/Role.java b/src/main/java/com/faf223/expensetrackerfaf/entities/Role.java similarity index 55% rename from src/main/java/entities/Role.java rename to src/main/java/com/faf223/expensetrackerfaf/entities/Role.java index 258e49e..8b64553 100644 --- a/src/main/java/entities/Role.java +++ b/src/main/java/com/faf223/expensetrackerfaf/entities/Role.java @@ -1,7 +1,5 @@ -package entities; +package com.faf223.expensetrackerfaf.entities; public enum Role { - UNREGISTERED, REGISTERED, ADMIN; - } diff --git a/src/main/java/entities/User.java b/src/main/java/com/faf223/expensetrackerfaf/entities/User.java similarity index 82% rename from src/main/java/entities/User.java rename to src/main/java/com/faf223/expensetrackerfaf/entities/User.java index 37f571a..2bb8103 100644 --- a/src/main/java/entities/User.java +++ b/src/main/java/com/faf223/expensetrackerfaf/entities/User.java @@ -1,12 +1,25 @@ -package entities; +package com.faf223.expensetrackerfaf.entities; + +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 new file mode 100644 index 0000000..f32e309 --- /dev/null +++ b/src/main/java/com/faf223/expensetrackerfaf/util/IMoneyTransaction.java @@ -0,0 +1,12 @@ +package com.faf223.expensetrackerfaf.util; + +import com.faf223.expensetrackerfaf.entities.User; + +public interface IMoneyTransaction { + + User getUser(); + + int getAmount(); + String getCategory(); + +} diff --git a/src/main/java/entities/IMoneyTransaction.java b/src/main/java/entities/IMoneyTransaction.java deleted file mode 100644 index 70b92d5..0000000 --- a/src/main/java/entities/IMoneyTransaction.java +++ /dev/null @@ -1,9 +0,0 @@ -package entities; - -public interface IMoneyTransaction { - - long getUserId(); - int getAmount(); - String getCategory(); - -} diff --git a/src/main/java/entities/Income.java b/src/main/java/entities/Income.java deleted file mode 100644 index 31b5d67..0000000 --- a/src/main/java/entities/Income.java +++ /dev/null @@ -1,41 +0,0 @@ -package entities; - -public class Income implements IMoneyTransaction { - - private long userId; - private int amount; - private Categories.IncomeCategory category; - - public Income(long userId, int amount, Categories.IncomeCategory category) { - this.userId = userId; - this.amount = amount; - this.category = category; - } - - @Override - public long getUserId() { - return userId; - } - - @Override - public int getAmount() { - return amount; - } - - @Override - public String getCategory() { - return category.getEffectiveName(); - } - - public void setUserId(long userId) { - this.userId = userId; - } - - public void setAmount(int amount) { - this.amount = amount; - } - - public void setCategory(Categories.IncomeCategory category) { - this.category = category; - } -}