-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUser.java
More file actions
128 lines (116 loc) ยท 4.98 KB
/
Copy pathUser.java
File metadata and controls
128 lines (116 loc) ยท 4.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package ssu.eatssu.domain.user.entity;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.jetbrains.annotations.NotNull;
import ssu.eatssu.domain.auth.entity.OAuthProvider;
import ssu.eatssu.domain.inquiry.entity.Inquiry;
import ssu.eatssu.domain.partnership.entity.PartnershipLike;
import ssu.eatssu.domain.review.entity.Report;
import ssu.eatssu.domain.review.entity.Review;
import ssu.eatssu.domain.review.entity.ReviewLike;
import ssu.eatssu.domain.user.department.entity.Department;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class User extends BaseTimeEntity {
@OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE
, CascadeType.REFRESH})
private final List<Review> reviews = new ArrayList<>();
@OneToMany(mappedBy = "user", cascade = {CascadeType.ALL})
private final List<Report> reviewReports = new ArrayList<>();
@OneToMany(mappedBy = "user", cascade = {CascadeType.ALL})
private final List<Inquiry> userInquiries = new ArrayList<>();
@OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true)
private final List<ReviewLike> reviewLikes = new ArrayList<>();
@OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true)
private final List<PartnershipLike> partnershipLikes = new ArrayList<>();
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long id;
@Enumerated(EnumType.STRING)
private Role role;
private String email;
private String nickname;
@Enumerated(EnumType.STRING)
private OAuthProvider provider;
private String providerId;
private String credentials;
@Enumerated(EnumType.STRING)
private UserStatus status;
@Enumerated(EnumType.STRING)
private DeviceType deviceType;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "department_id")
private Department department;
/**
* Oauth ํ์๊ฐ์
์ฉ ์์ฑ์
*/
private User(@NotNull String email, String nickname, @NotNull Role role, @NotNull OAuthProvider provider,
@NotNull String providerId, @NotNull UserStatus status, @NotNull String credentials, DeviceType deviceType) {
this.email = email;
this.nickname = nickname;
this.role = role;
this.provider = provider;
this.providerId = providerId;
this.status = status;
this.credentials = credentials;
this.deviceType = deviceType;
}
// TODO : ํ์ ๊ฐ์
V2 ๋ง์ด๊ทธ๋ ์ด์
์ดํ ์ญ์ .
// ๊ธฐ๋ณธ ์์ฑ์ : DeviceType์ Null๋ก ๋ฐ๊ณ ์๋๋ฐ ๋ง์ด๊ทธ๋ ์ด์
์ดํ ๊ธฐ๋ณธ ์์ฑ์๋ NotNull ๋ถ์ด๊ธฐ.
// admin ์ ์ ํํ ๋ฆฌ : ์ฌ๊ธฐ๋ null ๋ฃ๋ ๋ถ๋ถ ๋ฐ๊ฟ์ฃผ๊ธฐ.
/**
* <--Static Factory Method-->
* Oauth ํ์๊ฐ์
*/
public static User create(@NotNull String email, @NotNull String nickname, @NotNull OAuthProvider provider,
String providerId,
String credentials) {
return new User(email, nickname, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials, null);
}
/**
* <--Static Factory Method-->
* Oauth ํ์๊ฐ์
V2
*/
public static User createV2(@NotNull String email, @NotNull String nickname, @NotNull OAuthProvider provider,
String providerId,
String credentials,
DeviceType deviceType) {
return new User(email, nickname, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials, deviceType);
}
/**
* <--Static Factory Method-->
* admin ํ์๊ฐ์
* Role ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ธํ
ํ ์์
*/
public static User adminJoin(@NotNull String loginId, @NotNull String credentials) {
return new User(loginId, null, Role.USER, OAuthProvider.EATSSU, loginId, UserStatus.INACTIVE, credentials, null);
}
public void updateNickname(@NotNull String nickname) {
this.nickname = nickname;
}
public void updateEmail(String email) {
this.email = email;
}
public void updateDepartment(Department department) {
this.department = department;
}
// ํ์ ๊ฐ์
v2 ๋ง์ด๊ทธ๋ ์ด์
์ ์ํ ๋ฉ์๋ (์๋๋ ๊ฐ์
์ DeviceType์ ๋ฐ์์ผ ํฉ๋๋ค.)
public void updateDeviceType(DeviceType deviceType) { this.deviceType = deviceType; }
}