Skip to content

Commit 524ee8a

Browse files
v1.0.1: release 1차 운영 패치 (#56)
* chore: 불필요한 출력문 제거 * chore: redis를 신규로 띄우는 경우 포트 설정 * chore: 문법오류 수정 * feat: define the user authentication API swagger specification * feat: add kakao unsubscribe API request * feat: add kakao unsubscribe API controller and swagger spec * feat: add exception handling and retry logic for Kakao member information retrieving api * refactor: modify Kakao membership withdrawal API UserAuthHandler class * feat: invalidate kakao access token * chore: Update environment variables * refactor: Modify logout and member withdrawal controller and reflect changes in Swagger * feat: Add all possible errors that may occur in Swagger specs * fix: 회원탈퇴 과정에서 카카오 액세스 토큰 무효화 과정 삭제 * refactor: 카카오 서버 API 관련 클래스 디렉토리 및 이름 변경 * refactor: 카카오 관련 토큰 무효화 메서드명 변경 * refactor: Added Kakao server error handling * refactor: KakaoUserInfoService에서 애플 관련 로직 UserAuthService 이동 * refactor: 카카오 서버 API 로직을 KakaoAuthClient 클래스로 통합 * chore: 메서드 주석 추가 * feat: accessToken 블랙리스트 등록 로직 삭제 * refactor: FeignClient name 수정 * chore: 서브모듈 업데이트 * [T3-61] 애플 로그아웃, 탈퇴 구현 (#11) * feat: 애플 로그아웃, 탈퇴 구현 * refactor: 스웨거 수정 * fix: 공통 예외처리 수정 및 추가 * fix: ResponseEntityExceptionHandler 상속 제거 * fix: swagger 오류 * fix: 소셜로그인 refreshtoken 저장 및 스웨거 수정 * remove: 액세스 토큰 만료기한 필드 삭제 * feat: 스웨거 호출 위한 config 설정 추가 * refactor: 카카오 로그아웃 요청 방식 변경 * remove: CORS 설정에서 불필요한 도메인 삭제 * remove: CORS 설정에서 Preflight(OPTIONS) 요청 관련 허용 설정 삭제 * feat: 도메인 허용 및 prelight 관련 설정 추가 * chore: 주석 수정 * fix: setAllowCredentials를 허용 * feat: 스웨거 관련 하위 경로가 인증 필터에 적용받지 않도록 shouldNotFilter 추가 * fix: 애플 로그아웃 시 카카오 인증 서버 요청 오류 수정 * hotfix: 애플 feign 에러 디코딩 수정 * fix: apple 탈퇴 후 재가입 시 email null 오류 방지 예외처리 * feat: errorcode 업데이트 * feat: 약관 동의 및 role 기반 분기처리 * feat: Routine 엔티티 클래스 추가 단일 컬럼에서 여러 개의 요일을 관리하기 위해 DayOfWeek Enum 클래스 생성 DB 레벨과 코드 레벨에서의 형식을 맞추기 위해 DayOfWeekConverter 추가 * feat: SubRoutine 엔티티 클래스 추가 * feat: 루틴 등록 API 및 RequestBody 객체 클래스 추가 * feat: 루틴 등록 서비스 로직 추가 * chore: 불필요한 주석 제거 * feat: 루틴 등록 서비스 로직에 대한 테스트 코드 추가 * feat: 루틴 등록 API 스웨거 추가 * refactor: DayOfWeek를 커스텀 enum 클래스 대신 Java에서 제공하는 enum으로 변경 * chore: 메스드 설명 주석 추가 * feat: executionTime 스키마 필수 필드 설정 * chore: init sql 추가(추천루틴, 추천서브루틴, 온보딩, 케이스) * feat: entity 추가(Onboarding, Case, RecommendedRoutine, RecommendedSubRoutine) * fix: 공통 응답 처리 버그 수 * feat: 온보딩 스웨거 추가 * feat: http request login 추가 * feat: 온보딩 로직 추 * fix: jpa ddl 시 enum -> varchar 로 수정 * feat: onboarding 추가 * feat: 서브모듈 업데이트 * fix: Onboarding 응답 response 수정 * refactor: global/utils 경로로 이동 * remove: @table 어노테이션 삭제 * remove: 불필요한 어노테이션 삭제 * refactor: 엔티티 생성 빌더 service 레이어로 이동 * chore: submodule 업데이트 * refactor: 이력을 관리하는 시간을 LocalDateTime으로 변경 * refactor: END_DATE_TIME 수정 * refactor: 반복요일 필드명 수정 * refactor: 테스트 코드 수정 * chore: pull request 템플릿 추가 * feat: 온보딩시 추천 루틴에 대한 수정 * feat: 변경 루틴 엔티티 및 레포지토리 추 * fix: BaseTimeEntity 추 * chore: init sql 수정 * feat: 온보딩 시 추천 루틴 등록 API 추 * fix: null return 대신 Object 리턴 * remove: 불필요한 user 조회 로직 제거 * feat: RegisterRoutineRequest, UpdateRoutineRequest의 공통 필드들을 하나의 메서드에서 사용하기 위한 인터페이스 추가 * feat: 루틴, 서브루틴 업데이트 메서드 추가 * feat: 객체 동등성 수행을 위해 equals, hashCode 메서드 오버라이드 * feat: 루틴 및 서브루틴 업데이트 API 추가 * chore: develop 브랜치에서 변경사항 병합 * feat: 루틴, 서브루틴 업데이트 메서드 추가 * feat: 루틴 및 서브루틴 삭제 로직 추가 * feat: 루틴 및 서브루틴 삭제 API 추가 * feat: 이력 관리를 위해 복합키 객체 HistoryPk 추가 * feat: 추가된 복합키를 고려해서 루틴 관련 Request 객체 수정 * remove: LocalDateTime.now() 상수 삭제 * refactor: 추가된 복합키를 고려하여 루틴 및 서브루틴 업데이트 서비스 로직 수정 * feat: 에러 관련 스웨거 스펙 추가 * refactor: updateHistoryEndDate 메서드명 변경 * refactor: 복합키 기반으로 루틴 삭제 메서드 수정 루틴 업데이트 메서드에서 서브 루틴이 null일 때 처리 추가 * refactor: 삭제 루틴 API 및 스웨거 설명 수정 * refactor: User 엔티티 복합키로 변환 이력관리 필드 추가 * refactor: user 엔티티 복합키를 외래키로 설정 복합키 기반으로 routineService의 로직 수정 * refactor: changedRoutine 및 changedSubRoutine 테이블에 PK를 복합키로 수정 관련된 온보딩 서비스 로직 수정 * refactor: BaseTimeEntity 디렉토리 변경으로 인해 import 수정 * refactor: BaseTimeEntity 디렉토리 변경으로 인해 import 수정 (Case 클래스 추가) * refactor: User 복합키를 바탕으로 기존 JWT 생성 및 인증 단계 로직 수정 JwtProvider, UserAuthService에서 공통으로 사용되는 로직을 findValidUserByRefreshTokenOrAccessToken 메서드로 통합 * fix: 컬럼 관련 설정 오류 수정 * remove: 불필요한 주석 삭제 * chore: 주석 추가 * refactor: 인증 과정에서 유저 식별시 이력 시작 및 종료일시를 고려하여 현재 활성 사용자인지 검증 후, 유저 조회하도록 변경 * fix: Transactional 추가 * refactor: historyStartDateTime를 포함하지 않는 쿼리 메서드로 변경 * refactor: LocalDateTime.now() 의 변수명을 now로 변경 * fix: 테스트 코드 리팩터링 및 TODO 작성 * fix: Routine 테이블에서 User의 외래키를 삭제하고 userId 값으로 컬럼 값 수정 * feat: 서브루틴 테이블에 정렬순서(sortOrder) 필드 추가 * refactor: 서브루틴에 업데이트 대한 케이스 수정 * refactor: Jwt AccessToken으로 로그인했을 때 해당 유저를 조회하는 쿼리 메서드 변경 * remove: 불필요한 로직 삭제 * feat: Jwt 인증 관련 쿼리메서드 수정 * refactor: Jwt 관련 처리 기능들을 관리하는 Util 클래스로 명명 * refactor: 주석 변경 * refactor: 테스트 코드 주석 설정 * refactor: 루틴 업데이트 특정 케이스 수정 * [T3-98] 루틴 조회 API 수정 (#23) * feat: 변경 구분코드 추가 * feat: 루틴 조회 API * feat: 수정여부 컬럼 추가 * chore: 1차 배포 최종 init sql * fix: ddl 변경에 따른 수 * fix: ddl 변경에 따른 수정 * fix: 온보딩 API 수 * fix: 루틴 조회 쿼리파라미터로 수정 * fix: 홈 루틴 조회 API 수정 * [T3-106] 감정구슬 테이블 구축, API 개발 (#24) * feat: 감정구슬 테이블 구축, API 개발 * chore: 감정구슬 case 매 * remove: 불필요한 주석 제거 * remove: caseName 필드 삭제 * refactor: 스웨거 설정 보완 * feat: 루틴 완료여부 엔티티 클래스 추가 * feat: 루틴 완료여부 갱신 api에 필요한 request 객체 추가 * feat: 루틴 완료여부 갱신 서비스 로직 추가 * feat: 루틴 완료여부 갱신 api 추가 * feat: 루틴 삭제 시 deleteAt 설정 추가 * refactor: request 객체에서 필드명 변경 * feat: 주석 추가 * feat: 선택한 요일(당일)만 루틴을 삭제하는 서비스 로직 추가 * feat: 선택한 요일(당일)만 루틴을 삭제하는 API 추가 * refactor: reissue api response 수정 * fix: 스웨거 스펙 오류 수정 * refactor: JWT 인증 실패 시 response 형식 수정 * [T3-107] 홈 루틴 조회 API 수정 (#26) * fix: 홈 루틴 조회 API 내부 로직 수정(삭제이력 조회 제외, 완료여부 응답값 추가) * feat: 루틴 조회 응답값 추가(이력순번) * fix: 회원 탈퇴 로직에서 영속 상태로 설정 * feat: 데이터 정합성을 위해 검증 로직 추가 * refactor: 루틴 검증 로직을 RoutineValidator 클래스로 책임 분리 기존에 switch-case 문이 너무 비대했기 때문에 public 메서드인 validateRoutineOwnership의 전반적인 흐름을 명확히 볼 수 있도록 validation 로직을 private 메서드로 분리했습니다. * refactor: 루틴 관련 엔티티 생성, 초기화에 대한 로직을 RoutineFactory 클래스로 책임을 분리 hasRoutineChanged()는 Routine 엔티티의 필드에 관련된 일치 여부를 처리하기 때문에 Routine 엔티티가 해당 메서드를 처리하도록 했습니다. 객체가 행동(메서드)를 통해 자신의 데이터를 처리하도록 하여 Routine 엔티티의 캡슐화를 강화하였습니다. * [T3-108] 추천 루틴 조회 API (#28) * fix: OneToOne에서 ManyToOne으로 변 * feat: 추천 루틴 조회 API * feat: swagger 추가 * feat: 루틴, 서브루틴 완료 ID 응답값 추가 * fix: 감정 구슬 1일 1회 선택여부 확인 validation 추가 * fix: onboarding 명세 수정 * feat: 추천 루틴 조회시 응답에 감정구슬 enum 값 추가 * fix: 명세 추가 * fix: 명세 수정 * Feat/t3 108 (#29) * fix: OneToOne에서 ManyToOne으로 변 * feat: 추천 루틴 조회 API * feat: swagger 추가 * feat: 루틴, 서브루틴 완료 ID 응답값 추가 * fix: 감정 구슬 1일 1회 선택여부 확인 validation 추가 * fix: onboarding 명세 수정 * feat: 추천 루틴 조회시 응답에 감정구슬 enum 값 추가 * fix: 명세 추가 * fix: 명세 수정 * remove: tokenResponse * [T3-119] 홈 루틴 조회 응답값 추가 (#30) * fix: OneToOne에서 ManyToOne으로 변 * feat: 추천 루틴 조회 API * feat: swagger 추가 * feat: 루틴, 서브루틴 완료 ID 응답값 추가 * fix: 감정 구슬 1일 1회 선택여부 확인 validation 추가 * fix: onboarding 명세 수정 * feat: 추천 루틴 조회시 응답에 감정구슬 enum 값 추가 * fix: 명세 추가 * fix: 명세 수정 * remove: tokenResponse * feat: 루틴 조회 시 응답값 필드 추가 * chore: release tag 생성 자동화 * refactor: 홈 조회 로직에서 DTO로 변환하는 로직 RoutineMapper로 책임을 분리 * refactor: queryRoutines 메서드의 흐름을 정리하기 위해 메서드 분리 filterAndGroupRoutinesByDate()는 날짜별로 필요한 루틴을 조회하기 위해 필터링 및 그룹핑을 진행하는 메서드 applyChangedRoutines()는 이미 조회해온 날짜별 루틴들에 변경 루틴을 반영하여 최종 날짜별 루틴을 반환 * chore: prod 환경 oom 방지를 위한 메모리 증설 * remove: 불필요한 어노테이션 삭제 * fix: label 파싱 오류 수정 * refactor: 감정 구슬 엔티티 생성 관련 로직을 EmotionMarbleFactory 클래스로 책임을 분리 * submodule update * refactor: EmotionMarbleService, OnboardingService에 쓰이는 공통 로직을 행위의 주체인 RecommendRoutineService로 위임 공통 로직은 recommendRoutinesByEmotionMarble() 메서드입니다. * fix: enum 오타 수정 * remove: 중복 클래스 삭제 * refactor: 변경 루틴 관련 엔티티 생성 로직을 ChangedRoutineFactory로 책임을 위임 * chore: ChangedRoutineFactory 주석 추가 * refactor: 공통 로직 메서드 분리 * refactor: DTO 관련 로직을 RecommendedRoutineMapper로 책임을 위임 1. searchRecommendedRoutines()의 로직 흐름을 한눈에 파악할 수 있도록 addPersonalizedRecommendedRoutine(), addCategoryRecommendedRoutines()로 분리하였습니다. 2. recommendRoutinesByEmotionMarble()에서 비즈니스 로직에 의해 주로 List 초기화 및 for문 순회하는 부분이 반복되어 코드량이 비대해졌습니다. 스트림을 사용하여 짧게 가져가면 짧은 코드로도 어떤 행위를 하는지 파악할 수 있는 것이 장점으로 느껴져 변경하였습니다. * refactor: 중복 클래스 제거 및 변수명 통일 * refactor: 메서드명 변경 및 주석의 의도 강화 * refactor: RecommendedRoutine 관련 공통 로직을 Service가 아닌 Manager 클래스로 위임하여 레이어드 아키텍처 규칙을 준수 * refactor: 생성, 변환과 같은 단순 책임의 모듈을 @component로 변경 * refactor: response 관련 변수명 수정 * [T3-120] 추천 루틴 단건 조회 API (#36) * fix: 추천 루틴 엔티티 실행시간 변수명 수정 * fix: 추천 루틴 엔티티 실행시간 변수명 수정에 따른 sql 수정 * feat: 추천 루틴 단건 조회 API * chore: 서브모듈 업데이트 * remove: 불필요한 dto 제거 * fix: swagger 명세 수정 * fix: 추천 루틴 단건조회 로직 수정 * fix: 추천루틴 엔티티 필드명 변경에 따른 수정(time -> executionTime) * fix: release 태그 생성 자동화 수정 (#37) * [T3-124] S3 설정 추가 및 감정구슬 전체 조회 수정 (#38) * feat: s3 config 생성 * fix: 감정구슬 전체 조회 API 수정 * feat: EmotionMarbleMapper 추가 및 서비스 로직 수정 * remove: 루틴 조회 시 불필요한 응답값 제거 * feat: 유저 정보를 조회하는 API 추가 * feat: 검색 날짜 기준으로 홈 화면의 감정 구슬 조회 API 추가 * refactor: DTO 변환 로직 Mapper 클래스로 이동 * refactor: 업데이트를 위해 User를 영속 상태로 만드는 로직을 UserManager 클래스로 위임 * chore: 테스트코드 리팩터링 TODO 주석 추가 * feat: 수정 페이지에서 사용되는 루틴 단건 조회 API 추가 * refactor: 감정 구슬 조회 API 수정 * fix: 서브 루틴 조회시 활성상태인 서브 루틴을 조회하도록 쿼리 메서드 수정 * refactor: 유저 정보 조회 엔드포인트 변경 * fix: onboarding insert sql 수정 * chore: 배포 Slack 알림 추가 * chore: release drafter 실행 조건 수정 * chore: 서브모듈 업데이트 및 data.sql 수정 * refactor: release drafter를 cicd 워크플로우 안으로 병합 * fix: onboarding 수행시 null 체크 * fix: slack message parameter 수정(toJson 처리) * fix: 반복일자에 null 대신 empty list 응답 * fix: payload json-safe 문자열로 수정 * refactor: 유저 PK를 userId(Long)으로 변경 * feat: RoutineV2 엔티티 생성 * feat: 루틴 관련 엔티티 생성 * feat: 컨트롤러 로깅 인터셉터 생성 * fix: 당일 삭제 시 변경된 루틴에 대한 분기처리가 없는 것을 보완 * refactor: 컨버터 클래스명 변경 및 ObjectMapper 반영 이에 해당하는 에러코드 추가 * chore: 필드 별 주석 추가 * feat: Routine 스웨거 스펙에 에러코드 추가 * chore: 주석 추가 * fix: 토큰 디코드 로직 수정 * feat: swagger url exclude * feat: @SQLDelete, @where를 이용한 soft delete 추가 * refactor: routineType을 nullable하게 서비스 로직 리팩터링 * refactor: EmotionMarble PK 타입 변경 * refactor: reissue api response에 유저 role 추가 * fix: performedDate를 포함한 쿼리메서드로 수정 (#51) * refactor: routineType nullable하지 않도록 수정 * [T3-140] DB Flyway 적용 (#52) * chore: db flyway 설정 * feat: db flyway 적용 * chore: 서브 모듈 업데이트 * chore: DB v4 변경사항 추가 * chore: DB v4 변경사항 중 rename 추가 * fix: 추천 루틴이 모두 보이도록 변경 * fix: 당일 루틴 등록 추가 --------- Co-authored-by: 정유석 <elwlahstmxjf@naver.com> Co-authored-by: 정유석 <83908712+yuseok0215@users.noreply.github.com>
1 parent 476e597 commit 524ee8a

48 files changed

Lines changed: 1261 additions & 284 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

build.gradle

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ plugins {
22
id 'java'
33
id 'org.springframework.boot' version '3.5.0'
44
id 'io.spring.dependency-management' version '1.1.7'
5+
id 'org.flywaydb.flyway' version '10.14.0'
56
}
67

78
group = 'bitnagil'
@@ -62,6 +63,10 @@ dependencies {
6263

6364
// aws
6465
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
66+
67+
// flyway
68+
implementation 'org.flywaydb:flyway-core'
69+
implementation 'org.flywaydb:flyway-mysql'
6570
}
6671

6772
tasks.named('test') {

config

src/main/java/bitnagil/bitnagil_backend/auth/jwt/AuthRedisService.java

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import org.springframework.data.redis.core.StringRedisTemplate;
77
import org.springframework.stereotype.Component;
88

9-
import bitnagil.bitnagil_backend.global.entity.HistoryPk;
109
import lombok.RequiredArgsConstructor;
1110

1211
@Component
@@ -16,21 +15,18 @@ public class AuthRedisService {
1615
private final StringRedisTemplate stringRedisTemplate;
1716

1817
// 저장
19-
public void saveRefreshToken(HistoryPk userPk, String token) {
20-
String redisKey = buildRefreshTokenKey(userPk);
21-
18+
public void saveRefreshToken(Long userId, String token) {
2219
RefreshToken refreshToken = RefreshToken.builder()
23-
.userId(redisKey) // 복합키를 문자열 ID로 저장
20+
.userId(String.valueOf(userId)) // 복합키를 문자열 ID로 저장
2421
.refreshToken(token)
2522
.build();
2623

2724
refreshTokenRedisRepository.save(refreshToken);
2825
}
2926

3027
// 조회 by 복합키
31-
public Optional<RefreshToken> getRefreshTokenByUserPk(HistoryPk userPk) {
32-
String redisKey = buildRefreshTokenKey(userPk);
33-
return refreshTokenRedisRepository.findById(redisKey);
28+
public Optional<RefreshToken> getRefreshTokenByUserId(Long userId) {
29+
return refreshTokenRedisRepository.findById(String.valueOf(userId));
3430
}
3531

3632
// 조회 by refreshToken
@@ -39,16 +35,10 @@ public Optional<RefreshToken> getRefreshTokenByToken(String token) {
3935
}
4036

4137
// 삭제
42-
public void deleteRefreshToken(HistoryPk userPk) {
43-
String redisKey = buildRefreshTokenKey(userPk);
44-
refreshTokenRedisRepository.deleteById(redisKey);
45-
}
46-
47-
private String buildRefreshTokenKey(HistoryPk userPk) {
48-
return userPk.getId().toString() + ":" + userPk.getHistorySeq();
38+
public void deleteRefreshToken(Long userId) {
39+
refreshTokenRedisRepository.deleteById(String.valueOf(userId));
4940
}
5041

51-
5242
// Access Token 블랙리스트 등록
5343
public void addAccessTokenToBlacklist(String accessToken, long expirationMillis) {
5444
String key = "blacklist:" + accessToken;

src/main/java/bitnagil/bitnagil_backend/auth/jwt/JwtUtil.java

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import org.springframework.stereotype.Service;
1616
import org.springframework.util.StringUtils;
1717

18-
import bitnagil.bitnagil_backend.global.entity.HistoryPk;
1918
import bitnagil.bitnagil_backend.global.errorcode.ErrorCode;
2019
import bitnagil.bitnagil_backend.global.exception.CustomException;
2120
import bitnagil.bitnagil_backend.user.repository.UserRepository;
@@ -58,16 +57,15 @@ protected void init() {
5857
this.key = Keys.hmacShaKeyFor(keyBytes);
5958
}
6059

61-
public Token generateToken(HistoryPk userPk) {
60+
public Token generateToken(Long userId) {
6261
Date now = new Date();
6362

6463
// Access Token 생성
6564
Date accessTokenExpiresIn = new Date(now.getTime() + ACCESS_TOKEN_EXPIRE_TIME);
6665

6766
String accessToken = Jwts.builder()
6867
.setSubject(ACCESS_TOKEN_SUBJECT)
69-
.claim("userId", userPk.getId())
70-
.claim("userHistorySeq", userPk.getHistorySeq())
68+
.claim("userId", userId)
7169
.setExpiration(accessTokenExpiresIn)
7270
.signWith(key, SignatureAlgorithm.HS512)
7371
.compact();
@@ -76,13 +74,12 @@ public Token generateToken(HistoryPk userPk) {
7674
Date refreshTokenExpiresIn = new Date(now.getTime() + REFRESH_TOKEN_EXPIRE_TIME);
7775
String refreshToken = Jwts.builder()
7876
.setSubject(REFRESH_TOKEN_SUBJECT)
79-
.claim("userId", userPk.getId())
80-
.claim("userHistorySeq", userPk.getHistorySeq())
77+
.claim("userId", userId)
8178
.setExpiration(refreshTokenExpiresIn)
8279
.signWith(key, SignatureAlgorithm.HS512)
8380
.compact();
8481

85-
authRedisService.saveRefreshToken(userPk, refreshToken);
82+
authRedisService.saveRefreshToken(userId, refreshToken);
8683

8784
return Token.builder()
8885
.accessToken(accessToken)
@@ -110,14 +107,11 @@ public Authentication getAuthentication(String accessToken) {
110107

111108
// RefreshToken 혹은 AccessToken으로 인증된 유효 User 조회
112109
public User findValidUserByRefreshTokenOrAccessToken(String token) {
113-
LocalDateTime now = LocalDateTime.now();
114110

115-
// JWT에서 유저 관련 정보 추출 후, UserPk 생성
116-
UUID userId = UUID.fromString(parseClaims(token).get("userId", String.class));
111+
Long userId = Long.valueOf(parseClaims(token).get("userId", Integer.class));
117112

118113
return userRepository
119-
.findByUserPk_IdAndHistoryStartDateTimeLessThanAndHistoryEndDateTimeGreaterThanEqual(
120-
userId, now, now)
114+
.findByUserId(userId)
121115
.orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_USER));
122116
}
123117

src/main/java/bitnagil/bitnagil_backend/auth/kakao/domain/CustomOAuth2User.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@
1919
@Getter
2020
public class CustomOAuth2User extends DefaultOAuth2User {
2121

22-
private final HistoryPk userPk;
22+
private final Long userId;
2323
private final Role userRole;
2424

2525
public CustomOAuth2User(Collection<? extends GrantedAuthority> authorities,
26-
Map<String, Object> attributes, String nameAttributeKey, HistoryPk userPk, Role userRole) {
26+
Map<String, Object> attributes, String nameAttributeKey, Long userId, Role userRole) {
2727
super(authorities, attributes, nameAttributeKey);
28-
this.userPk = userPk;
28+
this.userId = userId;
2929
this.userRole = userRole;
3030
}
3131
}

src/main/java/bitnagil/bitnagil_backend/auth/kakao/service/CustomOAuth2UserService.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,6 @@ public class CustomOAuth2UserService implements OAuth2UserService<OAuth2UserRequ
4646
*/
4747
@Override
4848
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
49-
log.info("CustomOAuth2UserService 진입-----");
50-
5149

5250
OAuth2UserService<OAuth2UserRequest, OAuth2User> delegate = new DefaultOAuth2UserService();
5351
OAuth2User oAuth2User = delegate.loadUser(userRequest);
@@ -65,7 +63,7 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2Authentic
6563

6664
return new CustomOAuth2User(
6765
Collections.singleton(new SimpleGrantedAuthority(createdUser.getRole().getDescription())),
68-
attributes, extractAttributes.getNameAttributeKey(), createdUser.getUserPk(), createdUser.getRole());
66+
attributes, extractAttributes.getNameAttributeKey(), createdUser.getUserId(), createdUser.getRole());
6967
}
7068

7169
private String getUserNameAttributeName(final OAuth2UserRequest userRequest) {
@@ -84,11 +82,9 @@ private SocialType getSocialType(String registrationId) {
8482
}
8583

8684
private User getMember(OAuth2Attribute attributes, SocialType socialType) {
87-
LocalDateTime now = LocalDateTime.now();
8885

8986
User findUser = userRepository
90-
.findBySocialTypeAndSocialIdAndHistoryStartDateTimeLessThanAndHistoryEndDateTimeGreaterThanEqual(
91-
socialType, attributes.getSocialId(), now, now)
87+
.findBySocialTypeAndSocialId(socialType, attributes.getSocialId())
9288
.orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_USER));
9389

9490
if (findUser == null) {

src/main/java/bitnagil/bitnagil_backend/changedRoutine/domain/ChangedRoutine.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,14 @@ public class ChangedRoutine extends BaseTimeEntity {
5454
private ChangedDivCode changedDivCode; // 변경 구분 코드 (시간 변경, 내일 미루기, 오늘만 루틴 삭제 등)
5555

5656
@NotNull
57-
private UUID userId;
57+
private Long userId;
5858

5959
private UUID routineId;
6060

6161
@Builder
6262
public ChangedRoutine(HistoryPk changedRoutinePk, String changedRoutineName, LocalTime changedExecutionTime,
6363
LocalDate originalRoutineDate, LocalDate changedRoutineDate, LocalDateTime historyStartDateTime,
64-
LocalDateTime historyEndDateTime, UUID userId, UUID routineId, ChangedDivCode changedDivCode) {
64+
LocalDateTime historyEndDateTime, Long userId, UUID routineId, ChangedDivCode changedDivCode) {
6565
this.changedRoutinePk = changedRoutinePk;
6666
this.changedRoutineName = changedRoutineName;
6767
this.changedExecutionTime = changedExecutionTime;
@@ -74,4 +74,8 @@ public ChangedRoutine(HistoryPk changedRoutinePk, String changedRoutineName, Loc
7474
this.routineId = routineId;
7575
}
7676

77+
public void updateChangedDivCode(ChangedDivCode changedDivCode) {
78+
this.changedDivCode = changedDivCode;
79+
}
80+
7781
}

src/main/java/bitnagil/bitnagil_backend/changedRoutine/repository/ChangedRoutineRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public interface ChangedRoutineRepository extends JpaRepository<ChangedRoutine,
2222
* historyStartDateTime < systime <= historyEndDateTime
2323
*/
2424
List<ChangedRoutine> findByUserIdAndDeletedAtIsNullAndHistoryStartDateTimeBeforeAndHistoryEndDateTimeGreaterThanEqualAndChangedRoutineDateBetween(
25-
UUID userId,
25+
Long userId,
2626
LocalDateTime now1,
2727
LocalDateTime now2,
2828
LocalDate startDate,

src/main/java/bitnagil/bitnagil_backend/changedRoutine/service/ChangedRoutineFactory.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.time.LocalDate;
44
import java.time.LocalDateTime;
5+
import java.time.LocalTime;
56
import java.util.UUID;
67

78
import org.springframework.stereotype.Service;
@@ -19,29 +20,29 @@
1920
public class ChangedRoutineFactory {
2021

2122
// 유저 초기 온보딩 시 추천 루틴을 등록할 때 변경 루틴에 저장
22-
public ChangedRoutine createChangedRoutineForOnboarding(
23-
User user, RecommendedRoutine recommendedRoutine, LocalDate today, LocalDateTime now) {
23+
public ChangedRoutine createChangedRoutineForToday(
24+
User user, String RoutineName, LocalTime executionTime, LocalDate today, LocalDateTime now) {
2425

2526
return ChangedRoutine.builder()
2627
.changedRoutinePk(new HistoryPk(UUID.randomUUID(), 1L))
27-
.changedRoutineName(recommendedRoutine.getRecommendedRoutineName())
28-
.changedExecutionTime(recommendedRoutine.getExecutionTime())
28+
.changedRoutineName(RoutineName)
29+
.changedExecutionTime(executionTime)
2930
.originalRoutineDate(today) // 원본 루틴 날짜는 현재 날짜로 설정
3031
.changedRoutineDate(today) // 변경된 루틴 날짜도 현재 날짜로 설정
3132
.historyStartDateTime(now)
3233
.historyEndDateTime(TimeUtils.END_DATE_TIME)
33-
.userId(user.getUserPk().getId())
34+
.userId(user.getUserId())
3435
.changedDivCode(ChangedDivCode.ONBOARDING)
3536
.build();
3637
}
3738

3839
// 유저 초기 온보딩 시 추천 루틴을 등록할 때 변경 서브루틴에 저장
39-
public ChangedSubRoutine createChangedSubRoutineForOnboarding(
40-
int sortOrder, RecommendedSubRoutine recommendedSubRoutine, LocalDateTime now, ChangedRoutine changedRoutine) {
40+
public ChangedSubRoutine createChangedSubRoutineForToday(
41+
int sortOrder, String subRoutineName, LocalDateTime now, ChangedRoutine changedRoutine) {
4142

4243
return ChangedSubRoutine.builder()
4344
.changedSubRoutinePk(new HistoryPk(UUID.randomUUID(), 1L))
44-
.changedSubRoutineName(recommendedSubRoutine.getSubRoutineName())
45+
.changedSubRoutineName(subRoutineName)
4546
.historyStartDateTime(now)
4647
.historyEndDateTime(TimeUtils.END_DATE_TIME)
4748
.changedRoutineId(changedRoutine.getChangedRoutinePk().getId())

src/main/java/bitnagil/bitnagil_backend/emotionMarble/domain/EmotionMarble.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,22 @@
1010
import lombok.Builder;
1111
import lombok.Getter;
1212
import lombok.NoArgsConstructor;
13+
import org.hibernate.annotations.SQLDelete;
14+
import org.hibernate.annotations.Where;
1315

1416
import java.time.LocalDate;
1517
import java.time.LocalDateTime;
16-
import java.util.UUID;
1718

1819
@Getter
1920
@NoArgsConstructor(access = AccessLevel.PROTECTED)
2021
@Entity
22+
@SQLDelete(sql = "UPDATE emotion_marble SET deleted_at = NOW() WHERE emotion_marble_id = ?")
23+
@Where(clause = "deleted_at IS NULL")
2124
public class EmotionMarble extends BaseTimeEntity {
2225

23-
@EmbeddedId
24-
@AttributeOverrides({
25-
@AttributeOverride(name = "id", column = @Column(name = "emotion_marble_id")),
26-
@AttributeOverride(name = "historySeq", column = @Column(name = "history_seq"))
27-
})
28-
private HistoryPk emotionMarblePk;
26+
@Id
27+
@GeneratedValue(strategy = GenerationType.IDENTITY)
28+
private Long emotionMarbleId;
2929

3030
@NotNull
3131
@Enumerated(EnumType.STRING)
@@ -36,7 +36,7 @@ public class EmotionMarble extends BaseTimeEntity {
3636
private LocalDate date;
3737

3838
@NotNull
39-
private UUID userId;
39+
private Long userId;
4040

4141
@NotNull
4242
private LocalDateTime historyStartDateTime;
@@ -49,9 +49,8 @@ public class EmotionMarble extends BaseTimeEntity {
4949
private Case resultCase;
5050

5151
@Builder
52-
public EmotionMarble(HistoryPk emotionMarblePk, EmotionMarbleType emotionMarbleType, LocalDate date, UUID userId,
52+
public EmotionMarble(EmotionMarbleType emotionMarbleType, LocalDate date, Long userId,
5353
LocalDateTime historyStartDateTime, LocalDateTime historyEndDateTime, Case resultCase) {
54-
this.emotionMarblePk = emotionMarblePk;
5554
this.emotionMarbleType = emotionMarbleType;
5655
this.date = date;
5756
this.userId = userId;

0 commit comments

Comments
 (0)