diff --git a/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/ERole.java b/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/ERole.java new file mode 100644 index 0000000..a429fec --- /dev/null +++ b/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/ERole.java @@ -0,0 +1,6 @@ +package com.hakimfauzi23.boilerplatespringsecurity.modules.auth.data; + +public enum ERole { + ROLE_USER, + ROLE_ADMIN +} diff --git a/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/Role.java b/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/Role.java new file mode 100644 index 0000000..4c7ff3c --- /dev/null +++ b/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/Role.java @@ -0,0 +1,39 @@ +package com.hakimfauzi23.boilerplatespringsecurity.modules.auth.data; + +import jakarta.persistence.*; + +@Entity +@Table(name = "roles") +public class Role { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Enumerated(EnumType.STRING) + @Column(length = 20) + private ERole name; + + public Role() { + } + + public Role(ERole name) { + this.name = name; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public ERole getName() { + return name; + } + + public void setName(ERole name) { + this.name = name; + } +} diff --git a/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/User.java b/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/User.java new file mode 100644 index 0000000..e0076c3 --- /dev/null +++ b/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/User.java @@ -0,0 +1,88 @@ +package com.hakimfauzi23.boilerplatespringsecurity.modules.auth.data; + +import jakarta.persistence.*; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +import java.util.HashSet; +import java.util.Set; + +@Entity +@Table(name = "users", + uniqueConstraints = { + @UniqueConstraint(columnNames = "username"), + @UniqueConstraint(columnNames = "email") + }) +public class User { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @NotBlank + @Size(max = 20) + private String username; + + @NotBlank + @Size(max = 50) + private String email; + + @NotBlank + @Size(max = 150) + private String password; + + @ManyToMany(fetch = FetchType.LAZY) + @JoinTable(name = "user_roles", + joinColumns = @JoinColumn(name = "user_id"), + inverseJoinColumns = @JoinColumn(name = "role_id")) + private Set roles = new HashSet<>(); + + public User() { + } + + public User(String username, String email, String password) { + this.username = username; + this.email = email; + this.password = password; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public Set getRoles() { + return roles; + } + + public void setRoles(Set roles) { + this.roles = roles; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } +} diff --git a/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/payload/request/LoginRequest.java b/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/payload/request/LoginRequest.java new file mode 100644 index 0000000..e7830c9 --- /dev/null +++ b/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/payload/request/LoginRequest.java @@ -0,0 +1,27 @@ +package com.hakimfauzi23.boilerplatespringsecurity.modules.auth.data.payload.request; + +import jakarta.validation.constraints.NotBlank; + +public class LoginRequest { + @NotBlank + private String username; + + @NotBlank + private String password; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/payload/request/SignupRequest.java b/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/payload/request/SignupRequest.java new file mode 100644 index 0000000..4c0cc59 --- /dev/null +++ b/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/payload/request/SignupRequest.java @@ -0,0 +1,56 @@ +package com.hakimfauzi23.boilerplatespringsecurity.modules.auth.data.payload.request; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +import java.util.Set; + +public class SignupRequest { + @NotBlank + @Size(min = 3, max = 20) + private String username; + + @NotBlank + @Size(max = 50) + @Email + private String email; + + private Set role; + + @NotBlank + @Size(min = 6, max = 40) + private String password; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public Set getRole() { + return this.role; + } + + public void setRole(Set role) { + this.role = role; + } +} diff --git a/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/payload/response/MessageResponse.java b/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/payload/response/MessageResponse.java new file mode 100644 index 0000000..4b19eee --- /dev/null +++ b/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/payload/response/MessageResponse.java @@ -0,0 +1,17 @@ +package com.hakimfauzi23.boilerplatespringsecurity.modules.auth.data.payload.response; + +public class MessageResponse { + private String message; + + public MessageResponse(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/payload/response/UserInfoResponse.java b/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/payload/response/UserInfoResponse.java new file mode 100644 index 0000000..3d7c0bb --- /dev/null +++ b/src/main/java/com/hakimfauzi23/boilerplatespringsecurity/modules/auth/data/payload/response/UserInfoResponse.java @@ -0,0 +1,45 @@ +package com.hakimfauzi23.boilerplatespringsecurity.modules.auth.data.payload.response; + +import java.util.List; + +public class UserInfoResponse { + private Long id; + private String username; + private String email; + private List roles; + + public UserInfoResponse(Long id, String username, String email, List roles) { + this.id = id; + this.username = username; + this.email = email; + this.roles = roles; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public List getRoles() { + return roles; + } +}