Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit c6448eb

Browse files
authoredJan 7, 2025
[BE] 멤버 도메인 미사용 컬럼 삭제 및 필드명 통일 (#956)
* refactor: 사용하지 않는 컬럼 삭제 및 더미 멤버 상수화 * test: fixture 관련 클래스 패키지 이동 * refactor: Entity 도메인 분리 * test: Jsoup fake 객체로 테스팅 * test: 테스트 SSE timeout Duration 500ms -> 1ms
1 parent dcc9270 commit c6448eb

36 files changed

+622
-763
lines changed
 

‎backend/src/main/java/site/coduo/member/client/dto/GithubUserResponse.java

+6-8
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,20 @@
22

33
import com.fasterxml.jackson.annotation.JsonProperty;
44

5-
import site.coduo.member.domain.Member;
5+
import site.coduo.member.domain.repository.MemberEntity;
66
import site.coduo.member.infrastructure.http.Bearer;
77

88
public record GithubUserResponse(@JsonProperty(value = "id") String userId,
99
@JsonProperty(value = "login") String longin,
1010
@JsonProperty(value = "avatar_url") String avatarUrl
1111
) {
1212

13-
public Member toDomain(final Bearer accessToken, final String username) {
14-
return Member.builder()
15-
.profileImage(avatarUrl)
16-
.userId(userId)
17-
.loginId(longin)
13+
public MemberEntity toDomain(final Bearer accessToken, final String username) {
14+
return MemberEntity.builder()
15+
.providerUserId(userId)
16+
.providerLoginId(longin)
1817
.username(username)
19-
.accessToken(accessToken.getCredential())
18+
.providerAccessToken(accessToken.getCredential())
2019
.build();
2120
}
22-
2321
}

‎backend/src/main/java/site/coduo/member/controller/MemberController.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
import lombok.RequiredArgsConstructor;
1313
import site.coduo.member.controller.docs.MemberControllerDocs;
14-
import site.coduo.member.domain.Member;
14+
import site.coduo.member.domain.repository.MemberEntity;
1515
import site.coduo.member.service.MemberService;
1616
import site.coduo.member.service.dto.member.MemberNameResponse;
1717
import site.coduo.member.service.dto.member.MemberReadResponse;
@@ -35,8 +35,8 @@ public ResponseEntity<MemberNameResponse> existsMember(
3535
@RequestParam("user_id") String userId
3636
) {
3737

38-
final Member member = memberService.checkAndFindMember(token, userId);
39-
final MemberNameResponse response = new MemberNameResponse(member.getUsername());
38+
final MemberEntity memberEntity = memberService.checkAndFindMember(token, userId);
39+
final MemberNameResponse response = new MemberNameResponse(memberEntity.getUsername());
4040

4141
return ResponseEntity.ok(response);
4242
}
Original file line numberDiff line numberDiff line change
@@ -1,104 +1,23 @@
11
package site.coduo.member.domain;
22

33
import java.time.LocalDateTime;
4-
import java.util.Objects;
54

6-
import jakarta.persistence.Column;
7-
import jakarta.persistence.Entity;
8-
import jakarta.persistence.GeneratedValue;
9-
import jakarta.persistence.GenerationType;
10-
import jakarta.persistence.Id;
11-
import jakarta.persistence.Table;
12-
13-
import org.springframework.format.annotation.DateTimeFormat;
14-
15-
import lombok.AccessLevel;
165
import lombok.Builder;
17-
import lombok.Getter;
18-
import lombok.NoArgsConstructor;
19-
import site.coduo.common.infrastructure.audit.entity.BaseTimeEntity;
20-
21-
@Getter
22-
@NoArgsConstructor(access = AccessLevel.PROTECTED)
23-
@Table(name = "MEMBER")
24-
@Entity
25-
public class Member extends BaseTimeEntity {
26-
27-
@Id
28-
@GeneratedValue(strategy = GenerationType.IDENTITY)
29-
@Column(name = "ID", nullable = false)
30-
private Long id;
31-
32-
@Column(name = "ACCESS_TOKEN", nullable = false, unique = true)
33-
private String accessToken;
346

35-
@Column(name = "PROVIDER_LOGIN_ID", nullable = false)
36-
private String loginId;
7+
public class Member {
378

38-
@Column(name = "PROVIDER_USER_ID", nullable = false, unique = true)
39-
private String userId;
40-
41-
@Column(name = "PROFILE_IMAGE")
42-
private String profileImage;
43-
44-
@Column(name = "USER_NAME")
45-
private String username;
46-
47-
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
48-
@Column(name = "DELETED_AT")
49-
private LocalDateTime deletedAt;
9+
private final String accessToken;
10+
private final String loginId;
11+
private final String username;
12+
private final LocalDateTime deletedAt;
5013

5114
@Builder
52-
private Member(final String accessToken, final String loginId, final String userId, final String profileImage,
53-
final String username, final LocalDateTime deletedAt) {
15+
private Member(final String accessToken, final String loginId, final String username,
16+
final LocalDateTime deletedAt) {
5417
this.accessToken = accessToken;
5518
this.loginId = loginId;
56-
this.userId = userId;
57-
this.profileImage = profileImage;
5819
this.username = username;
5920
this.deletedAt = deletedAt;
6021
}
6122

62-
public void update(final Member other) {
63-
this.accessToken = other.accessToken;
64-
this.loginId = other.loginId;
65-
this.userId = other.userId;
66-
this.profileImage = other.profileImage;
67-
this.username = other.username;
68-
this.deletedAt = other.deletedAt;
69-
}
70-
71-
public void delete() {
72-
this.deletedAt = LocalDateTime.now();
73-
}
74-
75-
@Override
76-
public boolean equals(final Object o) {
77-
if (this == o) {
78-
return true;
79-
}
80-
if (o == null || getClass() != o.getClass()) {
81-
return false;
82-
}
83-
final Member member = (Member) o;
84-
return Objects.equals(id, member.id);
85-
}
86-
87-
@Override
88-
public int hashCode() {
89-
return Objects.hash(id);
90-
}
91-
92-
@Override
93-
public String toString() {
94-
return "Member{" +
95-
"id=" + id +
96-
", accessToken='" + accessToken + '\'' +
97-
", loginId='" + loginId + '\'' +
98-
", userId='" + userId + '\'' +
99-
", profileImage='" + profileImage + '\'' +
100-
", username='" + username + '\'' +
101-
", deletedAt=" + deletedAt +
102-
'}';
103-
}
10423
}
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
package site.coduo.member.domain;
22

33
import lombok.AllArgsConstructor;
4+
import site.coduo.member.domain.repository.MemberEntity;
45

56
@AllArgsConstructor
67
public class MemberUpdate {
78

8-
private final Member member;
9+
private final MemberEntity memberEntity;
910

1011
public void update(final String accessToken) {
11-
final Member change = Member.builder()
12-
.profileImage(member.getProfileImage())
13-
.loginId(member.getLoginId())
14-
.username(member.getUsername())
15-
.userId(member.getUserId())
16-
.deletedAt(member.getDeletedAt())
17-
.accessToken(accessToken)
12+
final MemberEntity change = MemberEntity.builder()
13+
.providerLoginId(memberEntity.getProviderLoginId())
14+
.username(memberEntity.getUsername())
15+
.providerUserId(memberEntity.getProviderUserId())
16+
.deletedAt(memberEntity.getDeletedAt())
17+
.providerAccessToken(accessToken)
1818
.build();
1919

20-
member.update(change);
20+
memberEntity.update(change);
2121
}
2222
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package site.coduo.member.domain.repository;
2+
3+
import java.time.LocalDateTime;
4+
import java.util.Objects;
5+
6+
import jakarta.persistence.Column;
7+
import jakarta.persistence.Entity;
8+
import jakarta.persistence.GeneratedValue;
9+
import jakarta.persistence.GenerationType;
10+
import jakarta.persistence.Id;
11+
import jakarta.persistence.Table;
12+
13+
import org.springframework.format.annotation.DateTimeFormat;
14+
15+
import lombok.AccessLevel;
16+
import lombok.Builder;
17+
import lombok.Getter;
18+
import lombok.NoArgsConstructor;
19+
import site.coduo.common.infrastructure.audit.entity.BaseTimeEntity;
20+
21+
@Getter
22+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
23+
@Table(name = "MEMBER")
24+
@Entity
25+
public class MemberEntity extends BaseTimeEntity {
26+
27+
@Id
28+
@GeneratedValue(strategy = GenerationType.IDENTITY)
29+
@Column(name = "ID", nullable = false)
30+
private Long id;
31+
32+
@Column(name = "PROVIDER_ACCESS_TOKEN", nullable = false, unique = true)
33+
private String providerAccessToken;
34+
35+
@Column(name = "PROVIDER_LOGIN_ID", nullable = false)
36+
private String providerLoginId;
37+
38+
@Column(name = "PROVIDER_USER_ID", nullable = false, unique = true)
39+
private String providerUserId;
40+
41+
@Column(name = "USER_NAME")
42+
private String username;
43+
44+
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
45+
@Column(name = "DELETED_AT")
46+
private LocalDateTime deletedAt;
47+
48+
@Builder
49+
private MemberEntity(final String providerAccessToken,
50+
final String providerLoginId,
51+
final String providerUserId,
52+
final String username,
53+
final LocalDateTime deletedAt) {
54+
this.providerAccessToken = providerAccessToken;
55+
this.providerLoginId = providerLoginId;
56+
this.providerUserId = providerUserId;
57+
this.username = username;
58+
this.deletedAt = deletedAt;
59+
}
60+
61+
public void update(final MemberEntity other) {
62+
this.providerAccessToken = other.providerAccessToken;
63+
this.providerLoginId = other.providerLoginId;
64+
this.providerUserId = other.providerUserId;
65+
this.username = other.username;
66+
this.deletedAt = other.deletedAt;
67+
}
68+
69+
public void delete() {
70+
this.deletedAt = LocalDateTime.now();
71+
}
72+
73+
@Override
74+
public boolean equals(final Object o) {
75+
if (this == o) {
76+
return true;
77+
}
78+
if (o == null || getClass() != o.getClass()) {
79+
return false;
80+
}
81+
final MemberEntity memberEntity = (MemberEntity) o;
82+
return Objects.equals(id, memberEntity.id);
83+
}
84+
85+
@Override
86+
public int hashCode() {
87+
return Objects.hash(id);
88+
}
89+
90+
@Override
91+
public String toString() {
92+
return "Member{" +
93+
"id=" + id +
94+
", providerAccessToken='" + providerAccessToken + '\'' +
95+
", providerLoginId='" + providerLoginId + '\'' +
96+
", providerUserId='" + providerUserId + '\'' +
97+
", username='" + username + '\'' +
98+
", deletedAt=" + deletedAt +
99+
'}';
100+
}
101+
}

‎backend/src/main/java/site/coduo/member/domain/repository/MemberRepository.java

+10-12
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,31 @@
55

66
import org.springframework.data.jpa.repository.JpaRepository;
77

8-
import site.coduo.member.domain.Member;
98
import site.coduo.member.exception.MemberNotFoundException;
109

11-
public interface MemberRepository extends JpaRepository<Member, Long> {
10+
public interface MemberRepository extends JpaRepository<MemberEntity, Long> {
1211

13-
Optional<Member> findByUserIdAndDeletedAtIsNull(String userId);
12+
Optional<MemberEntity> findByProviderUserIdAndDeletedAtIsNull(String userId);
1413

15-
Optional<Member> findByLoginIdAndDeletedAtIsNull(String loginId);
14+
Optional<MemberEntity> findByProviderLoginIdAndDeletedAtIsNull(String loginId);
1615

17-
List<Member> findByDeletedAtIsNull();
16+
List<MemberEntity> findByDeletedAtIsNull();
1817

1918
@Override
20-
default List<Member> findAll() {
19+
default List<MemberEntity> findAll() {
2120
return findByDeletedAtIsNull();
2221
}
2322

24-
default Member fetchByUserId(final String userId) {
23+
default MemberEntity fetchByUserId(final String userId) {
2524

26-
return findByUserIdAndDeletedAtIsNull(userId)
25+
return findByProviderUserIdAndDeletedAtIsNull(userId)
2726
.orElseThrow(() -> new MemberNotFoundException(String.format("%s는(은) 찾을 수 없는 회원 아이디입니다.", userId)));
2827
}
2928

30-
default Member fetchByLoginId(final String loginId) {
31-
32-
return findByLoginIdAndDeletedAtIsNull(loginId)
29+
default MemberEntity fetchByProviderLoginId(final String loginId) {
30+
return findByProviderLoginIdAndDeletedAtIsNull(loginId)
3331
.orElseThrow(() -> new MemberNotFoundException(String.format("%s는(은) 찾을 수 없는 회원입니다.", loginId)));
3432
}
3533

36-
boolean existsByUserIdAndDeletedAtIsNull(String userId);
34+
boolean existsByProviderUserIdAndDeletedAtIsNull(String userId);
3735
}

‎backend/src/main/java/site/coduo/member/service/AuthService.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ public SignInServiceResponse createSignInToken(final String encryptedAccessToken
2626
final String accessToken = jwtProvider.extractSubject(encryptedAccessToken);
2727
final GithubUserResponse userResponse = githubApiClient.getUser(new GithubUserRequest(accessToken));
2828

29-
memberRepository.findByUserIdAndDeletedAtIsNull(userResponse.userId())
29+
memberRepository.findByProviderUserIdAndDeletedAtIsNull(userResponse.userId())
3030
.ifPresent(member -> new MemberUpdate(member).update(accessToken));
3131
final String signInToken = jwtProvider.sign(userResponse.userId());
3232

33-
return new SignInServiceResponse(memberRepository.existsByUserIdAndDeletedAtIsNull(userResponse.userId()), signInToken);
33+
return new SignInServiceResponse(memberRepository.existsByProviderUserIdAndDeletedAtIsNull(userResponse.userId()), signInToken);
3434
}
3535

3636
public boolean isSignedIn(final String signInToken) {

0 commit comments

Comments
 (0)
Please sign in to comment.