From 909e51cc4ccfa94d6a5831930ce29babae247c28 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 12 Jun 2025 17:40:57 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20member=20=EA=B8=B0=EB=8A=A5=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20-=20=EB=A1=9C=EA=B7=B8=EC=9D=B8,=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=95=84=EC=9B=83=20=ED=86=A0=ED=81=B0=20=C3=AC=C2=82?= =?UTF-8?q?,=20=ED=9A=8C=EC=9B=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 로그아웃 토큰 ì - 로그그 아웃시 블랙리스트 토큰 적재 과정 삭제, 토큰 삭제만 처리하도록 수정 --- .../controller/RecommendationController.java | 6 ++--- .../src/main/resources/application.yml | 7 ------ .../member/dto/RegisterRequest.java | 6 ++--- .../won/smarketing/member/entity/Member.java | 4 ++-- .../member/service/AuthServiceImpl.java | 23 ++++++------------- .../member/src/main/resources/data.sql | 18 +++++++++++++++ 6 files changed, 33 insertions(+), 31 deletions(-) create mode 100644 smarketing-java/member/src/main/resources/data.sql diff --git a/smarketing-java/ai-recommend/src/main/java/com/won/smarketing/recommend/presentation/controller/RecommendationController.java b/smarketing-java/ai-recommend/src/main/java/com/won/smarketing/recommend/presentation/controller/RecommendationController.java index 89912d3..0c8c2d8 100644 --- a/smarketing-java/ai-recommend/src/main/java/com/won/smarketing/recommend/presentation/controller/RecommendationController.java +++ b/smarketing-java/ai-recommend/src/main/java/com/won/smarketing/recommend/presentation/controller/RecommendationController.java @@ -52,11 +52,11 @@ public class RecommendationController { public ResponseEntity>> getMarketingTipHistory( @Parameter(description = "매장 ID") @RequestParam Long storeId, Pageable pageable) { - + log.info("마케팅 팁 이력 조회: storeId={}, page={}", storeId, pageable.getPageNumber()); - + Page response = marketingTipUseCase.getMarketingTipHistory(storeId, pageable); - + return ResponseEntity.ok(ApiResponse.success(response)); } diff --git a/smarketing-java/ai-recommend/src/main/resources/application.yml b/smarketing-java/ai-recommend/src/main/resources/application.yml index 018f81b..1dc6f65 100644 --- a/smarketing-java/ai-recommend/src/main/resources/application.yml +++ b/smarketing-java/ai-recommend/src/main/resources/application.yml @@ -42,13 +42,6 @@ management: health: show-details: always -springdoc: - swagger-ui: - path: /swagger-ui.html - operations-sorter: method - api-docs: - path: /api-docs - logging: level: com.won.smarketing.recommend: ${LOG_LEVEL:DEBUG} diff --git a/smarketing-java/member/src/main/java/com/won/smarketing/member/dto/RegisterRequest.java b/smarketing-java/member/src/main/java/com/won/smarketing/member/dto/RegisterRequest.java index 8543029..b0cad33 100644 --- a/smarketing-java/member/src/main/java/com/won/smarketing/member/dto/RegisterRequest.java +++ b/smarketing-java/member/src/main/java/com/won/smarketing/member/dto/RegisterRequest.java @@ -36,9 +36,9 @@ public class RegisterRequest { @NotBlank(message = "이름은 필수입니다") @Size(max = 50, message = "이름은 50자 이하여야 합니다") private String name; - - @Schema(description = "사업자등록번호", example = "123-45-67890") - @Pattern(regexp = "^\\d{3}-\\d{2}-\\d{5}$", message = "사업자등록번호 형식이 올바르지 않습니다 (000-00-00000)") + + @Schema(description = "사업자등록번호", example = "1234567890") + @Pattern(regexp = "^\\d{10}$", message = "사업자등록번호는 10자리 숫자여야 합니다") private String businessNumber; @Schema(description = "이메일", example = "user@example.com", required = true) diff --git a/smarketing-java/member/src/main/java/com/won/smarketing/member/entity/Member.java b/smarketing-java/member/src/main/java/com/won/smarketing/member/entity/Member.java index 0dd68e2..89bb592 100644 --- a/smarketing-java/member/src/main/java/com/won/smarketing/member/entity/Member.java +++ b/smarketing-java/member/src/main/java/com/won/smarketing/member/entity/Member.java @@ -26,7 +26,7 @@ public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "id") + @Column(name = "member_id") private Long id; @Column(name = "user_id", nullable = false, unique = true, length = 50) @@ -38,7 +38,7 @@ public class Member { @Column(name = "name", nullable = false, length = 50) private String name; - @Column(name = "business_number", length = 12) + @Column(name = "business_number", length = 15, unique = true) private String businessNumber; @Column(name = "email", nullable = false, unique = true, length = 100) diff --git a/smarketing-java/member/src/main/java/com/won/smarketing/member/service/AuthServiceImpl.java b/smarketing-java/member/src/main/java/com/won/smarketing/member/service/AuthServiceImpl.java index c01646f..694e93a 100644 --- a/smarketing-java/member/src/main/java/com/won/smarketing/member/service/AuthServiceImpl.java +++ b/smarketing-java/member/src/main/java/com/won/smarketing/member/service/AuthServiceImpl.java @@ -52,6 +52,9 @@ public class AuthServiceImpl implements AuthService { // 패스워드 검증 if (!passwordEncoder.matches(request.getPassword(), member.getPassword())) { + System.out.println(passwordEncoder.encode(request.getPassword())); + System.out.println(passwordEncoder.encode(member.getPassword())); + throw new BusinessException(ErrorCode.INVALID_PASSWORD); } @@ -59,6 +62,8 @@ public class AuthServiceImpl implements AuthService { String accessToken = jwtTokenProvider.generateAccessToken(member.getUserId()); String refreshToken = jwtTokenProvider.generateRefreshToken(member.getUserId()); + log.info("{} access token 발급: {}", request.getUserId(), accessToken); + // 리프레시 토큰을 Redis에 저장 (7일) redisTemplate.opsForValue().set( REFRESH_TOKEN_PREFIX + member.getUserId(), @@ -93,17 +98,8 @@ public class AuthServiceImpl implements AuthService { if (jwtTokenProvider.validateToken(refreshToken)) { String userId = jwtTokenProvider.getUserIdFromToken(refreshToken); - // Redis에서 리프레시 토큰 삭제 redisTemplate.delete(REFRESH_TOKEN_PREFIX + userId); - // 리프레시 토큰을 블랙리스트에 추가 - redisTemplate.opsForValue().set( - BLACKLIST_PREFIX + refreshToken, - "logout", - 7, - TimeUnit.DAYS - ); - log.info("로그아웃 완료: {}", userId); } } catch (Exception ex) { @@ -156,13 +152,8 @@ public class AuthServiceImpl implements AuthService { TimeUnit.DAYS ); - // 기존 리프레시 토큰을 블랙리스트에 추가 - redisTemplate.opsForValue().set( - BLACKLIST_PREFIX + refreshToken, - "refreshed", - 7, - TimeUnit.DAYS - ); + // 기존 리프레시 토큰 삭제 + redisTemplate.delete(REFRESH_TOKEN_PREFIX + userId); log.info("토큰 갱신 완료: {}", userId); diff --git a/smarketing-java/member/src/main/resources/data.sql b/smarketing-java/member/src/main/resources/data.sql new file mode 100644 index 0000000..8404deb --- /dev/null +++ b/smarketing-java/member/src/main/resources/data.sql @@ -0,0 +1,18 @@ +INSERT INTO members (member_id, user_id, password, name, business_number, email, created_at, updated_at) +VALUES + (DEFAULT, 'testuser1', '$2a$10$27tA6hwHt4N94WzZm/xqv.smgDi3c6cVp.Pu8gVyfqlEdwTPI8r7y', '김소상', '123-45-67890', 'test1@smarketing.com', NOW(), NOW()), + (DEFAULT, 'testuser2', '$2a$10$27tA6hwHt4N94WzZm/xqv.smgDi3c6cVp.Pu8gVyfqlEdwTPI8r7y', '이점주', '234-56-78901', 'test2@smarketing.com', NOW(), NOW()), + (DEFAULT, 'testuser3', '$2a$10$27tA6hwHt4N94WzZm/xqv.smgDi3c6cVp.Pu8gVyfqlEdwTPI8r7y', '박카페', '345-67-89012', 'test3@smarketing.com', NOW(), NOW()), + (DEFAULT, 'cafeowner1', '$2a$10$27tA6hwHt4N94WzZm/xqv.smgDi3c6cVp.Pu8gVyfqlEdwTPI8r7y', '최카페', '456-78-90123', 'cafe@smarketing.com', NOW(), NOW()), + (DEFAULT, 'restaurant1', '$2a$10$27tA6hwHt4N94WzZm/xqv.smgDi3c6cVp.Pu8gVyfqlEdwTPI8r7y', '정식당', '567-89-01234', 'restaurant@smarketing.com', NOW(), NOW()) +ON CONFLICT (user_id) DO NOTHING; + +-- 이메일 중복 방지를 위한 추가 체크 +INSERT INTO members (member_id, user_id, password, name, business_number, email, created_at, updated_at) +VALUES + (DEFAULT, 'bakery1', '$2a$10$27tA6hwHt4N94WzZm/xqv.smgDi3c6cVp.Pu8gVyfqlEdwTPI8r7y', '김베이커리', '678-90-12345', 'bakery@smarketing.com', NOW(), NOW()), + (DEFAULT, 'chicken1', '$2a$10$27tA6hwHt4N94WzZm/xqv.smgDi3c6cVp.Pu8gVyfqlEdwTPI8r7y', '한치킨', '789-01-23456', 'chicken@smarketing.com', NOW(), NOW()), + (DEFAULT, 'pizza1', '$2a$10$27tA6hwHt4N94WzZm/xqv.smgDi3c6cVp.Pu8gVyfqlEdwTPI8r7y', '이피자', '890-12-34567', 'pizza@smarketing.com', NOW(), NOW()), + (DEFAULT, 'dessert1', '$2a$10$27tA6hwHt4N94WzZm/xqv.smgDi3c6cVp.Pu8gVyfqlEdwTPI8r7y', '달디저트', '901-23-45678', 'dessert@smarketing.com', NOW(), NOW()), + (DEFAULT, 'beauty1', '$2a$10$27tA6hwHt4N94WzZm/xqv.smgDi3c6cVp.Pu8gVyfqlEdwTPI8r7y', '미뷰티샵', '012-34-56789', 'beauty@smarketing.com', NOW(), NOW()) +ON CONFLICT (user_id) DO NOTHING;