Skip to content

Commit 4c3d31c

Browse files
committed
Squashed commit of the following:
commit aefbaeb Author: Kyoungwoong <kyy980708@gmail.com> Date: Fri Feb 7 07:55:15 2025 +0900 fix: member 필드 추가 commit 8105b7e Author: Kyoungwoong <kyy980708@gmail.com> Date: Fri Feb 7 07:39:36 2025 +0900 fix: member 기본키 값 변경
1 parent c67d8a9 commit 4c3d31c

File tree

24 files changed

+183
-42
lines changed

24 files changed

+183
-42
lines changed

src/main/java/org/myteam/server/board/controller/reponse/BoardResponse.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.myteam.server.board.controller.reponse;
22

33
import java.time.LocalDateTime;
4+
import java.util.UUID;
5+
46
import lombok.Getter;
57
import lombok.Setter;
68
import org.myteam.server.board.domain.Board;
@@ -26,7 +28,7 @@ public class BoardResponse {
2628
/**
2729
* 작성자 id
2830
*/
29-
private Long authorId;
31+
private UUID authorId;
3032
/**
3133
* 작성자 IP
3234
*/
@@ -68,7 +70,7 @@ public BoardResponse(Board board, BoardCount boardCount) {
6870
this.boardType = board.getBoardType();
6971
this.categoryType = board.getCategoryType();
7072
this.boardId = board.getId();
71-
this.authorId = board.getMember().getId();
73+
this.authorId = board.getMember().getPublicId();
7274
this.clientIp = board.getCreatedIp();
7375
this.title = board.getTitle();
7476
this.content = board.getContent();

src/main/java/org/myteam/server/global/security/config/SecurityConfig.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.myteam.server.oauth2.handler.OAuth2LoginFailureHandler;
1818
import org.myteam.server.oauth2.service.CustomOAuth2UserService;
1919
import org.springframework.beans.factory.annotation.Value;
20+
import org.springframework.context.ApplicationEventPublisher;
2021
import org.springframework.context.annotation.Bean;
2122
import org.springframework.context.annotation.Configuration;
2223
import org.springframework.http.HttpMethod;
@@ -104,6 +105,7 @@ public class SecurityConfig {
104105
private final CustomOauth2SuccessHandler customOauth2SuccessHandler;
105106
private final OAuth2LoginFailureHandler oAuth2LoginFailureHandler;
106107
private final RefreshJpaRepository refreshJpaRepository;
108+
private final ApplicationEventPublisher eventPublisher;
107109

108110
@PostConstruct
109111
public void init() {
@@ -145,7 +147,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
145147

146148
// JWT 인증 및 토큰 검증 필터 추가
147149
http.addFilterAt(
148-
new JwtAuthenticationFilter(authenticationManager(), jwtProvider, refreshJpaRepository),
150+
new JwtAuthenticationFilter(authenticationManager(), jwtProvider, refreshJpaRepository, eventPublisher),
149151
UsernamePasswordAuthenticationFilter.class
150152
)
151153
.addFilterAfter(new TokenAuthenticationFilter(jwtProvider), JwtAuthenticationFilter.class);
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.myteam.server.global.security.dto;
2+
3+
import lombok.Getter;
4+
import org.springframework.context.ApplicationEvent;
5+
6+
import java.util.UUID;
7+
8+
@Getter
9+
public class UserLoginEvent extends ApplicationEvent {
10+
private final UUID publicId;
11+
12+
public UserLoginEvent(Object source, UUID publicId) {
13+
super(source);
14+
this.publicId = publicId;
15+
}
16+
}

src/main/java/org/myteam/server/global/security/filter/JwtAuthenticationFilter.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
import org.myteam.server.auth.entity.Refresh;
1010
import org.myteam.server.auth.repository.RefreshJpaRepository;
1111
import org.myteam.server.global.security.dto.CustomUserDetails;
12+
import org.myteam.server.global.security.dto.UserLoginEvent;
1213
import org.myteam.server.global.security.jwt.JwtProvider;
14+
import org.springframework.context.ApplicationEventPublisher;
1315
import org.springframework.http.HttpStatus;
1416
import org.springframework.security.authentication.AuthenticationManager;
1517
import org.springframework.security.authentication.InternalAuthenticationServiceException;
@@ -31,12 +33,17 @@ public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilte
3133
private final AuthenticationManager authenticationManager;
3234
private final JwtProvider jwtProvider;
3335
private final RefreshJpaRepository refreshJpaRepository;
36+
private final ApplicationEventPublisher eventPublisher;
3437

35-
public JwtAuthenticationFilter(AuthenticationManager authenticationManager, JwtProvider jwtProvider, RefreshJpaRepository refreshJpaRepository) {
38+
public JwtAuthenticationFilter(AuthenticationManager authenticationManager,
39+
JwtProvider jwtProvider,
40+
RefreshJpaRepository refreshJpaRepository,
41+
ApplicationEventPublisher eventPublisher) {
3642
setFilterProcessesUrl("/login");
3743
this.authenticationManager = authenticationManager;
3844
this.jwtProvider = jwtProvider;
3945
this.refreshJpaRepository = refreshJpaRepository;
46+
this.eventPublisher = eventPublisher;
4047
}
4148

4249
@Override
@@ -105,6 +112,8 @@ protected void successfulAuthentication(HttpServletRequest request, HttpServletR
105112
response.addHeader(HEADER_AUTHORIZATION, TOKEN_PREFIX + accessToken);
106113
response.setStatus(HttpStatus.OK.value());
107114

115+
eventPublisher.publishEvent(new UserLoginEvent(this, publicId));
116+
108117
log.info("자체 서비스 로그인에 성공하였습니다.");
109118
} catch (InternalAuthenticationServiceException e) {
110119
System.out.println("successfulAuthentication 메서드 에러 발생 : " + e.getMessage());
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.myteam.server.global.security.service;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import lombok.extern.slf4j.Slf4j;
5+
import org.myteam.server.global.exception.ErrorCode;
6+
import org.myteam.server.global.exception.PlayHiveException;
7+
import org.myteam.server.global.security.dto.UserLoginEvent;
8+
import org.myteam.server.member.entity.Member;
9+
import org.myteam.server.member.entity.MemberActivity;
10+
import org.myteam.server.member.repository.MemberActivityRepository;
11+
import org.myteam.server.member.repository.MemberRepository;
12+
import org.springframework.context.event.EventListener;
13+
import org.springframework.stereotype.Service;
14+
import org.springframework.transaction.annotation.Transactional;
15+
16+
import java.util.UUID;
17+
18+
@Slf4j
19+
@Service
20+
@RequiredArgsConstructor
21+
public class VisitEventListener {
22+
23+
private final MemberActivityRepository memberActivityRepository;
24+
25+
@Transactional
26+
@EventListener
27+
public void handleUserLoginEvent(UserLoginEvent event) {
28+
UUID publicId = event.getPublicId();
29+
30+
log.info("handleUserLoginEvent > 방문 횟수 증가: {}", publicId);
31+
32+
MemberActivity activity = memberActivityRepository.findByMemberPublicId(publicId)
33+
.orElseThrow(() -> new PlayHiveException(ErrorCode.USER_NOT_FOUND));
34+
35+
activity.increaseVisitCount();
36+
}
37+
}

src/main/java/org/myteam/server/member/controller/response/MemberResponse.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
@Getter
1414
public class MemberResponse {
15-
private Long id;
1615

1716
private String email; // 계정
1817

@@ -34,7 +33,6 @@ public MemberResponse() {
3433

3534
@Builder
3635
public MemberResponse(final Member member) {
37-
this.id = member.getId();
3836
this.email = member.getEmail();
3937
this.tel = member.getTel();
4038
this.nickname = member.getNickname();

src/main/java/org/myteam/server/member/entity/Member.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,11 @@
3131
@Table(name = "p_members")
3232
@NoArgsConstructor(access = AccessLevel.PROTECTED)
3333
public class Member extends Base {
34+
3435
@Id
35-
@GeneratedValue(strategy = GenerationType.IDENTITY)
36-
private Long id;
36+
@GeneratedValue(generator = "UUID")
37+
@Column(name = "public_id", nullable = false, updatable = false, unique = true, columnDefinition = "BINARY(16)")
38+
private UUID publicId = UUID.randomUUID();
3739

3840
@Column(nullable = false)
3941
private String email; // 계정
@@ -55,16 +57,12 @@ public class Member extends Base {
5557
@Column(name = "type", nullable = false)
5658
private MemberType type = LOCAL;
5759

58-
@Column(name = "public_id", nullable = false, updatable = false, unique = true, columnDefinition = "BINARY(16)")
59-
private UUID publicId = UUID.randomUUID();
60-
6160
@Enumerated(EnumType.STRING)
6261
@Column(name = "status", nullable = false)
6362
private MemberStatus status = PENDING;
6463

6564
@Builder
66-
public Member(Long id, String email, String password, String tel, String nickname, MemberRole role, MemberType type, UUID publicId, MemberStatus status) {
67-
this.id = id;
65+
public Member(String email, String password, String tel, String nickname, MemberRole role, MemberType type, UUID publicId, MemberStatus status) {
6866
this.email = email;
6967
this.password = password;
7068
this.tel = tel;
@@ -125,7 +123,7 @@ public boolean validatePassword(String inputPassword, PasswordEncoder bCryptPass
125123
}
126124

127125
public void confirmMemberEquals(Member member) {
128-
if(!Objects.equals(this.id, member.getId())) {
126+
if(!Objects.equals(this.publicId, member.getPublicId())) {
129127
throw new PlayHiveException(ErrorCode.MEMBER_NOT_EQUALS);
130128
}
131129
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package org.myteam.server.member.entity;
2+
3+
import jakarta.persistence.*;
4+
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
6+
7+
@Entity
8+
@Table(name = "member_activity")
9+
@Getter
10+
@NoArgsConstructor
11+
public class MemberActivity {
12+
13+
@Id
14+
@GeneratedValue(strategy = GenerationType.IDENTITY)
15+
private Long id;
16+
17+
@OneToOne(fetch = FetchType.LAZY)
18+
@JoinColumn(name = "member_id", nullable = false)
19+
private Member member;
20+
21+
@Column(name = "visit_count", nullable = false)
22+
private int visitCount = 0;
23+
24+
@Column(name = "invite_count", nullable = false)
25+
private int inviteCount = 0;
26+
27+
public void increaseVisitCount() {
28+
this.visitCount += 1;
29+
}
30+
31+
public void increaseInviteCount() {
32+
this.inviteCount += 1;
33+
}
34+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.myteam.server.member.repository;
2+
3+
import org.myteam.server.member.entity.MemberActivity;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
import java.util.Optional;
8+
import java.util.UUID;
9+
10+
@Repository
11+
public interface MemberActivityRepository extends JpaRepository<MemberActivity, Long> {
12+
Optional<MemberActivity> findByMemberPublicId(UUID publicId);
13+
}

src/main/java/org/myteam/server/news/newsComment/dto/repository/NewsCommentMemberDto.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@
33
import lombok.Getter;
44
import lombok.NoArgsConstructor;
55

6+
import java.util.UUID;
7+
68
@Getter
79
@NoArgsConstructor
810
public class NewsCommentMemberDto {
9-
private Long id;
11+
private UUID memberPublicId;
1012
private String nickName;
1113

12-
public NewsCommentMemberDto(Long id, String nickName) {
13-
this.id = id;
14+
public NewsCommentMemberDto(UUID memberPublicID, String nickName) {
15+
this.memberPublicId = memberPublicID;
1416
this.nickName = nickName;
1517
}
1618
}

0 commit comments

Comments
 (0)