From 54d28d5901471b7831a595e40b9c77cc27b95806 Mon Sep 17 00:00:00 2001 From: Minhyeok Song <125117389+minhyeokDev@users.noreply.github.com> Date: Tue, 20 Aug 2024 02:56:41 +0900 Subject: [PATCH] =?UTF-8?q?[Main=20Merge]=20=EC=B6=94=EC=B2=9C=20Hard=20De?= =?UTF-8?q?lete=20(#236)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix: ErrorStatus 수정 (#55) * [FEAT] 오늘의 조합 댓글 작성 API 개발 (#58) * feat : CombinationComment domain column 수정 Related: #50 * feat : CombinationComment Request, Response 작성 Related: #50 * feat : CombinationComment 에러 상태 추가 Related: #50 * feat : CombinationComment Service 구현 Related: #50 * feat : CombinationComment Controller 구현 Related: #50 * feat : 오늘의 조합 댓글 작성 시 Combination commentCount 증가 구현 Related: #50 * [FEAT] 오늘의 조합 댓글 조회 API 개발 (#59) * feat : CombinationComment 관련 DTO 작성 Related: #57 * feat : CombinationComment Service 구현 기존의 오늘의 조합 상세 조회 시 사용한 Paging 메서드 수정 Related: #57 * feat : CombinationComment Controller 구현 Related: #57 * feat : Paging Annotation & Validator 구현 Related: #57 * feat : Combination 존재 여부 검증하는 Annotation & Validator 구현 Related: #57 * Feat: 주류 추천 API (#61) * Feat: GPT API연동 및 프롬프트 엔지니어링 - GPT API 연동 - 프롬프트 엔지니어링 - Recommend 레포지토리 저장 TODO: 프롬프트 엔지니어링 성능 개선 * Feat: 주류 추천 이미지 생성 기능 * Feat: recommend validation 추가 * Fix: GPT 결과 Json형식으로 제한 * Fix: Conflict 사후처리 * Fix: PR comments 해결 * fix: Merge Conflict 해결 (#65) Related: #64 * FIX : 오늘의 조합 상세 조회에 CombinationImage, CombinationLike 정보 추가 전달 (#66) * fix: 오늘의 조합 상세 조회에 CombinationImage 정보 추가 전달 Related: #47 * fix: 오늘의 조합 상세 조회 API 좋아요 여부 데이터 추가 상세 조회 API시 좋아요 상태 정보 전달 Related: #47 * Feat: 오늘의 조합 댓글 수정 API 개발 (#67) * feat: CombinationComment Request, Response DTO 구현 Related: #60 * feat: CombinationComment CommandService 구현 Related: #60 * feat: CombinationComment Controller 구현 Related: #60 * Feat: 추천 삭제 API (#71) * Fix: #71 Merge conflict 놓친 부분 처리 * Feat: 주류 추천 리스트 API (#72) * Feat: 주류 추천 리스트 API * Fix: 리스트 조회 controller수정 Method: Post -> Get page, size -> RequestParameter로 입력 * Fix: Comment 처리 * Docs : 레시피 Swagger 설정 (#70) * docs : Recipe DTO Swagger 설정 Related #69 * docs : Recipe Controller Swagger 설정 Related #69 * docs : RecipeLike DTO Swagger 설정 Related #69 * docs : RecipeLike Controller Swagger 설정 Related #69 * docs : RecipeComment DTO Swagger 설정 Related #69 * docs : RecipeComment Controller Swagger 설정 Related #69 * Feat : 레시피 이미지 API (#73) * feat : RecipeRepository 생성 레시피 id로 모든 이미지를 찾는 메소드 추가 Relatd #53 * feat : RecipeImage Service 생성 & 해당 레시피 이미지 조회 Related #53 * feat : (GET) 해당 레시피 이미지 조회 API recipeId 파라미터로 해당 레시피의 이미지를 조회합니다. Related #53 * feat : Recipe Entity 빌드 메소드 추가 Recipe recipe, String imageUrl 를 받아 Entity를 빌드합니다. Related #53 * feat : 요청으로 들어온 Image가 없을 경우 예외처리 Related #53 * feat : 요청으로 들어온 image POST - Recipe 찾아온 후 - image 유무를 검증합니다. - s3에 이미지를 업로드하고 url을 받아옵니다. - Recipe Entity 들을 만들어 모두 저장합니다. Related #53 * feat : (POST) 레시피 이미지 등록 API form-data 형식 사용했습니다 Related #53 * feat : 레시피 이미지 url로 삭제 - 레시피 url로 RecipeImage를 찾습니다 - 없으면 에러를 발생시킵니다. - 있으면 repository에서 삭제하고 s3에서도 삭제합니다. Related #53 * feat : 레시피 이미지 수정 기능 - 1. 추가할 레시피 이미지가 있다면 업로드합니다 - 2. 삭제할 레시피 이미지가 있다면 삭제합니다 Related #53 * feat : (PATCH) 레시피 수정 API - 추가 업로드할 파일, 삭제할 파일 URL, RecipeID를 파라미터로 받습니다. Related #53 * feat : 레시피의 모든 이미지 삭제 레시피 id로 해당 레시피의 모든 이미지를 삭제합니다 Related #53 * feat : (DELETE) 레시피 이미지 삭제 API Related #53 * fix : ErrorStatus 유형 변경 ErrorStatus 사용이 잘못되어 수정하였습니다. Related #53 * Feat: 주간 베스트 조합 조회 API (#74) * Feat: #51 주간 베스트 조합 조회 API 구현 - Controller, Service, Repository 구현 - 좋아요 10개 이상 게시글 조회 * Feat: #51 주간 베스트 조합 조회 API 수정 - 좋아요 30개 이상 조회로 수정 * Feat: 오늘의 조합 댓글 삭제 API 구현 (#75) * feat: CombinationComment Response 작성 Related: #68 * feat: CombinationComment CommandService 구현 Related: #68 * feat: CombinationComment Controller 구현 Related: #68 * Feat: 오늘의 조합 좋아요 누르기 API (#77) * Feat: #75 오늘의 조합 좋아요 관련 API - changeCombinationLike 메서드 생성 * Feat: 조합 좋아요 엔티티 조회 메서드 구현 Related : #75 * Feat: Combination 엔티티 Like 관련 메서드 구현 Related : #75 * Feat: Combination 엔티티 Like 관련 메서드 구현 Related : #75 * Feat: Combination Entity 조회 메서드, CombinationLike 생성 메서드, CombinationLike 상태 변경 메서드 구현 Related : #75 * Feat: Long memberId로 받아오는 방식으로 수정 Related : #75 * Revert "Feat: Long memberId로 받아오는 방식으로 수정" This reverts commit 4dae9a6d7cd02e316f17cde0ef0acef88f792670. * Revert "Feat: Combination Entity 조회 메서드, CombinationLike 생성 메서드, CombinationLike 상태 변경 메서드 구현" This reverts commit ef2a48ae010cc766a23ea05f3402dafb35eee879. * Revert "Feat: Combination 엔티티 Like 관련 메서드 구현" This reverts commit 77530309fc9ab228ef223fdbd44b60e9da7f211d. * Revert "Feat: Combination 엔티티 Like 관련 메서드 구현" This reverts commit 7adc09f2ecd4570f091a2bdbde1d969be78b514e. * Revert "Feat: 조합 좋아요 엔티티 조회 메서드 구현" This reverts commit 2bab9c8ae969c73a544cb092e1bb8c5df7c980a6. * Revert "Feat: #75 오늘의 조합 좋아요 관련 API" This reverts commit 1a6ca0bcedb90d728e35ce2a237dd18b2e13c7aa. * Feat: Combination, CombinationLike 엔티티 메서드 추가 Related : #76 * Feat: findByCombinationAndMember 메서드 추가 Related : #76 * Feat: Service 구현 Related : #76 * Feat: Controller 구현 Related : #76 * Feat: 소셜 로그인 (Kakao, Naver) API 개발 (#78) * Feat : JwtProvider token 생성, 검증, 등록 구현 Related: #10 * Feat : SecurityConfig 1차 설정 Related: #10 * Feat : JwtAuthenticationFilter 구현 Jwt token 유효성 검증하는 필터 Related: #10 * Feat : OAuth2UserInfo 구현 카카오 사용자 정보 KakaoUserInfo 구현 Related: #10 * Feat : CustomOAuth2User, CustomOAuth2UserService 구현 소셜 로그인 및 회원가입을 처리하는 서비스 Related: #10 * Feat : OAuth2AuthenticationSuccessHandler, OAuth2Controller 구현 소셜 로그인 성공 시 토큰 생성 및 사용자 정보 전달하는 핸들러 작성 Related: #10 * Feat : SecurityConfig oauth2Login 설정 및 Member 속성 변경 Related: #10 * Feat : Redis에 Refresh Token 저장하기 서버 측 Redis에 Refresh Token을 저장하고, Cookie에 Refresh Token 담아 전달하기 Related: #10 * Feat : AccessToken 재발급 API 구현 Related: #10 * Feat: 네이버 소셜 로그인 구현 * docs: 도메인 적용 및 파일 수정 Related: #10 * feat: Security LogoutHandler 작성 Related: #10 * feat: AccessToken 재발급 API 재 구현 Related: #10 * feat: ErrorStatus 상태 추가 및 CookieUtil 수정 Related: #10 * feat: ErrorStatus 추가 및 파일 수정 Related: #78 --------- Co-authored-by: Blue-hyeon * fix: Merge conflict resolve (#81) Related: #80 * Update Member.java * Fix: swagger Failed to fetch 오류 해결 (#86) - server url 설정 Related: #85 * Feat: 타이틀로 검색 API (#89) * Feat: 오늘의 조합 홈 타이틀 검색 Related: #88 * Feat: 주간 베스트 조합 홈 타이틀 검색 Related: #88 * Feat: 레시피북 홈 타이틀 검색 - 코딩 컨벤션 반영 Related: #88 * Fix: 소셜 로그인 코드 수정 (#91) * Feat : JwtProvider token 생성, 검증, 등록 구현 Related: #10 * Feat : SecurityConfig 1차 설정 Related: #10 * Feat : JwtAuthenticationFilter 구현 Jwt token 유효성 검증하는 필터 Related: #10 * Feat : OAuth2UserInfo 구현 카카오 사용자 정보 KakaoUserInfo 구현 Related: #10 * Feat : CustomOAuth2User, CustomOAuth2UserService 구현 소셜 로그인 및 회원가입을 처리하는 서비스 Related: #10 * Feat : OAuth2AuthenticationSuccessHandler, OAuth2Controller 구현 소셜 로그인 성공 시 토큰 생성 및 사용자 정보 전달하는 핸들러 작성 Related: #10 * Feat : SecurityConfig oauth2Login 설정 및 Member 속성 변경 Related: #10 * Feat : Redis에 Refresh Token 저장하기 서버 측 Redis에 Refresh Token을 저장하고, Cookie에 Refresh Token 담아 전달하기 Related: #10 * Feat : AccessToken 재발급 API 구현 Related: #10 * Feat: 네이버 소셜 로그인 구현 * docs: 도메인 적용 및 파일 수정 Related: #10 * feat: Security LogoutHandler 작성 Related: #10 * feat: AccessToken 재발급 API 재 구현 Related: #10 * feat: ErrorStatus 상태 추가 및 CookieUtil 수정 Related: #10 * feat: ErrorStatus 추가 및 파일 수정 Related: #78 * feat: iOS 소셜 로그인 처리 후 전달 받는 AuthRequest 작성 Related: #10 * Docs: oauth2 패키지 삭제 Related: #10 * feat: 로그인 및 회원가입을 진행하는 AuthService 구현 Related: #10 * feat: LogoutHandler, JwtController 구현 Related: #10 * refactor: JwtProvider 만료 시간 및 파싱하는 데이터 수정 Related: #10 * refactor: SecurityConfig, JwtAuthenticationFilter URL, 인증 허가 경로 수정 Related: #10 --------- Co-authored-by: Blue-hyeon * Feat: Resolver추가 및 Member어노테이션 추가 (#97) * Feat : JwtProvider token 생성, 검증, 등록 구현 Related: #10 * Feat : SecurityConfig 1차 설정 Related: #10 * Feat : JwtAuthenticationFilter 구현 Jwt token 유효성 검증하는 필터 Related: #10 * Feat : OAuth2UserInfo 구현 카카오 사용자 정보 KakaoUserInfo 구현 Related: #10 * Feat : CustomOAuth2User, CustomOAuth2UserService 구현 소셜 로그인 및 회원가입을 처리하는 서비스 Related: #10 * Feat : OAuth2AuthenticationSuccessHandler, OAuth2Controller 구현 소셜 로그인 성공 시 토큰 생성 및 사용자 정보 전달하는 핸들러 작성 Related: #10 * Feat : SecurityConfig oauth2Login 설정 및 Member 속성 변경 Related: #10 * Feat : Redis에 Refresh Token 저장하기 서버 측 Redis에 Refresh Token을 저장하고, Cookie에 Refresh Token 담아 전달하기 Related: #10 * Feat : AccessToken 재발급 API 구현 Related: #10 * Feat: 네이버 소셜 로그인 구현 * docs: 도메인 적용 및 파일 수정 Related: #10 * feat: Security LogoutHandler 작성 Related: #10 * feat: AccessToken 재발급 API 재 구현 Related: #10 * feat: ErrorStatus 상태 추가 및 CookieUtil 수정 Related: #10 * feat: ErrorStatus 추가 및 파일 수정 Related: #78 * feat: iOS 소셜 로그인 처리 후 전달 받는 AuthRequest 작성 Related: #10 * Docs: oauth2 패키지 삭제 Related: #10 * feat: 로그인 및 회원가입을 진행하는 AuthService 구현 Related: #10 * feat: LogoutHandler, JwtController 구현 Related: #10 * refactor: JwtProvider 만료 시간 및 파싱하는 데이터 수정 Related: #10 * refactor: SecurityConfig, JwtAuthenticationFilter URL, 인증 허가 경로 수정 Related: #10 * Feat: resolver 추가 * Fix: Resolver 오류 수정 --------- Co-authored-by: hyungyeom Co-authored-by: Blue-hyeon Co-authored-by: kylo <103489352+kylo-dev@users.noreply.github.com> * Feat: MyPage 관련 API 모음 (#93) * feat: 마이페이지 수정, 마이페이지 조회, 내가 작성한 오늘의 조합 조회API * feat: 마이페이지 수정, 마이페이지 조회, 내가 작성한 오늘의 조합 조회API * feat: 좋아요 관련 API * Feat : 레시피 Count 변경 기능 추가 (#96) * feat : Recipe에서 LikeCount와 CommentCount 변경 넘겨받는 bool 값에 따라 더하거나 뺄 수 있도록 하였습니다. Related #95 * feat : RecipeLike 변경되면 LikeCount 변경 -기존 state가 true이면 삭제해야하므로 isDecrease에 저장합니다. - state 변경이후 isDecrease값 recipe에 넘겨줍니다. Related #95 * feat : RecipeLike 생성 시 LikeCount 증가 기존 상태 변경말고 새로 생성 시 LikeCount 증가시켜 주었습니다. Related #95 * feat : RecipeComment 삭제시 CommentCount 감소 Related #95 * feat : RecipeComment 삭제 시 이미 삭제된 Comment인지 에러처리 Related #95 * feat : ReicpeComment 삭제 시 CommentCount 감소 Related #95 * feat : RecipeComment 등록 시 CommentCount 증가 Related #95 * Feat : 레시피 페이징 (#94) * feat : RecipeRepository에서 page 기능 추가 Related #90 * feat : Recipe Service에서 페이징 기능 추가 Related #90 * refactor : Default Member 저장 방식 변경 Security 추가되어서 기존의 Member가 저장되지 않아 초기화 방식을 바꿨습니다. Related #90 * feat : (GET) Recipe 페이징 추가 Related #90 * feat : RecipeCommentRepository 페이징 추가 * feat : RecipeComment Service에서 페이징 기능 추가 Related #90 * feat : (GET) RecipeComment 페이징 기능 추가된 API Related #90 * Fix: Main Merge Conflict Resolve * Fix: Main Merge Conflict Resolve - RecipeController 수정 * Fix: 오늘의 조합 API 수정 & 로그인 사용자 정보 어노테이션 추가 & Soft Delete 적용 (#104) * fix: 오늘의 조합 홈 조회 DTO 수정 Related: #101 * fix: CombinationQueryService 수정 로그인 사용자 정보와 좋아요 여부 데이터 추가 Related: #101 * fix: CombinationController 오늘의 조합 API 수정 Related: #101 * fix: 오늘의 조합 상세보기 Controller, Service 수정 로그인 사용자 정보 추가 Related: #101 * fix: 오늘의 조합 상세보기에 HashTagOptionQueryService 적용 Related: #101 * fix: Response 코딩 컨벤션 적용 Related: #101 * fix: 오늘의 조합 작성 API Request, Response 수정 Related: #101 * fix: 오늘의 조합 작성 Controller, Service 수정 Related: #101 * fix: Combination 생성 메서드 Service에서 분리 Related: #101 * fix: Combination Soft Delete 적용 Related: #101 * fix: 오늘의 조합 홈, 상세조회 API 수정 soft delete를 적용하여, state가 참인 것만 조회 Related: #101 * feat: HandlerInterceptor를 통해 로그인 사용자가 작성자인지 검증 로직 구현 Related: #101 * fix: 오늘의 조합 수정 조회 API 수정 Related: #101 * fix: 오늘의 조합 수정처리 API 수정 Related: #101 * fix: CombinationService에서 Recommend 조회 Service 계층으로 변경 Related: #101 * fix: HandlerInterceptor 메서드에 적용 Related: #101 * fix: 오늘의 조합 작성 API 수정 recommendId를 2번 받는 문제 수정 Related: #101 * feat: 소셜 로그인 응답값 DTO 생성 및 반환 구현 Related: #101 * fix: 주간 베스트 조합 API에 @MemberObject 적용 Related: #101 * Fix: Recommend 도메인 Member어노테이션 추가 및 Soft Delete구현 (#103) * Fix: Controller 멤버 어노테이션 적용 * Fix: recommend hard delete -> soft delete * Refactor: 동일기능 DTO 통합 * Refactor: Recommend관련 errorstatus 수정 * FIX: 오늘의 조합 댓글 관련 API 및 로그인 사용자 정보 적용 (#108) * fix: CombinationExistValidator 수정 soft delete로 state가 true인 데이터 조회하기 Related: #105 * fix: CommentResponse DTO 수정 시간 포맷팅 적용 Related: #105 * fix: Comment 작성 API 수정 Related: #105 * fix: Comment Soft Delete 적용 및 Query Method 분리 Related: #105 * fix: CombinationImage 이미지 업로드 API 수정 업로드하는 이미지 검증하는 메서드 추가 Related: #105 * fix: comment 수정 응답 값 수정 Related: #105 * fix: 소셜 로그인 처리 후 Refresh Toekn 전달 방법 수정 (#111) logout, access Token 재발급 로직 추가 수정 Related: #109 * Fix : 마이페이지 API 수정 & 로그인 사용자 정보 어노테이션 추가 & 필요 없는 코드 정리 (#106) * feat: 마이페이지 수정, 마이페이지 조회, 내가 작성한 오늘의 조합 조회API * feat: 마이페이지 수정, 마이페이지 조회, 내가 작성한 오늘의 조합 조회API * feat: 좋아요 관련 API * fix: Apply @MemberObject * fix: Apply @MemberObject * fix: profile image upload api * feat: 회원 정보 조회 API --------- Co-authored-by: Minhyeok Song <125117389+minhyeokDev@users.noreply.github.com> * Fix: updateComment 반환 타입 수정 (#117) * Create README.md * Update README.md * fix: 댓글 조회 API 수정 및 CommentResult 수정 (#119) * fix: 댓글 조회 API 수정 및 CommentResult 수정 Related: #118 * fix: CommentResult memberProfile 정보 추가 Related: #118 * fit: 회원가입 및 로그인 시 응답값 추가 Related: #118 * fit: 오늘의 조합 댓글 삭제 시 commentCount 오류 수정 Related: #118 * FEAT : 메인 최상단 주간 베스트 조회 API & 메인 로테이션 오늘의 조합 조회 API & 메인 로테이션 레시피북 조회 API (#110) * feat: 메인 주간베스트 조합 랜덤 조회 API * feat: 오늘의 조합 로테이션 API, 레시피북 로테이션 API * refactor: 주간베스트조합 24시간 랜덤 적용 * Fix: 오늘의 조합 좋아요 멤버 어노테이션 적용 (#115) Related: #114 * [FEAT] 레시피북 Response 변경 (#120) * feat : recipe-image 순환참조 방지 순환참조를 방지하기 위해 recipe 객체는 반환하지 않습니다. Related #113 * feat : Recipe Response에 Page 정보 추가 Related #113 * feat : Recipe Page 정보 담아서 반환 Related #113 * main merge conflict 해결 * fix : memberName -> memberNickname 으로 변경 (#123) * main merge conflict 해결 * refactor : List Default값 추가 (#126) * fix : MemberObject 추가 (#128) Related #127 * Feature : 레시피북 해시태그 추가 (#129) * feat : RecipeHashTag 기본 구성 Related #112 * feat : Recipe Entity에 HashTagList 추가 Related #112 * feat : RecipeHashTag를 String 배열로 변환 Related #112 * refactor : HashTag Service 저장 로직 변경 - 코드의 재사용을 위해 기존 HashTag를 파싱하여 저장하는 부분을 메서드 추출하였습니다. Related #112 * feat : RecipeHashTag 저장 로직 Related #112 * refactor : recipeHashTagList 변수형 변경 수정 시 중복을 방지하기 위해 Set형으로 변경하였습니다. Related #112 * feat : RecipeHashTagList 반환 추가 Related #112 * feat : Recipe 저장에 HashTag 저장 추가 Related #112 * feat : RecipeHashTag 수정 로직 Related #112 * feat : RecipeHashTag 객체 중복저장 방지 Related #112 * feat : RecipeHashTag 삭제 기능 Related #112 * Fix: 주류 추천 ResponseDTO 변경 (#131) ResponseDTO에 recommendID추가 * FEAT : 메인 새로 출시된 주류 조회 API, 새로 출시된 주류 상세 조회 API, 새로 출시된 주류 리스트 조회 API, 새로 출시된 주류 타입별 조회 API (#133) * feat: 메인 주간베스트 조합 랜덤 조회 API * feat: 오늘의 조합 로테이션 API, 레시피북 로테이션 API * refactor: 주간베스트조합 24시간 랜덤 적용 * style * fix: soft delete & pagerequest * FIX: 오늘의 조합 홈 페이지, 상세보기, 댓글 작성 DTO 수정 (#135) * fix: 오늘의 조합 댓글조회 CommentResult 수정 updatedAt -> createdAt 생성 시간으로 변경 Related: #134 * fix: 오늘의 조합 상세보기 Response 수정 Member name -> nickname 변경 Related: #134 * Refactor : 레시피북 프론트 요청 (#138) * refactor : Recipe에서 info 칼럼 삭제 Related #136 * refactor : name 칼럼 이름 title로 변경 Related #136 * feat : RecipeComment에 작성/ 수정 시간 추가 Related #136 * refactor : 작성자 이름 -> 닉네임으로 변경 Related #136 * feat : Recipe Response 추가 / 변경 - memberImage, 댓글 개수 추가 Related #136 * feat : 레시피 검색 페이징 처리 Related #136 * feat : RecipeComment 페이징 처리, 자식 댓글 개수 추가 Ralted #136 * Refactor : 레시피북 프론트 요청 (#141) * refactor : RecipeLike에서 VO 삭제 - RecipeVO를 만드는 것이 가독성에 문제가 있어 삭제하였습니다. Related #136 * refactor : Recipe 도메인 관련 순환 자동 주입 방지 - 레시피 도메인 Servic들 끼리 서로 참조하여 순환 주입이 발생하였습니다. - Service -> 각 Repository로 변경하여 해결하였습니다. - MemberCommandServiceImpl에서 사용하지 않는 Recipe 도메인 자동주입자들 삭제해주었습니다 Related #136 * feat : RecipeResponseDTO에 유저의 좋아요 여부 표시 * feat : 유저의 레시피 정보 조회해 DTO 반환 Related #136 * feat : 조회 시 유저의 좋아요 여부 추가 Related #136 * Fix: Docker 컨테이너 시간 설정 (#142) * Fix: 오늘의 조합 좋아요 여부 로직 수정 (#144) * Fix: 이미지 생성 프롬프트 수정 (#146) * Fix: 오늘의 조합 API URL 및 댓글 DTO 수정 (#147) * fix: 오늘의 조합 작성 API 수정 recommedId 삭제 Related: #140 * fix: 오늘의 조합 작성 조회시 listSize 수정 listSize에서 자식 댓글가 카운트 안되는 오류 해결 Related: #140 * fix: Security setAllowedOrigins 수정 Related: #140 * fix: Security anyRequest 수정 Related: #140 * Refactor : 레시피 / 레시피 댓글에 유저 정보 추가 (#150) * refactor : 레시피 댓글에 유저 정보 추가 * refactor : 레시피 정보에 유저 정보 추가 * fix: CommentResult memberId 추가 (#152) Related: #151 * Fix: 검색 시 State True 게시글만 조회 (#154) * refactor: 좋아요 삭제 여부 반영 (#157) * Fix: 오늘의 조합/레시피 홈 조회시 생성일 순으로 내림차순 (#160) * Refactor/like (#162) * [Main Merge] 23회차 (#155) * Fix: ErrorStatus 수정 (#55) * [FEAT] 오늘의 조합 댓글 작성 API 개발 (#58) * feat : CombinationComment domain column 수정 Related: #50 * feat : CombinationComment Request, Response 작성 Related: #50 * feat : CombinationComment 에러 상태 추가 Related: #50 * feat : CombinationComment Service 구현 Related: #50 * feat : CombinationComment Controller 구현 Related: #50 * feat : 오늘의 조합 댓글 작성 시 Combination commentCount 증가 구현 Related: #50 * [FEAT] 오늘의 조합 댓글 조회 API 개발 (#59) * feat : CombinationComment 관련 DTO 작성 Related: #57 * feat : CombinationComment Service 구현 기존의 오늘의 조합 상세 조회 시 사용한 Paging 메서드 수정 Related: #57 * feat : CombinationComment Controller 구현 Related: #57 * feat : Paging Annotation & Validator 구현 Related: #57 * feat : Combination 존재 여부 검증하는 Annotation & Validator 구현 Related: #57 * Feat: 주류 추천 API (#61) * Feat: GPT API연동 및 프롬프트 엔지니어링 - GPT API 연동 - 프롬프트 엔지니어링 - Recommend 레포지토리 저장 TODO: 프롬프트 엔지니어링 성능 개선 * Feat: 주류 추천 이미지 생성 기능 * Feat: recommend validation 추가 * Fix: GPT 결과 Json형식으로 제한 * Fix: Conflict 사후처리 * Fix: PR comments 해결 * fix: Merge Conflict 해결 (#65) Related: #64 * FIX : 오늘의 조합 상세 조회에 CombinationImage, CombinationLike 정보 추가 전달 (#66) * fix: 오늘의 조합 상세 조회에 CombinationImage 정보 추가 전달 Related: #47 * fix: 오늘의 조합 상세 조회 API 좋아요 여부 데이터 추가 상세 조회 API시 좋아요 상태 정보 전달 Related: #47 * Feat: 오늘의 조합 댓글 수정 API 개발 (#67) * feat: CombinationComment Request, Response DTO 구현 Related: #60 * feat: CombinationComment CommandService 구현 Related: #60 * feat: CombinationComment Controller 구현 Related: #60 * Feat: 추천 삭제 API (#71) * Fix: #71 Merge conflict 놓친 부분 처리 * Feat: 주류 추천 리스트 API (#72) * Feat: 주류 추천 리스트 API * Fix: 리스트 조회 controller수정 Method: Post -> Get page, size -> RequestParameter로 입력 * Fix: Comment 처리 * Docs : 레시피 Swagger 설정 (#70) * docs : Recipe DTO Swagger 설정 Related #69 * docs : Recipe Controller Swagger 설정 Related #69 * docs : RecipeLike DTO Swagger 설정 Related #69 * docs : RecipeLike Controller Swagger 설정 Related #69 * docs : RecipeComment DTO Swagger 설정 Related #69 * docs : RecipeComment Controller Swagger 설정 Related #69 * Feat : 레시피 이미지 API (#73) * feat : RecipeRepository 생성 레시피 id로 모든 이미지를 찾는 메소드 추가 Relatd #53 * feat : RecipeImage Service 생성 & 해당 레시피 이미지 조회 Related #53 * feat : (GET) 해당 레시피 이미지 조회 API recipeId 파라미터로 해당 레시피의 이미지를 조회합니다. Related #53 * feat : Recipe Entity 빌드 메소드 추가 Recipe recipe, String imageUrl 를 받아 Entity를 빌드합니다. Related #53 * feat : 요청으로 들어온 Image가 없을 경우 예외처리 Related #53 * feat : 요청으로 들어온 image POST - Recipe 찾아온 후 - image 유무를 검증합니다. - s3에 이미지를 업로드하고 url을 받아옵니다. - Recipe Entity 들을 만들어 모두 저장합니다. Related #53 * feat : (POST) 레시피 이미지 등록 API form-data 형식 사용했습니다 Related #53 * feat : 레시피 이미지 url로 삭제 - 레시피 url로 RecipeImage를 찾습니다 - 없으면 에러를 발생시킵니다. - 있으면 repository에서 삭제하고 s3에서도 삭제합니다. Related #53 * feat : 레시피 이미지 수정 기능 - 1. 추가할 레시피 이미지가 있다면 업로드합니다 - 2. 삭제할 레시피 이미지가 있다면 삭제합니다 Related #53 * feat : (PATCH) 레시피 수정 API - 추가 업로드할 파일, 삭제할 파일 URL, RecipeID를 파라미터로 받습니다. Related #53 * feat : 레시피의 모든 이미지 삭제 레시피 id로 해당 레시피의 모든 이미지를 삭제합니다 Related #53 * feat : (DELETE) 레시피 이미지 삭제 API Related #53 * fix : ErrorStatus 유형 변경 ErrorStatus 사용이 잘못되어 수정하였습니다. Related #53 * Feat: 주간 베스트 조합 조회 API (#74) * Feat: #51 주간 베스트 조합 조회 API 구현 - Controller, Service, Repository 구현 - 좋아요 10개 이상 게시글 조회 * Feat: #51 주간 베스트 조합 조회 API 수정 - 좋아요 30개 이상 조회로 수정 * Feat: 오늘의 조합 댓글 삭제 API 구현 (#75) * feat: CombinationComment Response 작성 Related: #68 * feat: CombinationComment CommandService 구현 Related: #68 * feat: CombinationComment Controller 구현 Related: #68 * Feat: 오늘의 조합 좋아요 누르기 API (#77) * Feat: #75 오늘의 조합 좋아요 관련 API - changeCombinationLike 메서드 생성 * Feat: 조합 좋아요 엔티티 조회 메서드 구현 Related : #75 * Feat: Combination 엔티티 Like 관련 메서드 구현 Related : #75 * Feat: Combination 엔티티 Like 관련 메서드 구현 Related : #75 * Feat: Combination Entity 조회 메서드, CombinationLike 생성 메서드, CombinationLike 상태 변경 메서드 구현 Related : #75 * Feat: Long memberId로 받아오는 방식으로 수정 Related : #75 * Revert "Feat: Long memberId로 받아오는 방식으로 수정" This reverts commit 4dae9a6d7cd02e316f17cde0ef0acef88f792670. * Revert "Feat: Combination Entity 조회 메서드, CombinationLike 생성 메서드, CombinationLike 상태 변경 메서드 구현" This reverts commit ef2a48ae010cc766a23ea05f3402dafb35eee879. * Revert "Feat: Combination 엔티티 Like 관련 메서드 구현" This reverts commit 77530309fc9ab228ef223fdbd44b60e9da7f211d. * Revert "Feat: Combination 엔티티 Like 관련 메서드 구현" This reverts commit 7adc09f2ecd4570f091a2bdbde1d969be78b514e. * Revert "Feat: 조합 좋아요 엔티티 조회 메서드 구현" This reverts commit 2bab9c8ae969c73a544cb092e1bb8c5df7c980a6. * Revert "Feat: #75 오늘의 조합 좋아요 관련 API" This reverts commit 1a6ca0bcedb90d728e35ce2a237dd18b2e13c7aa. * Feat: Combination, CombinationLike 엔티티 메서드 추가 Related : #76 * Feat: findByCombinationAndMember 메서드 추가 Related : #76 * Feat: Service 구현 Related : #76 * Feat: Controller 구현 Related : #76 * Feat: 소셜 로그인 (Kakao, Naver) API 개발 (#78) * Feat : JwtProvider token 생성, 검증, 등록 구현 Related: #10 * Feat : SecurityConfig 1차 설정 Related: #10 * Feat : JwtAuthenticationFilter 구현 Jwt token 유효성 검증하는 필터 Related: #10 * Feat : OAuth2UserInfo 구현 카카오 사용자 정보 KakaoUserInfo 구현 Related: #10 * Feat : CustomOAuth2User, CustomOAuth2UserService 구현 소셜 로그인 및 회원가입을 처리하는 서비스 Related: #10 * Feat : OAuth2AuthenticationSuccessHandler, OAuth2Controller 구현 소셜 로그인 성공 시 토큰 생성 및 사용자 정보 전달하는 핸들러 작성 Related: #10 * Feat : SecurityConfig oauth2Login 설정 및 Member 속성 변경 Related: #10 * Feat : Redis에 Refresh Token 저장하기 서버 측 Redis에 Refresh Token을 저장하고, Cookie에 Refresh Token 담아 전달하기 Related: #10 * Feat : AccessToken 재발급 API 구현 Related: #10 * Feat: 네이버 소셜 로그인 구현 * docs: 도메인 적용 및 파일 수정 Related: #10 * feat: Security LogoutHandler 작성 Related: #10 * feat: AccessToken 재발급 API 재 구현 Related: #10 * feat: ErrorStatus 상태 추가 및 CookieUtil 수정 Related: #10 * feat: ErrorStatus 추가 및 파일 수정 Related: #78 --------- Co-authored-by: Blue-hyeon * fix: Merge conflict resolve (#81) Related: #80 * Update Member.java * Fix: swagger Failed to fetch 오류 해결 (#86) - server url 설정 Related: #85 * Feat: 타이틀로 검색 API (#89) * Feat: 오늘의 조합 홈 타이틀 검색 Related: #88 * Feat: 주간 베스트 조합 홈 타이틀 검색 Related: #88 * Feat: 레시피북 홈 타이틀 검색 - 코딩 컨벤션 반영 Related: #88 * Fix: 소셜 로그인 코드 수정 (#91) * Feat : JwtProvider token 생성, 검증, 등록 구현 Related: #10 * Feat : SecurityConfig 1차 설정 Related: #10 * Feat : JwtAuthenticationFilter 구현 Jwt token 유효성 검증하는 필터 Related: #10 * Feat : OAuth2UserInfo 구현 카카오 사용자 정보 KakaoUserInfo 구현 Related: #10 * Feat : CustomOAuth2User, CustomOAuth2UserService 구현 소셜 로그인 및 회원가입을 처리하는 서비스 Related: #10 * Feat : OAuth2AuthenticationSuccessHandler, OAuth2Controller 구현 소셜 로그인 성공 시 토큰 생성 및 사용자 정보 전달하는 핸들러 작성 Related: #10 * Feat : SecurityConfig oauth2Login 설정 및 Member 속성 변경 Related: #10 * Feat : Redis에 Refresh Token 저장하기 서버 측 Redis에 Refresh Token을 저장하고, Cookie에 Refresh Token 담아 전달하기 Related: #10 * Feat : AccessToken 재발급 API 구현 Related: #10 * Feat: 네이버 소셜 로그인 구현 * docs: 도메인 적용 및 파일 수정 Related: #10 * feat: Security LogoutHandler 작성 Related: #10 * feat: AccessToken 재발급 API 재 구현 Related: #10 * feat: ErrorStatus 상태 추가 및 CookieUtil 수정 Related: #10 * feat: ErrorStatus 추가 및 파일 수정 Related: #78 * feat: iOS 소셜 로그인 처리 후 전달 받는 AuthRequest 작성 Related: #10 * Docs: oauth2 패키지 삭제 Related: #10 * feat: 로그인 및 회원가입을 진행하는 AuthService 구현 Related: #10 * feat: LogoutHandler, JwtController 구현 Related: #10 * refactor: JwtProvider 만료 시간 및 파싱하는 데이터 수정 Related: #10 * refactor: SecurityConfig, JwtAuthenticationFilter URL, 인증 허가 경로 수정 Related: #10 --------- Co-authored-by: Blue-hyeon * Feat: Resolver추가 및 Member어노테이션 추가 (#97) * Feat : JwtProvider token 생성, 검증, 등록 구현 Related: #10 * Feat : SecurityConfig 1차 설정 Related: #10 * Feat : JwtAuthenticationFilter 구현 Jwt token 유효성 검증하는 필터 Related: #10 * Feat : OAuth2UserInfo 구현 카카오 사용자 정보 KakaoUserInfo 구현 Related: #10 * Feat : CustomOAuth2User, CustomOAuth2UserService 구현 소셜 로그인 및 회원가입을 처리하는 서비스 Related: #10 * Feat : OAuth2AuthenticationSuccessHandler, OAuth2Controller 구현 소셜 로그인 성공 시 토큰 생성 및 사용자 정보 전달하는 핸들러 작성 Related: #10 * Feat : SecurityConfig oauth2Login 설정 및 Member 속성 변경 Related: #10 * Feat : Redis에 Refresh Token 저장하기 서버 측 Redis에 Refresh Token을 저장하고, Cookie에 Refresh Token 담아 전달하기 Related: #10 * Feat : AccessToken 재발급 API 구현 Related: #10 * Feat: 네이버 소셜 로그인 구현 * docs: 도메인 적용 및 파일 수정 Related: #10 * feat: Security LogoutHandler 작성 Related: #10 * feat: AccessToken 재발급 API 재 구현 Related: #10 * feat: ErrorStatus 상태 추가 및 CookieUtil 수정 Related: #10 * feat: ErrorStatus 추가 및 파일 수정 Related: #78 * feat: iOS 소셜 로그인 처리 후 전달 받는 AuthRequest 작성 Related: #10 * Docs: oauth2 패키지 삭제 Related: #10 * feat: 로그인 및 회원가입을 진행하는 AuthService 구현 Related: #10 * feat: LogoutHandler, JwtController 구현 Related: #10 * refactor: JwtProvider 만료 시간 및 파싱하는 데이터 수정 Related: #10 * refactor: SecurityConfig, JwtAuthenticationFilter URL, 인증 허가 경로 수정 Related: #10 * Feat: resolver 추가 * Fix: Resolver 오류 수정 --------- Co-authored-by: hyungyeom Co-authored-by: Blue-hyeon Co-authored-by: kylo <103489352+kylo-dev@users.noreply.github.com> * Feat: MyPage 관련 API 모음 (#93) * feat: 마이페이지 수정, 마이페이지 조회, 내가 작성한 오늘의 조합 조회API * feat: 마이페이지 수정, 마이페이지 조회, 내가 작성한 오늘의 조합 조회API * feat: 좋아요 관련 API * Feat : 레시피 Count 변경 기능 추가 (#96) * feat : Recipe에서 LikeCount와 CommentCount 변경 넘겨받는 bool 값에 따라 더하거나 뺄 수 있도록 하였습니다. Related #95 * feat : RecipeLike 변경되면 LikeCount 변경 -기존 state가 true이면 삭제해야하므로 isDecrease에 저장합니다. - state 변경이후 isDecrease값 recipe에 넘겨줍니다. Related #95 * feat : RecipeLike 생성 시 LikeCount 증가 기존 상태 변경말고 새로 생성 시 LikeCount 증가시켜 주었습니다. Related #95 * feat : RecipeComment 삭제시 CommentCount 감소 Related #95 * feat : RecipeComment 삭제 시 이미 삭제된 Comment인지 에러처리 Related #95 * feat : ReicpeComment 삭제 시 CommentCount 감소 Related #95 * feat : RecipeComment 등록 시 CommentCount 증가 Related #95 * Feat : 레시피 페이징 (#94) * feat : RecipeRepository에서 page 기능 추가 Related #90 * feat : Recipe Service에서 페이징 기능 추가 Related #90 * refactor : Default Member 저장 방식 변경 Security 추가되어서 기존의 Member가 저장되지 않아 초기화 방식을 바꿨습니다. Related #90 * feat : (GET) Recipe 페이징 추가 Related #90 * feat : RecipeCommentRepository 페이징 추가 * feat : RecipeComment Service에서 페이징 기능 추가 Related #90 * feat : (GET) RecipeComment 페이징 기능 추가된 API Related #90 * Fix: Main Merge Conflict Resolve * Fix: Main Merge Conflict Resolve - RecipeController 수정 * Fix: 오늘의 조합 API 수정 & 로그인 사용자 정보 어노테이션 추가 & Soft Delete 적용 (#104) * fix: 오늘의 조합 홈 조회 DTO 수정 Related: #101 * fix: CombinationQueryService 수정 로그인 사용자 정보와 좋아요 여부 데이터 추가 Related: #101 * fix: CombinationController 오늘의 조합 API 수정 Related: #101 * fix: 오늘의 조합 상세보기 Controller, Service 수정 로그인 사용자 정보 추가 Related: #101 * fix: 오늘의 조합 상세보기에 HashTagOptionQueryService 적용 Related: #101 * fix: Response 코딩 컨벤션 적용 Related: #101 * fix: 오늘의 조합 작성 API Request, Response 수정 Related: #101 * fix: 오늘의 조합 작성 Controller, Service 수정 Related: #101 * fix: Combination 생성 메서드 Service에서 분리 Related: #101 * fix: Combination Soft Delete 적용 Related: #101 * fix: 오늘의 조합 홈, 상세조회 API 수정 soft delete를 적용하여, state가 참인 것만 조회 Related: #101 * feat: HandlerInterceptor를 통해 로그인 사용자가 작성자인지 검증 로직 구현 Related: #101 * fix: 오늘의 조합 수정 조회 API 수정 Related: #101 * fix: 오늘의 조합 수정처리 API 수정 Related: #101 * fix: CombinationService에서 Recommend 조회 Service 계층으로 변경 Related: #101 * fix: HandlerInterceptor 메서드에 적용 Related: #101 * fix: 오늘의 조합 작성 API 수정 recommendId를 2번 받는 문제 수정 Related: #101 * feat: 소셜 로그인 응답값 DTO 생성 및 반환 구현 Related: #101 * fix: 주간 베스트 조합 API에 @MemberObject 적용 Related: #101 * Fix: Recommend 도메인 Member어노테이션 추가 및 Soft Delete구현 (#103) * Fix: Controller 멤버 어노테이션 적용 * Fix: recommend hard delete -> soft delete * Refactor: 동일기능 DTO 통합 * Refactor: Recommend관련 errorstatus 수정 * FIX: 오늘의 조합 댓글 관련 API 및 로그인 사용자 정보 적용 (#108) * fix: CombinationExistValidator 수정 soft delete로 state가 true인 데이터 조회하기 Related: #105 * fix: CommentResponse DTO 수정 시간 포맷팅 적용 Related: #105 * fix: Comment 작성 API 수정 Related: #105 * fix: Comment Soft Delete 적용 및 Query Method 분리 Related: #105 * fix: CombinationImage 이미지 업로드 API 수정 업로드하는 이미지 검증하는 메서드 추가 Related: #105 * fix: comment 수정 응답 값 수정 Related: #105 * fix: 소셜 로그인 처리 후 Refresh Toekn 전달 방법 수정 (#111) logout, access Token 재발급 로직 추가 수정 Related: #109 * Fix : 마이페이지 API 수정 & 로그인 사용자 정보 어노테이션 추가 & 필요 없는 코드 정리 (#106) * feat: 마이페이지 수정, 마이페이지 조회, 내가 작성한 오늘의 조합 조회API * feat: 마이페이지 수정, 마이페이지 조회, 내가 작성한 오늘의 조합 조회API * feat: 좋아요 관련 API * fix: Apply @MemberObject * fix: Apply @MemberObject * fix: profile image upload api * feat: 회원 정보 조회 API --------- Co-authored-by: Minhyeok Song <125117389+minhyeokDev@users.noreply.github.com> * Fix: updateComment 반환 타입 수정 (#117) * Create README.md * Update README.md * fix: 댓글 조회 API 수정 및 CommentResult 수정 (#119) * fix: 댓글 조회 API 수정 및 CommentResult 수정 Related: #118 * fix: CommentResult memberProfile 정보 추가 Related: #118 * fit: 회원가입 및 로그인 시 응답값 추가 Related: #118 * fit: 오늘의 조합 댓글 삭제 시 commentCount 오류 수정 Related: #118 * FEAT : 메인 최상단 주간 베스트 조회 API & 메인 로테이션 오늘의 조합 조회 API & 메인 로테이션 레시피북 조회 API (#110) * feat: 메인 주간베스트 조합 랜덤 조회 API * feat: 오늘의 조합 로테이션 API, 레시피북 로테이션 API * refactor: 주간베스트조합 24시간 랜덤 적용 * Fix: 오늘의 조합 좋아요 멤버 어노테이션 적용 (#115) Related: #114 * [FEAT] 레시피북 Response 변경 (#120) * feat : recipe-image 순환참조 방지 순환참조를 방지하기 위해 recipe 객체는 반환하지 않습니다. Related #113 * feat : Recipe Response에 Page 정보 추가 Related #113 * feat : Recipe Page 정보 담아서 반환 Related #113 * main merge conflict 해결 * fix : memberName -> memberNickname 으로 변경 (#123) * main merge conflict 해결 * refactor : List Default값 추가 (#126) * fix : MemberObject 추가 (#128) Related #127 * Feature : 레시피북 해시태그 추가 (#129) * feat : RecipeHashTag 기본 구성 Related #112 * feat : Recipe Entity에 HashTagList 추가 Related #112 * feat : RecipeHashTag를 String 배열로 변환 Related #112 * refactor : HashTag Service 저장 로직 변경 - 코드의 재사용을 위해 기존 HashTag를 파싱하여 저장하는 부분을 메서드 추출하였습니다. Related #112 * feat : RecipeHashTag 저장 로직 Related #112 * refactor : recipeHashTagList 변수형 변경 수정 시 중복을 방지하기 위해 Set형으로 변경하였습니다. Related #112 * feat : RecipeHashTagList 반환 추가 Related #112 * feat : Recipe 저장에 HashTag 저장 추가 Related #112 * feat : RecipeHashTag 수정 로직 Related #112 * feat : RecipeHashTag 객체 중복저장 방지 Related #112 * feat : RecipeHashTag 삭제 기능 Related #112 * Fix: 주류 추천 ResponseDTO 변경 (#131) ResponseDTO에 recommendID추가 * FEAT : 메인 새로 출시된 주류 조회 API, 새로 출시된 주류 상세 조회 API, 새로 출시된 주류 리스트 조회 API, 새로 출시된 주류 타입별 조회 API (#133) * feat: 메인 주간베스트 조합 랜덤 조회 API * feat: 오늘의 조합 로테이션 API, 레시피북 로테이션 API * refactor: 주간베스트조합 24시간 랜덤 적용 * style * fix: soft delete & pagerequest * FIX: 오늘의 조합 홈 페이지, 상세보기, 댓글 작성 DTO 수정 (#135) * fix: 오늘의 조합 댓글조회 CommentResult 수정 updatedAt -> createdAt 생성 시간으로 변경 Related: #134 * fix: 오늘의 조합 상세보기 Response 수정 Member name -> nickname 변경 Related: #134 * Refactor : 레시피북 프론트 요청 (#138) * refactor : Recipe에서 info 칼럼 삭제 Related #136 * refactor : name 칼럼 이름 title로 변경 Related #136 * feat : RecipeComment에 작성/ 수정 시간 추가 Related #136 * refactor : 작성자 이름 -> 닉네임으로 변경 Related #136 * feat : Recipe Response 추가 / 변경 - memberImage, 댓글 개수 추가 Related #136 * feat : 레시피 검색 페이징 처리 Related #136 * feat : RecipeComment 페이징 처리, 자식 댓글 개수 추가 Ralted #136 * Refactor : 레시피북 프론트 요청 (#141) * refactor : RecipeLike에서 VO 삭제 - RecipeVO를 만드는 것이 가독성에 문제가 있어 삭제하였습니다. Related #136 * refactor : Recipe 도메인 관련 순환 자동 주입 방지 - 레시피 도메인 Servic들 끼리 서로 참조하여 순환 주입이 발생하였습니다. - Service -> 각 Repository로 변경하여 해결하였습니다. - MemberCommandServiceImpl에서 사용하지 않는 Recipe 도메인 자동주입자들 삭제해주었습니다 Related #136 * feat : RecipeResponseDTO에 유저의 좋아요 여부 표시 * feat : 유저의 레시피 정보 조회해 DTO 반환 Related #136 * feat : 조회 시 유저의 좋아요 여부 추가 Related #136 * Fix: Docker 컨테이너 시간 설정 (#142) * Fix: 오늘의 조합 좋아요 여부 로직 수정 (#144) * Fix: 이미지 생성 프롬프트 수정 (#146) * Fix: 오늘의 조합 API URL 및 댓글 DTO 수정 (#147) * fix: 오늘의 조합 작성 API 수정 recommedId 삭제 Related: #140 * fix: 오늘의 조합 작성 조회시 listSize 수정 listSize에서 자식 댓글가 카운트 안되는 오류 해결 Related: #140 * fix: Security setAllowedOrigins 수정 Related: #140 * fix: Security anyRequest 수정 Related: #140 * Refactor : 레시피 / 레시피 댓글에 유저 정보 추가 (#150) * refactor : 레시피 댓글에 유저 정보 추가 * refactor : 레시피 정보에 유저 정보 추가 * fix: CommentResult memberId 추가 (#152) Related: #151 * Fix: 검색 시 State True 게시글만 조회 (#154) --------- Co-authored-by: kylo <103489352+kylo-dev@users.noreply.github.com> Co-authored-by: SungHoon Jung <32007781+wooing1084@users.noreply.github.com> Co-authored-by: wooing1084 Co-authored-by: YASICJUNWOO <99794552+YASICJUNWOO@users.noreply.github.com> Co-authored-by: Blue-hyeon Co-authored-by: hyungyeom Co-authored-by: Lee seohyeon 이서현 <101540728+Blue-hyeon@users.noreply.github.com> * refactor: 좋아요 삭제 여부 반영 * [Main Merge] 24회차 (#158) * Fix: ErrorStatus 수정 (#55) * [FEAT] 오늘의 조합 댓글 작성 API 개발 (#58) * feat : CombinationComment domain column 수정 Related: #50 * feat : CombinationComment Request, Response 작성 Related: #50 * feat : CombinationComment 에러 상태 추가 Related: #50 * feat : CombinationComment Service 구현 Related: #50 * feat : CombinationComment Controller 구현 Related: #50 * feat : 오늘의 조합 댓글 작성 시 Combination commentCount 증가 구현 Related: #50 * [FEAT] 오늘의 조합 댓글 조회 API 개발 (#59) * feat : CombinationComment 관련 DTO 작성 Related: #57 * feat : CombinationComment Service 구현 기존의 오늘의 조합 상세 조회 시 사용한 Paging 메서드 수정 Related: #57 * feat : CombinationComment Controller 구현 Related: #57 * feat : Paging Annotation & Validator 구현 Related: #57 * feat : Combination 존재 여부 검증하는 Annotation & Validator 구현 Related: #57 * Feat: 주류 추천 API (#61) * Feat: GPT API연동 및 프롬프트 엔지니어링 - GPT API 연동 - 프롬프트 엔지니어링 - Recommend 레포지토리 저장 TODO: 프롬프트 엔지니어링 성능 개선 * Feat: 주류 추천 이미지 생성 기능 * Feat: recommend validation 추가 * Fix: GPT 결과 Json형식으로 제한 * Fix: Conflict 사후처리 * Fix: PR comments 해결 * fix: Merge Conflict 해결 (#65) Related: #64 * FIX : 오늘의 조합 상세 조회에 CombinationImage, CombinationLike 정보 추가 전달 (#66) * fix: 오늘의 조합 상세 조회에 CombinationImage 정보 추가 전달 Related: #47 * fix: 오늘의 조합 상세 조회 API 좋아요 여부 데이터 추가 상세 조회 API시 좋아요 상태 정보 전달 Related: #47 * Feat: 오늘의 조합 댓글 수정 API 개발 (#67) * feat: CombinationComment Request, Response DTO 구현 Related: #60 * feat: CombinationComment CommandService 구현 Related: #60 * feat: CombinationComment Controller 구현 Related: #60 * Feat: 추천 삭제 API (#71) * Fix: #71 Merge conflict 놓친 부분 처리 * Feat: 주류 추천 리스트 API (#72) * Feat: 주류 추천 리스트 API * Fix: 리스트 조회 controller수정 Method: Post -> Get page, size -> RequestParameter로 입력 * Fix: Comment 처리 * Docs : 레시피 Swagger 설정 (#70) * docs : Recipe DTO Swagger 설정 Related #69 * docs : Recipe Controller Swagger 설정 Related #69 * docs : RecipeLike DTO Swagger 설정 Related #69 * docs : RecipeLike Controller Swagger 설정 Related #69 * docs : RecipeComment DTO Swagger 설정 Related #69 * docs : RecipeComment Controller Swagger 설정 Related #69 * Feat : 레시피 이미지 API (#73) * feat : RecipeRepository 생성 레시피 id로 모든 이미지를 찾는 메소드 추가 Relatd #53 * feat : RecipeImage Service 생성 & 해당 레시피 이미지 조회 Related #53 * feat : (GET) 해당 레시피 이미지 조회 API recipeId 파라미터로 해당 레시피의 이미지를 조회합니다. Related #53 * feat : Recipe Entity 빌드 메소드 추가 Recipe recipe, String imageUrl 를 받아 Entity를 빌드합니다. Related #53 * feat : 요청으로 들어온 Image가 없을 경우 예외처리 Related #53 * feat : 요청으로 들어온 image POST - Recipe 찾아온 후 - image 유무를 검증합니다. - s3에 이미지를 업로드하고 url을 받아옵니다. - Recipe Entity 들을 만들어 모두 저장합니다. Related #53 * feat : (POST) 레시피 이미지 등록 API form-data 형식 사용했습니다 Related #53 * feat : 레시피 이미지 url로 삭제 - 레시피 url로 RecipeImage를 찾습니다 - 없으면 에러를 발생시킵니다. - 있으면 repository에서 삭제하고 s3에서도 삭제합니다. Related #53 * feat : 레시피 이미지 수정 기능 - 1. 추가할 레시피 이미지가 있다면 업로드합니다 - 2. 삭제할 레시피 이미지가 있다면 삭제합니다 Related #53 * feat : (PATCH) 레시피 수정 API - 추가 업로드할 파일, 삭제할 파일 URL, RecipeID를 파라미터로 받습니다. Related #53 * feat : 레시피의 모든 이미지 삭제 레시피 id로 해당 레시피의 모든 이미지를 삭제합니다 Related #53 * feat : (DELETE) 레시피 이미지 삭제 API Related #53 * fix : ErrorStatus 유형 변경 ErrorStatus 사용이 잘못되어 수정하였습니다. Related #53 * Feat: 주간 베스트 조합 조회 API (#74) * Feat: #51 주간 베스트 조합 조회 API 구현 - Controller, Service, Repository 구현 - 좋아요 10개 이상 게시글 조회 * Feat: #51 주간 베스트 조합 조회 API 수정 - 좋아요 30개 이상 조회로 수정 * Feat: 오늘의 조합 댓글 삭제 API 구현 (#75) * feat: CombinationComment Response 작성 Related: #68 * feat: CombinationComment CommandService 구현 Related: #68 * feat: CombinationComment Controller 구현 Related: #68 * Feat: 오늘의 조합 좋아요 누르기 API (#77) * Feat: #75 오늘의 조합 좋아요 관련 API - changeCombinationLike 메서드 생성 * Feat: 조합 좋아요 엔티티 조회 메서드 구현 Related : #75 * Feat: Combination 엔티티 Like 관련 메서드 구현 Related : #75 * Feat: Combination 엔티티 Like 관련 메서드 구현 Related : #75 * Feat: Combination Entity 조회 메서드, CombinationLike 생성 메서드, CombinationLike 상태 변경 메서드 구현 Related : #75 * Feat: Long memberId로 받아오는 방식으로 수정 Related : #75 * Revert "Feat: Long memberId로 받아오는 방식으로 수정" This reverts commit 4dae9a6d7cd02e316f17cde0ef0acef88f792670. * Revert "Feat: Combination Entity 조회 메서드, CombinationLike 생성 메서드, CombinationLike 상태 변경 메서드 구현" This reverts commit ef2a48ae010cc766a23ea05f3402dafb35eee879. * Revert "Feat: Combination 엔티티 Like 관련 메서드 구현" This reverts commit 77530309fc9ab228ef223fdbd44b60e9da7f211d. * Revert "Feat: Combination 엔티티 Like 관련 메서드 구현" This reverts commit 7adc09f2ecd4570f091a2bdbde1d969be78b514e. * Revert "Feat: 조합 좋아요 엔티티 조회 메서드 구현" This reverts commit 2bab9c8ae969c73a544cb092e1bb8c5df7c980a6. * Revert "Feat: #75 오늘의 조합 좋아요 관련 API" This reverts commit 1a6ca0bcedb90d728e35ce2a237dd18b2e13c7aa. * Feat: Combination, CombinationLike 엔티티 메서드 추가 Related : #76 * Feat: findByCombinationAndMember 메서드 추가 Related : #76 * Feat: Service 구현 Related : #76 * Feat: Controller 구현 Related : #76 * Feat: 소셜 로그인 (Kakao, Naver) API 개발 (#78) * Feat : JwtProvider token 생성, 검증, 등록 구현 Related: #10 * Feat : SecurityConfig 1차 설정 Related: #10 * Feat : JwtAuthenticationFilter 구현 Jwt token 유효성 검증하는 필터 Related: #10 * Feat : OAuth2UserInfo 구현 카카오 사용자 정보 KakaoUserInfo 구현 Related: #10 * Feat : CustomOAuth2User, CustomOAuth2UserService 구현 소셜 로그인 및 회원가입을 처리하는 서비스 Related: #10 * Feat : OAuth2AuthenticationSuccessHandler, OAuth2Controller 구현 소셜 로그인 성공 시 토큰 생성 및 사용자 정보 전달하는 핸들러 작성 Related: #10 * Feat : SecurityConfig oauth2Login 설정 및 Member 속성 변경 Related: #10 * Feat : Redis에 Refresh Token 저장하기 서버 측 Redis에 Refresh Token을 저장하고, Cookie에 Refresh Token 담아 전달하기 Related: #10 * Feat : AccessToken 재발급 API 구현 Related: #10 * Feat: 네이버 소셜 로그인 구현 * docs: 도메인 적용 및 파일 수정 Related: #10 * feat: Security LogoutHandler 작성 Related: #10 * feat: AccessToken 재발급 API 재 구현 Related: #10 * feat: ErrorStatus 상태 추가 및 CookieUtil 수정 Related: #10 * feat: ErrorStatus 추가 및 파일 수정 Related: #78 --------- Co-authored-by: Blue-hyeon * fix: Merge conflict resolve (#81) Related: #80 * Update Member.java * Fix: swagger Failed to fetch 오류 해결 (#86) - server url 설정 Related: #85 * Feat: 타이틀로 검색 API (#89) * Feat: 오늘의 조합 홈 타이틀 검색 Related: #88 * Feat: 주간 베스트 조합 홈 타이틀 검색 Related: #88 * Feat: 레시피북 홈 타이틀 검색 - 코딩 컨벤션 반영 Related: #88 * Fix: 소셜 로그인 코드 수정 (#91) * Feat : JwtProvider token 생성, 검증, 등록 구현 Related: #10 * Feat : SecurityConfig 1차 설정 Related: #10 * Feat : JwtAuthenticationFilter 구현 Jwt token 유효성 검증하는 필터 Related: #10 * Feat : OAuth2UserInfo 구현 카카오 사용자 정보 KakaoUserInfo 구현 Related: #10 * Feat : CustomOAuth2User, CustomOAuth2UserService 구현 소셜 로그인 및 회원가입을 처리하는 서비스 Related: #10 * Feat : OAuth2AuthenticationSuccessHandler, OAuth2Controller 구현 소셜 로그인 성공 시 토큰 생성 및 사용자 정보 전달하는 핸들러 작성 Related: #10 * Feat : SecurityConfig oauth2Login 설정 및 Member 속성 변경 Related: #10 * Feat : Redis에 Refresh Token 저장하기 서버 측 Redis에 Refresh Token을 저장하고, Cookie에 Refresh Token 담아 전달하기 Related: #10 * Feat : AccessToken 재발급 API 구현 Related: #10 * Feat: 네이버 소셜 로그인 구현 * docs: 도메인 적용 및 파일 수정 Related: #10 * feat: Security LogoutHandler 작성 Related: #10 * feat: AccessToken 재발급 API 재 구현 Related: #10 * feat: ErrorStatus 상태 추가 및 CookieUtil 수정 Related: #10 * feat: ErrorStatus 추가 및 파일 수정 Related: #78 * feat: iOS 소셜 로그인 처리 후 전달 받는 AuthRequest 작성 Related: #10 * Docs: oauth2 패키지 삭제 Related: #10 * feat: 로그인 및 회원가입을 진행하는 AuthService 구현 Related: #10 * feat: LogoutHandler, JwtController 구현 Related: #10 * refactor: JwtProvider 만료 시간 및 파싱하는 데이터 수정 Related: #10 * refactor: SecurityConfig, JwtAuthenticationFilter URL, 인증 허가 경로 수정 Related: #10 --------- Co-authored-by: Blue-hyeon * Feat: Resolver추가 및 Member어노테이션 추가 (#97) * Feat : JwtProvider token 생성, 검증, 등록 구현 Related: #10 * Feat : SecurityConfig 1차 설정 Related: #10 * Feat : JwtAuthenticationFilter 구현 Jwt token 유효성 검증하는 필터 Related: #10 * Feat : OAuth2UserInfo 구현 카카오 사용자 정보 KakaoUserInfo 구현 Related: #10 * Feat : CustomOAuth2User, CustomOAuth2UserService 구현 소셜 로그인 및 회원가입을 처리하는 서비스 Related: #10 * Feat : OAuth2AuthenticationSuccessHandler, OAuth2Controller 구현 소셜 로그인 성공 시 토큰 생성 및 사용자 정보 전달하는 핸들러 작성 Related: #10 * Feat : SecurityConfig oauth2Login 설정 및 Member 속성 변경 Related: #10 * Feat : Redis에 Refresh Token 저장하기 서버 측 Redis에 Refresh Token을 저장하고, Cookie에 Refresh Token 담아 전달하기 Related: #10 * Feat : AccessToken 재발급 API 구현 Related: #10 * Feat: 네이버 소셜 로그인 구현 * docs: 도메인 적용 및 파일 수정 Related: #10 * feat: Security LogoutHandler 작성 Related: #10 * feat: AccessToken 재발급 API 재 구현 Related: #10 * feat: ErrorStatus 상태 추가 및 CookieUtil 수정 Related: #10 * feat: ErrorStatus 추가 및 파일 수정 Related: #78 * feat: iOS 소셜 로그인 처리 후 전달 받는 AuthRequest 작성 Related: #10 * Docs: oauth2 패키지 삭제 Related: #10 * feat: 로그인 및 회원가입을 진행하는 AuthService 구현 Related: #10 * feat: LogoutHandler, JwtController 구현 Related: #10 * refactor: JwtProvider 만료 시간 및 파싱하는 데이터 수정 Related: #10 * refactor: SecurityConfig, JwtAuthenticationFilter URL, 인증 허가 경로 수정 Related: #10 * Feat: resolver 추가 * Fix: Resolver 오류 수정 --------- Co-authored-by: hyungyeom Co-authored-by: Blue-hyeon Co-authored-by: kylo <103489352+kylo-dev@users.noreply.github.com> * Feat: MyPage 관련 API 모음 (#93) * feat: 마이페이지 수정, 마이페이지 조회, 내가 작성한 오늘의 조합 조회API * feat: 마이페이지 수정, 마이페이지 조회, 내가 작성한 오늘의 조합 조회API * feat: 좋아요 관련 API * Feat : 레시피 Count 변경 기능 추가 (#96) * feat : Recipe에서 LikeCount와 CommentCount 변경 넘겨받는 bool 값에 따라 더하거나 뺄 수 있도록 하였습니다. Related #95 * feat : RecipeLike 변경되면 LikeCount 변경 -기존 state가 true이면 삭제해야하므로 isDecrease에 저장합니다. - state 변경이후 isDecrease값 recipe에 넘겨줍니다. Related #95 * feat : RecipeLike 생성 시 LikeCount 증가 기존 상태 변경말고 새로 생성 시 LikeCount 증가시켜 주었습니다. Related #95 * feat : RecipeComment 삭제시 CommentCount 감소 Related #95 * feat : RecipeComment 삭제 시 이미 삭제된 Comment인지 에러처리 Related #95 * feat : ReicpeComment 삭제 시 CommentCount 감소 Related #95 * feat : RecipeComment 등록 시 CommentCount 증가 Related #95 * Feat : 레시피 페이징 (#94) * feat : RecipeRepository에서 page 기능 추가 Related #90 * feat : Recipe Service에서 페이징 기능 추가 Related #90 * refactor : Default Member 저장 방식 변경 Security 추가되어서 기존의 Member가 저장되지 않아 초기화 방식을 바꿨습니다. Related #90 * feat : (GET) Recipe 페이징 추가 Related #90 * feat : RecipeCommentRepository 페이징 추가 * feat : RecipeComment Service에서 페이징 기능 추가 Related #90 * feat : (GET) RecipeComment 페이징 기능 추가된 API Related #90 * Fix: Main Merge Conflict Resolve * Fix: Main Merge Conflict Resolve - RecipeController 수정 * Fix: 오늘의 조합 API 수정 & 로그인 사용자 정보 어노테이션 추가 & Soft Delete 적용 (#104) * fix: 오늘의 조합 홈 조회 DTO 수정 Related: #101 * fix: CombinationQueryService 수정 로그인 사용자 정보와 좋아요 여부 데이터 추가 Related: #101 * fix: CombinationController 오늘의 조합 API 수정 Related: #101 * fix: 오늘의 조합 상세보기 Controller, Service 수정 로그인 사용자 정보 추가 Related: #101 * fix: 오늘의 조합 상세보기에 HashTagOptionQueryService 적용 Related: #101 * fix: Response 코딩 컨벤션 적용 Related: #101 * fix: 오늘의 조합 작성 API Request, Response 수정 Related: #101 * fix: 오늘의 조합 작성 Controller, Service 수정 Related: #101 * fix: Combination 생성 메서드 Service에서 분리 Related: #101 * fix: Combination Soft Delete 적용 Related: #101 * fix: 오늘의 조합 홈, 상세조회 API 수정 soft delete를 적용하여, state가 참인 것만 조회 Related: #101 * feat: HandlerInterceptor를 통해 로그인 사용자가 작성자인지 검증 로직 구현 Related: #101 * fix: 오늘의 조합 수정 조회 API 수정 Related: #101 * fix: 오늘의 조합 수정처리 API 수정 Related: #101 * fix: CombinationService에서 Recommend 조회 Service 계층으로 변경 Related: #101 * fix: HandlerInterceptor 메서드에 적용 Related: #101 * fix: 오늘의 조합 작성 API 수정 recommendId를 2번 받는 문제 수정 Related: #101 * feat: 소셜 로그인 응답값 DTO 생성 및 반환 구현 Related: #101 * fix: 주간 베스트 조합 API에 @MemberObject 적용 Related: #101 * Fix: Recommend 도메인 Member어노테이션 추가 및 Soft Delete구현 (#103) * Fix: Controller 멤버 어노테이션 적용 * Fix: recommend hard delete -> soft delete * Refactor: 동일기능 DTO 통합 * Refactor: Recommend관련 errorstatus 수정 * FIX: 오늘의 조합 댓글 관련 API 및 로그인 사용자 정보 적용 (#108) * fix: CombinationExistValidator 수정 soft delete로 state가 true인 데이터 조회하기 Related: #105 * fix: CommentResponse DTO 수정 시간 포맷팅 적용 Related: #105 * fix: Comment 작성 API 수정 Related: #105 * fix: Comment Soft Delete 적용 및 Query Method 분리 Related: #105 * fix: CombinationImage 이미지 업로드 API 수정 업로드하는 이미지 검증하는 메서드 추가 Related: #105 * fix: comment 수정 응답 값 수정 Related: #105 * fix: 소셜 로그인 처리 후 Refresh Toekn 전달 방법 수정 (#111) logout, access Token 재발급 로직 추가 수정 Related: #109 * Fix : 마이페이지 API 수정 & 로그인 사용자 정보 어노테이션 추가 & 필요 없는 코드 정리 (#106) * feat: 마이페이지 수정, 마이페이지 조회, 내가 작성한 오늘의 조합 조회API * feat: 마이페이지 수정, 마이페이지 조회, 내가 작성한 오늘의 조합 조회API * feat: 좋아요 관련 API * fix: Apply @MemberObject * fix: Apply @MemberObject * fix: profile image upload api * feat: 회원 정보 조회 API --------- Co-authored-by: Minhyeok Song <125117389+minhyeokDev@users.noreply.github.com> * Fix: updateComment 반환 타입 수정 (#117) * Create README.md * Update README.md * fix: 댓글 조회 API 수정 및 CommentResult 수정 (#119) * fix: 댓글 조회 API 수정 및 CommentResult 수정 Related: #118 * fix: CommentResult memberProfile 정보 추가 Related: #118 * fit: 회원가입 및 로그인 시 응답값 추가 Related: #118 * fit: 오늘의 조합 댓글 삭제 시 commentCount 오류 수정 Related: #118 * FEAT : 메인 최상단 주간 베스트 조회 API & 메인 로테이션 오늘의 조합 조회 API & 메인 로테이션 레시피북 조회 API (#110) * feat: 메인 주간베스트 조합 랜덤 조회 API * feat: 오늘의 조합 로테이션 API, 레시피북 로테이션 API * refactor: 주간베스트조합 24시간 랜덤 적용 * Fix: 오늘의 조합 좋아요 멤버 어노테이션 적용 (#115) Related: #114 * [FEAT] 레시피북 Response 변경 (#120) * feat : recipe-image 순환참조 방지 순환참조를 방지하기 위해 recipe 객체는 반환하지 않습니다. Related #113 * feat : Recipe Response에 Page 정보 추가 Related #113 * feat : Recipe Page 정보 담아서 반환 Related #113 * main merge conflict 해결 * fix : memberName -> memberNickname 으로 변경 (#123) * main merge conflict 해결 * refactor : List Default값 추가 (#126) * fix : MemberObject 추가 (#128) Related #127 * Feature : 레시피북 해시태그 추가 (#129) * feat : RecipeHashTag 기본 구성 Related #112 * feat : Recipe Entity에 HashTagList 추가 Related #112 * feat : RecipeHashTag를 String 배열로 변환 Related #112 * refactor : HashTag Service 저장 로직 변경 - 코드의 재사용을 위해 기존 HashTag를 파싱하여 저장하는 부분을 메서드 추출하였습니다. Related #112 * feat : RecipeHashTag 저장 로직 Related #112 * refactor : recipeHashTagList 변수형 변경 수정 시 중복을 방지하기 위해 Set형으로 변경하였습니다. Related #112 * feat : RecipeHashTagList 반환 추가 Related #112 * feat : Recipe 저장에 HashTag 저장 추가 Related #112 * feat : RecipeHashTag 수정 로직 Related #112 * feat : RecipeHashTag 객체 중복저장 방지 Related #112 * feat : RecipeHashTag 삭제 기능 Related #112 * Fix: 주류 추천 ResponseDTO 변경 (#131) ResponseDTO에 recommendID추가 * FEAT : 메인 새로 출시된 주류 조회 API, 새로 출시된 주류 상세 조회 API, 새로 출시된 주류 리스트 조회 API, 새로 출시된 주류 타입별 조회 API (#133) * feat: 메인 주간베스트 조합 랜덤 조회 API * feat: 오늘의 조합 로테이션 API, 레시피북 로테이션 API * refactor: 주간베스트조합 24시간 랜덤 적용 * style * fix: soft delete & pagerequest * FIX: 오늘의 조합 홈 페이지, 상세보기, 댓글 작성 DTO 수정 (#135) * fix: 오늘의 조합 댓글조회 CommentResult 수정 updatedAt -> createdAt 생성 시간으로 변경 Related: #134 * fix: 오늘의 조합 상세보기 Response 수정 Member name -> nickname 변경 Related: #134 * Refactor : 레시피북 프론트 요청 (#138) * refactor : Recipe에서 info 칼럼 삭제 Related #136 * refactor : name 칼럼 이름 title로 변경 Related #136 * feat : RecipeComment에 작성/ 수정 시간 추가 Related #136 * refactor : 작성자 이름 -> 닉네임으로 변경 Related #136 * feat : Recipe Response 추가 / 변경 - memberImage, 댓글 개수 추가 Related #136 * feat : 레시피 검색 페이징 처리 Related #136 * feat : RecipeComment 페이징 처리, 자식 댓글 개수 추가 Ralted #136 * Refactor : 레시피북 프론트 요청 (#141) * refactor : RecipeLike에서 VO 삭제 - RecipeVO를 만드는 것이 가독성에 문제가 있어 삭제하였습니다. Related #136 * refactor : Recipe 도메인 관련 순환 자동 주입 방지 - 레시피 도메인 Servic들 끼리 서로 참조하여 순환 주입이 발생하였습니다. - Service -> 각 Repository로 변경하여 해결하였습니다. - MemberCommandServiceImpl에서 사용하지 않는 Recipe 도메인 자동주입자들 삭제해주었습니다 Related #136 * feat : RecipeResponseDTO에 유저의 좋아요 여부 표시 * feat : 유저의 레시피 정보 조회해 DTO 반환 Related #136 * feat : 조회 시 유저의 좋아요 여부 추가 Related #136 * Fix: Docker 컨테이너 시간 설정 (#142) * Fix: 오늘의 조합 좋아요 여부 로직 수정 (#144) * Fix: 이미지 생성 프롬프트 수정 (#146) * Fix: 오늘의 조합 API URL 및 댓글 DTO 수정 (#147) * fix: 오늘의 조합 작성 API 수정 recommedId 삭제 Related: #140 * fix: 오늘의 조합 작성 조회시 listSize 수정 listSize에서 자식 댓글가 카운트 안되는 오류 해결 Related: #140 * fix: Security setAllowedOrigins 수정 Related: #140 * fix: Security anyRequest 수정 Related: #140 * Refactor : 레시피 / 레시피 댓글에 유저 정보 추가 (#150) * refactor : 레시피 댓글에 유저 정보 추가 * refactor : 레시피 정보에 유저 정보 추가 * fix: CommentResult memberId 추가 (#152) Related: #151 * Fix: 검색 시 State True 게시글만 조회 (#154) * refactor: 좋아요 삭제 여부 반영 (#157) --------- Co-authored-by: kylo <103489352+kylo-dev@users.noreply.github.com> Co-authored-by: SungHoon Jung <32007781+wooing1084@users.noreply.github.com> Co-authored-by: wooing1084 Co-authored-by: YASICJUNWOO <99794552+YASICJUNWOO@users.noreply.github.com> Co-authored-by: Blue-hyeon Co-authored-by: hyungyeom Co-authored-by: Lee seohyeon 이서현 <101540728+Blue-hyeon@users.noreply.github.com> * [Main Merge] 25회차 (#161) * Fix: ErrorStatus 수정 (#55) * [FEAT] 오늘의 조합 댓글 작성 API 개발 (#58) * feat : CombinationComment domain column 수정 Related: #50 * feat : CombinationComment Request, Response 작성 Related: #50 * feat : CombinationComment 에러 상태 추가 Related: #50 * feat : CombinationComment Service 구현 Related: #50 * feat : CombinationComment Controller 구현 Related: #50 * feat : 오늘의 조합 댓글 작성 시 Combination commentCount 증가 구현 Related: #50 * [FEAT] 오늘의 조합 댓글 조회 API 개발 (#59) * feat : CombinationComment 관련 DTO 작성 Related: #57 * feat : CombinationComment Service 구현 기존의 오늘의 조합 상세 조회 시 사용한 Paging 메서드 수정 Related: #57 * feat : CombinationComment Controller 구현 Related: #57 * feat : Paging Annotation & Validator 구현 Related: #57 * feat : Combination 존재 여부 검증하는 Annotation & Validator 구현 Related: #57 * Feat: 주류 추천 API (#61) * Feat: GPT API연동 및 프롬프트 엔지니어링 - GPT API 연동 - 프롬프트 엔지니어링 - Recommend 레포지토리 저장 TODO: 프롬프트 엔지니어링 성능 개선 * Feat: 주류 추천 이미지 생성 기능 * Feat: recommend validation 추가 * Fix: GPT 결과 Json형식으로 제한 * Fix: Conflict 사후처리 * Fix: PR comments 해결 * fix: Merge Conflict 해결 (#65) Related: #64 * FIX : 오늘의 조합 상세 조회에 CombinationImage, CombinationLike 정보 추가 전달 (#66) * fix: 오늘의 조합 상세 조회에 CombinationImage 정보 추가 전달 Related: #47 * fix: 오늘의 조합 상세 조회 API 좋아요 여부 데이터 추가 상세 조회 API시 좋아요 상태 정보 전달 Related: #47 * Feat: 오늘의 조합 댓글 수정 API 개발 (#67) * feat: CombinationComment Request, Response DTO 구현 Related: #60 * feat: CombinationComment CommandService 구현 Related: #60 * feat: CombinationComment Controller 구현 Related: #60 * Feat: 추천 삭제 API (#71) * Fix: #71 Merge conflict 놓친 부분 처리 * Feat: 주류 추천 리스트 API (#72) * Feat: 주류 추천 리스트 API * Fix: 리스트 조회 controller수정 Method: Post -> Get page, size -> RequestParameter로 입력 * Fix: Comment 처리 * Docs : 레시피 Swagger 설정 (#70) * docs : Recipe DTO Swagger 설정 Related #69 * docs : Recipe Controller Swagger 설정 Related #69 * docs : RecipeLike DTO Swagger 설정 Related #69 * docs : RecipeLike Controller Swagger 설정 Related #69 * docs : RecipeComment DTO Swagger 설정 Related #69 * docs : RecipeComment Controller Swagger 설정 Related #69 * Feat : 레시피 이미지 API (#73) * feat : RecipeRepository 생성 레시피 id로 모든 이미지를 찾는 메소드 추가 Relatd #53 * feat : RecipeImage Service 생성 & 해당 레시피 이미지 조회 Related #53 * feat : (GET) 해당 레시피 이미지 조회 API recipeId 파라미터로 해당 레시피의 이미지를 조회합니다. Related #53 * feat : Recipe Entity 빌드 메소드 추가 Recipe recipe, String imageUrl 를 받아 Entity를 빌드합니다. Related #53 * feat : 요청으로 들어온 Image가 없을 경우 예외처리 Related #53 * feat : 요청으로 들어온 image POST - Recipe 찾아온 후 - image 유무를 검증합니다. - s3에 이미지를 업로드하고 url을 받아옵니다. - Recipe Entity 들을 만들어 모두 저장합니다. Related #53 * feat : (POST) 레시피 이미지 등록 API form-data 형식 사용했습니다 Related #53 * feat : 레시피 이미지 url로 삭제 - 레시피 url로 RecipeImage를 찾습니다 - 없으면 에러를 발생시킵니다. - 있으면 repository에서 삭제하고 s3에서도 삭제합니다. Related #53 * feat : 레시피 이미지 수정 기능 - 1. 추가할 레시피 이미지가 있다면 업로드합니다 - 2. 삭제할 레시피 이미지가 있다면 삭제합니다 Related #53 * feat : (PATCH) 레시피 수정 API - 추가 업로드할 파일, 삭제할 파일 URL, RecipeID를 파라미터로 받습니다. Related #53 * feat : 레시피의 모든 이미지 삭제 레시피 id로 해당 레시피의 모든 이미지를 삭제합니다 Related #53 * feat : (DELETE) 레시피 이미지 삭제 API Related #53 * fix : ErrorStatus 유형 변경 ErrorStatus 사용이 잘못되어 수정하였습니다. Related #53 * Feat: 주간 베스트 조합 조회 API (#74) * Feat: #51 주간 베스트 조합 조회 API 구현 - Controller, Service, Repository 구현 - 좋아요 10개 이상 게시글 조회 * Feat: #51 주간 베스트 조합 조회 API 수정 - 좋아요 30개 이상 조회로 수정 * Feat: 오늘의 조합 댓글 삭제 API 구현 (#75) * feat: CombinationComment Response 작성 Related: #68 * feat: CombinationComment CommandService 구현 Related: #68 * feat: CombinationComment Controller 구현 Related: #68 * Feat: 오늘의 조합 좋아요 누르기 API (#77) * Feat: #75 오늘의 조합 좋아요 관련 API - changeCombinationLike 메서드 생성 * Feat: 조합 좋아요 엔티티 조회 메서드 구현 Related : #75 * Feat: Combination 엔티티 Like 관련 메서드 구현 Related : #75 * Feat: Combination 엔티티 Like 관련 메서드 구현 Related : #75 * Feat: Combination Entity 조회 메서드, CombinationLike 생성 메서드, CombinationLike 상태 변경 메서드 구현 Related : #75 * Feat: Long memberId로 받아오는 방식으로 수정 Related : #75 * Revert "Feat: Long memberId로 받아오는 방식으로 수정" This reverts commit 4dae9a6d7cd02e316f17cde0ef0acef88f792670. * Revert "Feat: Combination Entity 조회 메서드, CombinationLike 생성 메서드, CombinationLike 상태 변경 메서드 구현" This reverts commit ef2a48ae010cc766a23ea05f3402dafb35eee879. * Revert "Feat: Combination 엔티티 Like 관련 메서드 구현" This reverts commit 77530309fc9ab228ef223fdbd44b60e9da7f211d. * Revert "Feat: Combination 엔티티 Like 관련 메서드 구현" This reverts commit 7adc09f2ecd4570f091a2bdbde1d969be78b514e. * Revert "Feat: 조합 좋아요 엔티티 조회 메서드 구현" This reverts commit 2bab9c8ae969c73a544cb092e1bb8c5df7c980a6. * Revert "Feat: #75 오늘의 조합 좋아요 관련 API" This reverts commit 1a6ca0bcedb90d728e35ce2a237dd18b2e13c7aa. * Feat: Combination, CombinationLike 엔티티 메서드 추가 Related : #76 * Feat: findByCombinationAndMember 메서드 추가 Related : #76 * Feat: Service 구현 Related : #76 * Feat: Controller 구현 Related : #76 * Feat: 소셜 로그인 (Kakao, Naver) API 개발 (#78) * Feat : JwtProvider token 생성, 검증, 등록 구현 Related: #10 * Feat : SecurityConfig 1차 설정 Related: #10 * Feat : JwtAuthenticationFilter 구현 Jwt token 유효성 검증하는 필터 Related: #10 * Feat : OAuth2UserInfo 구현 카카오 사용자 정보 KakaoUserInfo 구현 Related: #10 * Feat : CustomOAuth2User, CustomOAuth2UserService 구현 소셜 로그인 및 회원가입을 처리하는 서비스 Related: #10 * Feat : OAuth2AuthenticationSuccessHandler, OAuth2Controller 구현 소셜 로그인 성공 시 토큰 생성 및 사용자 정보 전달하는 핸들러 작성 Related: #10 * Feat : SecurityConfig oauth2Login 설정 및 Member 속성 변경 Related: #10 * Feat : Redis에 Refresh Token 저장하기 서버 측 Redis에 Refresh Token을 저장하고, Cookie에 Refresh Token 담아 전달하기 Related: #10 * Feat : AccessToken 재발급 API 구현 Related: #10 * Feat: 네이버 소셜 로그인 구현 * docs: 도메인 적용 및 파일 수정 Related: #10 * feat: Security LogoutHandler 작성 Related: #10 * feat: AccessToken 재발급 API 재 구현 Related: #10 * feat: ErrorStatus 상태 추가 및 CookieUtil 수정 Related: #10 * feat: ErrorStatus 추가 및 파일 수정 Related: #78 --------- Co-authored-by: Blue-hyeon * fix: Merge conflict resolve (#81) Related: #80 * Update Member.java * Fix: swagger Failed to fetch 오류 해결 (#86) - server url 설정 Related: #85 * Feat: 타이틀로 검색 API (#89) * Feat: 오늘의 조합 홈 타이틀 검색 Related: #88 * Feat: 주간 베스트 조합 홈 타이틀 검색 Related: #88 * Feat: 레시피북 홈 타이틀 검색 - 코딩 컨벤션 반영 Related: #88 * Fix: 소셜 로그인 코드 수정 (#91) * Feat : JwtProvider token 생성, 검증, 등록 구현 Related: #10 * Feat : SecurityConfig 1차 설정 Related: #10 * Feat : JwtAuthenticationFilter 구현 Jwt token 유효성 검증하는 필터 Related: #10 * Feat : OAuth2UserInfo 구현 카카오 사용자 정보 KakaoUserInfo 구현 Related: #10 * Feat : CustomOAuth2User, CustomOAuth2UserService 구현 소셜 로그인 및 회원가입을 처리하는 서비스 Related: #10 * Feat : OAuth2AuthenticationSuccessHandler, OAuth2Controller 구현 소셜 로그인 성공 시 토큰 생성 및 사용자 정보 전달하는 핸들러 작성 Related: #10 * Feat : SecurityConfig oauth2Login 설정 및 Member 속성 변경 Related: #10 * Feat : Redis에 Refresh Token 저장하기 서버 측 Redis에 Refresh Token을 저장하고, Cookie에 Refresh Token 담아 전달하기 Related: #10 * Feat : AccessToken 재발급 API 구현 Related: #10 * Feat: 네이버 소셜 로그인 구현 * docs: 도메인 적용 및 파일 수정 Related: #10 * feat: Security LogoutHandler 작성 Related: #10 * feat: AccessToken 재발급 API 재 구현 Related: #10 * feat: ErrorStatus 상태 추가 및 CookieUtil 수정 Related: #10 * feat: ErrorStatus 추가 및 파일 수정 Related: #78 * feat: iOS 소셜 로그인 처리 후 전달 받는 AuthRequest 작성 Related: #10 * Docs: oauth2 패키지 삭제 Related: #10 * feat: 로그인 및 회원가입을 진행하는 AuthService 구현 Related: #10 * feat: LogoutHandler, JwtController 구현 Related: #10 * refactor: JwtProvider 만료 시간 및 파싱하는 데이터 수정 Related: #10 * refactor: SecurityConfig, JwtAuthenticationFilter URL, 인증 허가 경로 수정 Related: #10 --------- Co-authored-by: Blue-hyeon * Feat: Resolver추가 및 Member어노테이션 추가 (#97) * Feat : JwtProvider token 생성, 검증, 등록 구현 Related: #10 * Feat : SecurityConfig 1차 설정 Related: #10 * Feat : JwtAuthenticationFilter 구현 Jwt token 유효성 검증하는 필터 Related: #10 * Feat : OAuth2UserInfo 구현 카카오 사용자 정보 KakaoUserInfo 구현 Related: #10 * Feat : CustomOAuth2User, CustomOAuth2UserService 구현 소셜 로그인 및 회원가입을 처리하는 서비스 Related: #10 * Feat : OAuth2AuthenticationSuccessHandler, OAuth2Controller 구현 소셜 로그인 성공 시 토큰 생성 및 사용자 정보 전달하는 핸들러 작성 Related: #10 * Feat : SecurityConfig oauth2Login 설정 및 Member 속성 변경 Related: #10 * Feat : Redis에 Refresh Token 저장하기 서버 측 Redis에 Refresh Token을 저장하고, Cookie에 Refresh Token 담아 전달하기 Related: #10 * Feat : AccessToken 재발급 API 구현 Related: #10 * Feat: 네이버 소셜 로그인 구현 * docs: 도메인 적용 및 파일 수정 Related: #10 * feat: Security LogoutHandler 작성 Related: #10 * feat: AccessToken 재발급 API 재 구현 Related: #10 * feat: ErrorStatus 상태 추가 및 CookieUtil 수정 Related: #10 * feat: ErrorStatus 추가 및 파일 수정 Related: #78 * feat: iOS 소셜 로그인 처리 후 전달 받는 AuthRequest 작성 Related: #10 * Docs: oauth2 패키지 삭제 Related: #10 * feat: 로그인 및 회원가입을 진행하는 AuthService 구현 Related: #10 * feat: LogoutHandler, JwtController 구현 Related: #10 * refactor: JwtProvider 만료 시간 및 파싱하는 데이터 수정 Related: #10 * refactor: SecurityConfig, JwtAuthenticationFilter URL, 인증 허가 경로 수정 Related: #10 * Feat: resolver 추가 * Fix: Resolver 오류 수정 --------- Co-authored-by: hyungyeom Co-authored-by: Blue-hyeon Co-authored-by: kylo <103489352+kylo-dev@users.noreply.github.com> * Feat: MyPage 관련 API 모음 (#93) * feat: 마이페이지 수정, 마이페이지 조회, 내가 작성한 오늘의 조합 조회API * feat: 마이페이지 수정, 마이페이지 조회, 내가 작성한 오늘의 조합 조회API * feat: 좋아요 관련 API * Feat : 레시피 Count 변경 기능 추가 (#96) * feat : Recipe에서 LikeCount와 CommentCount 변경 넘겨받는 bool 값에 따라 더하거나 뺄 수 있도록 하였습니다. Related #95 * feat : RecipeLike 변경되면 LikeCount 변경 -기존 state가 true이면 삭제해야하므로 isDecrease에 저장합니다. - state 변경이후 isDecrease값 recipe에 넘겨줍니다. Related #95 * feat : RecipeLike 생성 시 LikeCount 증가 기존 상태 변경말고 새로 생성 시 LikeCount 증가시켜 주었습니다. Related #95 * feat : RecipeComment 삭제시 CommentCount 감소 Related #95 * feat : RecipeComment 삭제 시 이미 삭제된 Comment인지 에러처리 Related #95 * feat : ReicpeComment 삭제 시 CommentCount 감소 Related #95 * feat : RecipeComment 등록 시 CommentCount 증가 Related #95 * Feat : 레시피 페이징 (#94) * feat : RecipeRepository에서 page 기능 추가 Related #90 * feat : Recipe Service에서 페이징 기능 추가 Related #90 * refactor : Default Member 저장 방식 변경 Security 추가되어서 기존의 Member가 저장되지 않아 초기화 방식을 바꿨습니다. Related #90 * feat : (GET) Recipe 페이징 추가 Related #90 * feat : RecipeCommentRepository 페이징 추가 * feat : RecipeComment Service에서 페이징 기능 추가 Related #90 * feat : (GET) RecipeComment 페이징 기능 추가된 API Related #90 * Fix: Main Merge Conflict Resolve * Fix: Main Merge Conflict Resolve - RecipeController 수정 * Fix: 오늘의 조합 API 수정 & 로그인 사용자 정보 어노테이션 추가 & Soft Delete 적용 (#104) * fix: 오늘의 조합 홈 조회 DTO 수정 Related: #101 * fix: CombinationQueryService 수정 로그인 사용자 정보와 좋아요 여부 데이터 추가 Related: #101 * fix: CombinationController 오늘의 조합 API 수정 Related: #101 * fix: 오늘의 조합 상세보기 Controller, Service 수정 로그인 사용자 정보 추가 Related: #101 * fix: 오늘의 조합 상세보기에 HashTagOptionQueryService 적용 Related: #101 * fix: Response 코딩 컨벤션 적용 Related: #101 * fix: 오늘의 조합 작성 API Request, Response 수정 Related: #101 * fix: 오늘의 조합 작성 Controller, Service 수정 Related: #101 * fix: Combination 생성 메서드 Service에서 분리 Related: #101 * fix: Combination Soft Delete 적용 Related: #101 * fix: 오늘의 조합 홈, 상세조회 API 수정 soft delete를 적용하여, state가 참인 것만 조회 Related: #101 * feat: HandlerInterceptor를 통해 로그인 사용자가 작성자인지 검증 로직 구현 Related: #101 * fix: 오늘의 조합 수정 조회 API 수정 Related: #101 * fix: 오늘의 조합 수정처리 API 수정 Related: #101 * fix: CombinationService에서 Recommend 조회 Service 계층으로 변경 Related: #101 * fix: HandlerInterceptor 메서드에 적용 Related: #101 * fix: 오늘의 조합 작성 API 수정 recommendId를 2번 받는 문제 수정 Related: #101 * feat: 소셜 로그인 응답값 DTO 생성 및 반환 구현 Related: #101 * fix: 주간 베스트 조합 API에 @MemberObject 적용 Related: #101 * Fix: Recommend 도메인 Member어노테이션 추가 및 Soft Delete구현 (#103) * Fix: Controller 멤버 어노테이션 적용 * Fix: recommend hard delete -> soft delete * Refactor: 동일기능 DTO 통합 * Refactor: Recommend관련 errorstatus 수정 * FIX: 오늘의 조합 댓글 관련 API 및 로그인 사용자 정보 적용 (#108) * fix: CombinationExistValidator 수정 soft delete로 state가 true인 데이터 조회하기 Related: #105 * fix: CommentResponse DTO 수정 시간 포맷팅 적용 Related: #105 * fix: Comment 작성 API 수정 Related: #105 * fix: Comment Soft Delete 적용 및 Query Method 분리 Related: #105 * fix: CombinationImage 이미지 업로드 API 수정 업로드하는 이미지 검증하는 메서드 추가 Related: #105 * fix: comment 수정 응답 값 수정 Related: #105 * fix: 소셜 로그인 처리 후 Refresh Toekn 전달 방법 수정 (#111) logout, access Token 재발급 로직 추가 수정 Related: #109 * Fix : 마이페이지 API 수정 & 로그인 사용자 정보 어노테이션 추가 & 필요 없는 코드 정리 (#106) * feat: 마이페이지 수정, 마이페이지 조회, 내가 작성한 오늘의 조합 조회API * feat: 마이페이지 수정, 마이페이지 조회, 내가 작성한 오늘의 조합 조회API * feat: 좋아요 관련 API * fix: Apply @MemberObject * fix: Apply @MemberObject * fix: profile image upload api * feat: 회원 정보 조회 API --------- Co-authored-by: Minhyeok Song <125117389+minhyeokDev@users.noreply.github.com> * Fix: updateComment 반환 타입 수정 (#117) * Create README.md * Update README.md * fix: 댓글 조회 API 수정 및 CommentResult 수정 (#119) * fix: 댓글 조회 API 수정 및 CommentResult 수정 Related: #118 * fix: CommentResult memberProfile 정보 추가 Related: #118 * fit: 회원가입 및 로그인 시 응답값 추가 Related: #118 * fit: 오늘의 조합 댓글 삭제 시 commentCount 오류 수정 Related: #118 * FEAT : 메인 최상단 주간 베스트 조회 API & 메인 로테이션 오늘의 조합 조회 API & 메인 로테이션 레시피북 조회 API (#110) * feat: 메인 주간베스트 조합 랜덤 조회 API * feat: 오늘의 조합 로테이션 API, 레시피북 로테이션 API * refactor: 주간베스트조합 24시간 랜덤 적용 * Fix: 오늘의 조합 좋아요 멤버 어노테이션 적용 (#115) Related: #114 * [FEAT] 레시피북 Response 변경 (#120) * feat : recipe-image 순환참조 방지 순환참조를 방지하기 위해 recipe 객체는 반환하지 않습니다. Related #113 * feat : Recipe Response에 Page 정보 추가 Related #113 * feat : Recipe Page 정보 담아서 반환 Related #113 * main merge conflict 해결 * fix : memberName -> memberNickname 으로 변경 (#123) * main merge conflict 해결 * refactor : List Default값 추가 (#126) * fix : MemberObject 추가 (#128) Related #127 * Feature : 레시피북 해시태그 추가 (#129) * feat : RecipeHashTag 기본 구성 Related #112 * feat : Recipe Entity에 HashTagList 추가 Related #112 * feat : RecipeHashTag를 String 배열로 변환 Related #112 * refactor : HashTag Service 저장 로직 변경 - 코드의 재사용을 위해 기존 HashTag를 파싱하여 저장하는 부분을 메서드 추출하였습니다. Related #112 * feat : RecipeHashTag 저장 로직 Related #112 * refactor : recipeHashTagList 변수형 변경 수정 시 중복을 방지하기 위해 Set형으로 변경하였습니다. Related #112 * feat : RecipeHashTagList 반환 추가 Related #112 * feat : Recipe 저장에 HashTag 저장 추가 Related #112 * feat : RecipeHashTag 수정 로직 Related #112 * feat : RecipeHashTag 객체 중복저장 방지 Related #112 * feat : RecipeHashTag 삭제 기능 Related #112 * Fix: 주류 추천 ResponseDTO 변경 (#131) ResponseDTO에 recommendID추가 * FEAT : 메인 새로 출시된 주류 조회 API, 새로 출시된 주류 상세 조회 API, 새로 출시된 주류 리스트 조회 API, 새로 출시된 주류 타입별 조회 API (#133) * feat: 메인 주간베스트 조합 랜덤 조회 API * feat: 오늘의 조합 로테이션 API, 레시피북 로테이션 API * refactor: 주간베스트조합 24시간 랜덤 적용 * style * fix: soft delete & pagerequest * FIX: 오늘의 조합 홈 페이지, 상세보기, 댓글 작성 DTO 수정 (#135) * fix: 오늘의 조합 댓글조회 CommentResult 수정 updatedAt -> createdAt 생성 시간으로 변경 Related: #134 * fix: 오늘의 조합 상세보기 Response 수정 Member name -> nickname 변경 Related: #134 * Refactor : 레시피북 프론트 요청 (#138) * refactor : Recipe에서 info 칼럼 삭제 Related #136 * refactor : name 칼럼 이름 title로 변경 Related #136 * feat : RecipeComment에 작성/ 수정 시간 추가 Related #136 * refactor : 작성자 이름 -> 닉네임으로 변경 Related #136 * feat : Recipe Response 추가 / 변경 - memberImage, 댓글 개수 추가 Related #136 * feat : 레시피 검색 페이징 처리 Related #136 * feat : RecipeComment 페이징 처리, 자식 댓글 개수 추가 Ralted #136 * Refactor : 레시피북 프론트 요청 (#141) * refactor : RecipeLike에서 VO 삭제 - RecipeVO를 만드는 것이 가독성에 문제가 있어 삭제하였습니다. Related #136 * refactor : Recipe 도메인 관련 순환 자동 주입 방지 - 레시피 도메인 Servic들 끼리 서로 참조하여 순환 주입이 발생하였습니다. - Service -> 각 Repository로 변경하여 해결하였습니다. - MemberCommandServiceImpl에서 사용하지 않는 Recipe 도메인 자동주입자들 삭제해주었습니다 Related #136 * feat : RecipeResponseDTO에 유저의 좋아요 여부 표시 * feat : 유저의 레시피 정보 조회해 DTO 반환 Related #136 * feat : 조회 시 유저의 좋아요 여부 추가 Related #136 * Fix: Docker 컨테이너 시간 설정 (#142) * Fix: 오늘의 조합 좋아요 여부 로직 수정 (#144) * Fix: 이미지 생성 프롬프트 수정 (#146) * Fix: 오늘의 조합 API URL 및 댓글 DTO 수정 (#147) * fix: 오늘의 조합 작성 API 수정 recommedId 삭제 Related: #140 * fix: 오늘의 조합 작성 조회시 listSize 수정 listSize에서 자식 댓글가 카운트 안되는 오류 해결 Related: #140 * fix: Security setAllowedOrigins 수정 Related: #140 * fix: Security anyRequest 수정 Related: #140 * Refactor : 레시피 / 레시피 댓글에 유저 정보 추가 (#150) * refactor : 레시피 댓글에 유저 정보 추가 * refactor : 레시피 정보에 유저 정보 추가 * fix: CommentResult memberId 추가 (#152) Related: #151 * Fix: 검색 시 State True 게시글만 조회 (#154) * refactor: 좋아요 삭제 여부 반영 (#157) * Fix: 오늘의 조합/레시피 홈 조회시 생성일 순으로 내림차순 (#160) --------- Co-authored-by: kylo <103489352+kylo-dev@users.noreply.github.com> Co-authored-by: SungHoon Jung <32007781+wooing1084@users.noreply.github.com> Co-authored-by: wooing1084 Co-authored-by: YASICJUNWOO <99794552+YASICJUNWOO@users.noreply.github.com> Co-authored-by: Blue-hyeon Co-authored-by: hyungyeom Co-authored-by: Lee seohyeon 이서현 <101540728+Blue-hyeon@users.noreply.github.com> * refactor: Drink Type 추가 --------- Co-authored-by: Minhyeok Song <125117389+minhyeokDev@users.noreply.github.com> Co-authored-by: kylo <103489352+kylo-dev@users.noreply.github.com> Co-authored-by: SungHoon Jung <32007781+wooing1084@users.noreply.github.com> Co-authored-by: wooing1084 Co-authored-by: YASICJUNWOO <99794552+YASICJUNWOO@users.noreply.github.com> Co-authored-by: hyungyeom * Fix: 주류 추천 및 내가 작성한 글 조회시 생성일 순으로 내림차순 (#164) * Fix: imageUrl 길이 설정 * fix (#167) * Update README.md * Feat : 신고하기 API (#172) * Feat: Report Entity 생성 Related: #171 * Feat: Report Entity 필드값 추가 및 Enum 추가 Related: #171 * Style: 주석 제거 Related: #171 * Feat: Report Entity 수정 Related: #171 * Feat: Report Controller Service Repository 생성 Related: #171 * Feat: Report Image Entity, Controller, Repository, Service 추가 Related: #171 * Feat: 의존성 주입 추가 Related: #171 * Feat: 신고 API 구현 Related: #171 * Feat: 신고 대상 내용 추가 Related: #171 * Feat: 신고를 위한 CombinationComment State 수정 및 메서드 수정 Related: #171 * Feat: 신고를 위한 RecipeComment State 수정 및 메서드 수정 Related: #171 * Feat: 로그아웃 API (#174) * refactor: 좋아요 삭제 여부 반영 * refactor: Drink Type 추가 * feat: logout 1차 추가 * feat: logout 기능 완료 * feat: logout 기능 완료 * hotfix: filter wildcard 삭제 * Fix: 신고당한 Member Id 추가 및 댓글 생성 오류 해결 (#177) Related: #171 * Fix: 커뮤니티 검색 시 최신순으로 조회 (#179) Related: #178 * Fix: 댓글 삭제 오류 수정 * Update README.md * Update README.md * Feat: 차단 API 구현 (#186) * Feat: 차단하기 구현 - MemberBlock Entity, Controller, Service, Repository 생성 - Dto 생성 - 차단하기 구현 Related: #184 * Feat: 차단 중복 에러 코드 추가 Related: #184 * Feat: 오늘의 조합, 주간 베스트 조합 관련 API 차단에 따른 쿼리 수정 Related: #184 * Feat: 레시피 관련 API 차단에 따른 쿼리 수정 Related: #184 * Feat: 차단 API 수정 (#188) * Feat: 차단하기 구현 - MemberBlock Entity, Controller, Service, Repository 생성 - Dto 생성 - 차단하기 구현 Related: #184 * Feat: 차단 중복 에러 코드 추가 Related: #184 * Feat: 오늘의 조합, 주간 베스트 조합 관련 API 차단에 따른 쿼리 수정 Related: #184 * Feat: 레시피 관련 API 차단에 따른 쿼리 수정 Related: #184 * Feat: 차단 API 메서드 오류 수정 Related: #184 * Feat: 멤버 어노테이션 수정 Related: #184 * Feat: 차단 API 스웨거 태그 추가 Related: #184 * Feat: 신고하기 API 추가 구현 (#185) * feat: 신고하기 추가 구현 * fix: JWT 예외처리 * [Feat]auth apple api (#193) * feat: apple소셜로그인 추가 * feat: 신규가입 헤더 추가 * feat: 신규회원 false헤더 추가 * fix: 회원가입 시 중복 닉네임 거르기 (#196) * Fix: 댓글 차단 구현, 본인 차단 에러 수정 (#198) * Fix: 차단 API 오류 수정 Related: #190 * Fix: 차단한 멤버의 댓글 보이지 않게 수정 Related: #190 * change: newMember 전달 방식 변경 (#201) * fix: 프론트엔드 요구사항 반영 (#204) * Fix : 액세스토큰 재발급 오류 해결 (#206) * fix: 프론트엔드 요구사항 반영 * fix: 리프레시토큰 만료 이슈 해결 * Fix : 액세스토큰 재발급 오류 해결 (#208) * fix: 프론트엔드 요구사항 반영 * fix: 리프레시토큰 만료 이슈 해결 * fix: 리프레시토큰 만료 이슈 해결 * Fix: 좋아요한 게시글 목록 차단 적용 (#211) * Fix: 좋아요한 게시글 목록 차단 적용 - 오늘의 조합 좋아요 차단 적용 Related: #210 * Fix: 좋아요한 게시글 목록 차단 적용 - 오늘의 조합 좋아요 차단 오류 수정 Related: #210 * Fix: 좋아요한 게시글 목록 차단 적용 - 레시피 좋아요 차단 적용 Related: #210 * Feat: 레시피 리팩토링 및 멤버 검증 기능 구현 (#214) * Style: 레시피 코드 스타일 수정 Related: #169 * Feat: Add MemberValidator class for validating member actions Related: #169 * Feat: Add _INVALID_MEMBER error status Related: #169 * Feat: _INVALID_MEMBER 수정 Related: #169 * Feat: 댓글 작성, 수정, 삭제 시 멤버 검증 로직 추가 - 로그인한 멤버에 맞게 엔티티 저장 로직 추가 - 댓글 작성자와 로그인한 멤버가 같은지 검증하는 로직 구현 Related: #169 * Feat: 레시피 작성, 수정, 삭제 시 멤버 검증 로직 추가 - 로그인한 멤버에 맞게 엔티티 저장 로직 추가 - 댓글 작성자와 로그인한 멤버가 같은지 검증하는 로직 구현 Related: #169 * Docs: @Schema 어노테이션의 해시태그 리스트 예제 값 수정 Related: #169 * Style: 코딩 컨벤션 적용 및 import 문 정리 (#216) Related: #213 * feat: 새 유저/기존 유저 구분 API (#221) * 220 [FEAT] 약관 기능 구현 (#224) * feat: term, termAgree 엔티티 속성 변경 * feat: 약관 동의, 삭제, 조회 * refactor: delete unused import * refactor: 코드컨벤션 적용 * Feat : 커뮤니티 글 삭제 시 연관관계 삭제 구현 (#225) * Feat : 커뮤니티 글 삭제 시 연관관계 삭제 Related: #212 * Feat : 오늘의 조합 삭제 시 hard delete 로 수정 Related: #212 * Fix: RecipeImageService <-> RecipeServiceImpl 순환 참조 오류 해결 Related: #212 * Refactor: remove unused S3Service field Related: #212 * Refactor: remove unused S3Service import Related: #212 * Refactor: ServiceImpl -> Service 로 변경 Related: #212 * Feat: 해시태그를 통한 검색 기능 추가 (#228) * Feat: Combination 검색 API 해시태그,내용 검색 기능 추가 Related: #227 * Feat: 레시피북 검색 API 해시태그 검색 기능 추가 Related: #227 * Feat: 탈퇴하기 구현 (#230) * feat :탈퇴하기 API * style: 테스트코드 삭제 * style: 테스트코드 삭제 * [fix] 추천 hard delete (#235) * feat: 추천, 레시피, 조합 hard delete 추가 * fix: hard delete코드 되돌리기 * refactor: 신고 기록 삭제 추가 * refactor: 신고 기록 삭제 추가 --------- Co-authored-by: Blue-hyeon --------- Co-authored-by: kylo <103489352+kylo-dev@users.noreply.github.com> Co-authored-by: SungHoon Jung <32007781+wooing1084@users.noreply.github.com> Co-authored-by: wooing1084 Co-authored-by: YASICJUNWOO <99794552+YASICJUNWOO@users.noreply.github.com> Co-authored-by: Blue-hyeon Co-authored-by: hyungyeom Co-authored-by: Lee seohyeon 이서현 <101540728+Blue-hyeon@users.noreply.github.com> --- .../domain/cancellation/service/CancellationSchedular.java | 5 +++++ .../combination/repository/CombinationRepository.java | 1 + .../combination/service/CombinationCommandServiceImpl.java | 3 ++- .../repository/CombinationCommentRepository.java | 1 + .../domain/member/controller/MemberRestController.java | 2 +- .../domain/recipe/repository/RecipeRepository.java | 5 +++++ .../dgbackend/domain/recipe/service/RecipeServiceImpl.java | 1 + .../com/example/dgbackend/domain/recommend/Recommend.java | 4 ++-- .../domain/recommend/repository/RecommendRepository.java | 7 ++++++- .../recommend/service/RecommendCommandServiceImpl.java | 2 +- .../domain/report/repository/ReportRepository.java | 4 +++- .../dgbackend/domain/report/service/ReportService.java | 2 ++ .../dgbackend/domain/report/service/ReportServiceImpl.java | 6 ++++++ .../example/dgbackend/global/jwt/service/AuthService.java | 1 + 14 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/example/dgbackend/domain/cancellation/service/CancellationSchedular.java b/src/main/java/com/example/dgbackend/domain/cancellation/service/CancellationSchedular.java index d4360799..ccb8e597 100644 --- a/src/main/java/com/example/dgbackend/domain/cancellation/service/CancellationSchedular.java +++ b/src/main/java/com/example/dgbackend/domain/cancellation/service/CancellationSchedular.java @@ -12,6 +12,7 @@ import com.example.dgbackend.domain.recipecomment.service.RecipeCommentService; import com.example.dgbackend.domain.recipelike.service.RecipeLikeService; import com.example.dgbackend.domain.recommend.service.RecommendCommandService; +import com.example.dgbackend.domain.report.service.ReportService; import com.example.dgbackend.domain.termagree.service.TermAgreeCommandService; import com.example.dgbackend.global.common.response.code.status.ErrorStatus; import com.example.dgbackend.global.exception.ApiException; @@ -41,10 +42,12 @@ public class CancellationSchedular { private final TermAgreeCommandService termAgreeCommandService; private final MemberCommandService memberCommandService; private final MemberBlockService memberBlockService; + private final ReportService reportService; @Scheduled(cron = "0 0 0 * * ?") // 매일 자정에 실행 @Transactional public void processCancellations() { + LocalDateTime now = LocalDateTime.now(); List expiredCancellations = cancellationRepository.findAllByCancelledAtBefore( now); @@ -81,6 +84,8 @@ private void runCancellation(Long cancellationId) { termAgreeCommandService.deleteCancellation(cancelMember); // 차단 기록 삭제 memberBlockService.deleteBlock(cancelMember); + // 신고 기록 삭제 + reportService.deleteReport(cancelMember); // 탈퇴 테이블에서 해당 엔티티 삭제 cancellationRepository.delete(cancellation); diff --git a/src/main/java/com/example/dgbackend/domain/combination/repository/CombinationRepository.java b/src/main/java/com/example/dgbackend/domain/combination/repository/CombinationRepository.java index bc580141..fd7c3b38 100644 --- a/src/main/java/com/example/dgbackend/domain/combination/repository/CombinationRepository.java +++ b/src/main/java/com/example/dgbackend/domain/combination/repository/CombinationRepository.java @@ -7,6 +7,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; public interface CombinationRepository extends JpaRepository { diff --git a/src/main/java/com/example/dgbackend/domain/combination/service/CombinationCommandServiceImpl.java b/src/main/java/com/example/dgbackend/domain/combination/service/CombinationCommandServiceImpl.java index 4e2ec101..377f39bf 100644 --- a/src/main/java/com/example/dgbackend/domain/combination/service/CombinationCommandServiceImpl.java +++ b/src/main/java/com/example/dgbackend/domain/combination/service/CombinationCommandServiceImpl.java @@ -8,7 +8,6 @@ import com.example.dgbackend.domain.combination.repository.CombinationRepository; import com.example.dgbackend.domain.combinationcomment.service.CombinationCommentCommandService; import com.example.dgbackend.domain.combinationimage.service.CombinationImageCommandService; -import com.example.dgbackend.domain.combinationimage.service.CombinationImageQueryService; import com.example.dgbackend.domain.combinationlike.service.CombinationLikeCommandService; import com.example.dgbackend.domain.hashtag.service.HashTagCommandService; import com.example.dgbackend.domain.hashtagoption.service.HashTagOptionCommandService; @@ -114,9 +113,11 @@ public CombinationResponse.CombinationProcResult editCombination(Long combinatio @Override public void deleteAllCombination(Long memberId) { + Member member = memberRepository.findById(memberId) .orElseThrow(() -> new ApiException(ErrorStatus._EMPTY_MEMBER)); List combinationList = combinationRepository.findAllByMember(member); + for (Combination combination : combinationList) { deleteCombination(combination.getId()); } diff --git a/src/main/java/com/example/dgbackend/domain/combinationcomment/repository/CombinationCommentRepository.java b/src/main/java/com/example/dgbackend/domain/combinationcomment/repository/CombinationCommentRepository.java index 9414e6b1..f9eddab0 100644 --- a/src/main/java/com/example/dgbackend/domain/combinationcomment/repository/CombinationCommentRepository.java +++ b/src/main/java/com/example/dgbackend/domain/combinationcomment/repository/CombinationCommentRepository.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Optional; + import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/src/main/java/com/example/dgbackend/domain/member/controller/MemberRestController.java b/src/main/java/com/example/dgbackend/domain/member/controller/MemberRestController.java index 5c26bd8b..c472f3a9 100644 --- a/src/main/java/com/example/dgbackend/domain/member/controller/MemberRestController.java +++ b/src/main/java/com/example/dgbackend/domain/member/controller/MemberRestController.java @@ -7,6 +7,7 @@ import com.example.dgbackend.domain.member.service.MemberQueryService; import com.example.dgbackend.global.common.response.ApiResponse; import com.example.dgbackend.global.jwt.annotation.MemberObject; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; @@ -26,7 +27,6 @@ @RequestMapping("/users") public class MemberRestController { - private final MemberQueryService memberQueryService; private final MemberCommandService memberCommandService; @Operation(summary = "회원 추천 정보 저장", description = "회원 추천 정보를 저장합니다.") diff --git a/src/main/java/com/example/dgbackend/domain/recipe/repository/RecipeRepository.java b/src/main/java/com/example/dgbackend/domain/recipe/repository/RecipeRepository.java index cff7135c..560cae76 100644 --- a/src/main/java/com/example/dgbackend/domain/recipe/repository/RecipeRepository.java +++ b/src/main/java/com/example/dgbackend/domain/recipe/repository/RecipeRepository.java @@ -9,6 +9,7 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; public interface RecipeRepository extends JpaRepository { @@ -41,4 +42,8 @@ Page findRecipesByTitleOrHashTagAndStateIsTrueOrderByCreatedAtDesc(Strin Optional findByIdAndMemberAndStateIsTrue(Long id, Long memberId); List findAllByMember(Member member); + + @Modifying + @Query(value = "DELETE FROM recipe WHERE member_id = :id", nativeQuery = true) + void deleteByMemberIdWithNativeQuery(Long id); } diff --git a/src/main/java/com/example/dgbackend/domain/recipe/service/RecipeServiceImpl.java b/src/main/java/com/example/dgbackend/domain/recipe/service/RecipeServiceImpl.java index c6e705a0..69f359e0 100644 --- a/src/main/java/com/example/dgbackend/domain/recipe/service/RecipeServiceImpl.java +++ b/src/main/java/com/example/dgbackend/domain/recipe/service/RecipeServiceImpl.java @@ -203,6 +203,7 @@ public void deleteAllRecipe(Long memberId) { Member member = memberRepository.findById(memberId).orElseThrow( () -> new ApiException(ErrorStatus._EMPTY_MEMBER) ); + List recipeList = recipeRepository.findAllByMember(member); for (Recipe recipe : recipeList) { deleteRecipe(recipe.getId(), member); diff --git a/src/main/java/com/example/dgbackend/domain/recommend/Recommend.java b/src/main/java/com/example/dgbackend/domain/recommend/Recommend.java index 510f3441..66345bb9 100644 --- a/src/main/java/com/example/dgbackend/domain/recommend/Recommend.java +++ b/src/main/java/com/example/dgbackend/domain/recommend/Recommend.java @@ -25,8 +25,8 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Builder @Entity -//@SQLDelete(sql = "UPDATE recommend SET deleted = true WHERE id = ?") -//@SQLRestriction("deleted = false") +@SQLDelete(sql = "UPDATE recommend SET deleted = true WHERE id = ?") +@SQLRestriction("deleted = false") @OnDelete(action = OnDeleteAction.CASCADE) public class Recommend extends BaseTimeEntity { diff --git a/src/main/java/com/example/dgbackend/domain/recommend/repository/RecommendRepository.java b/src/main/java/com/example/dgbackend/domain/recommend/repository/RecommendRepository.java index c0f39d49..0fee4598 100644 --- a/src/main/java/com/example/dgbackend/domain/recommend/repository/RecommendRepository.java +++ b/src/main/java/com/example/dgbackend/domain/recommend/repository/RecommendRepository.java @@ -1,5 +1,6 @@ package com.example.dgbackend.domain.recommend.repository; + import com.example.dgbackend.domain.recommend.Recommend; import org.springframework.data.domain.Page; @@ -7,6 +8,8 @@ import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; public interface RecommendRepository extends JpaRepository { @@ -14,5 +17,7 @@ public interface RecommendRepository extends JpaRepository { List findAllByMemberId(Long memberId); - void deleteAllByMemberId(Long memberId); + @Modifying + @Query(value = "DELETE FROM recommend WHERE member_id = :memberId", nativeQuery = true) + void deleteAllByMemberIdWithNativeQuery(Long memberId); } diff --git a/src/main/java/com/example/dgbackend/domain/recommend/service/RecommendCommandServiceImpl.java b/src/main/java/com/example/dgbackend/domain/recommend/service/RecommendCommandServiceImpl.java index ed8a7484..14b72593 100644 --- a/src/main/java/com/example/dgbackend/domain/recommend/service/RecommendCommandServiceImpl.java +++ b/src/main/java/com/example/dgbackend/domain/recommend/service/RecommendCommandServiceImpl.java @@ -242,7 +242,7 @@ public void deleteCancellation(Long memberId) { imageUrls.forEach(s3Service::deleteFile); - recommendRepository.deleteAllByMemberId(memberId); + recommendRepository.deleteAllByMemberIdWithNativeQuery(memberId); } /* diff --git a/src/main/java/com/example/dgbackend/domain/report/repository/ReportRepository.java b/src/main/java/com/example/dgbackend/domain/report/repository/ReportRepository.java index 4f30240e..09c9f5dc 100644 --- a/src/main/java/com/example/dgbackend/domain/report/repository/ReportRepository.java +++ b/src/main/java/com/example/dgbackend/domain/report/repository/ReportRepository.java @@ -3,6 +3,8 @@ import com.example.dgbackend.domain.enums.ReportTarget; import com.example.dgbackend.domain.member.Member; import com.example.dgbackend.domain.report.Report; + +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; public interface ReportRepository extends JpaRepository { @@ -10,5 +12,5 @@ public interface ReportRepository extends JpaRepository { Report findTopByResourceIdAndReportTargetAndMember(Long resourceId, ReportTarget reportTarget, Member member); - + void deleteAllByMember(Member member); } diff --git a/src/main/java/com/example/dgbackend/domain/report/service/ReportService.java b/src/main/java/com/example/dgbackend/domain/report/service/ReportService.java index 3ca24a36..3a449ecb 100644 --- a/src/main/java/com/example/dgbackend/domain/report/service/ReportService.java +++ b/src/main/java/com/example/dgbackend/domain/report/service/ReportService.java @@ -9,4 +9,6 @@ public interface ReportService { String report(ReportReq reportReq, Member member) throws MessagingException; + void deleteReport(Member member); + } diff --git a/src/main/java/com/example/dgbackend/domain/report/service/ReportServiceImpl.java b/src/main/java/com/example/dgbackend/domain/report/service/ReportServiceImpl.java index dc674c3d..1118458b 100644 --- a/src/main/java/com/example/dgbackend/domain/report/service/ReportServiceImpl.java +++ b/src/main/java/com/example/dgbackend/domain/report/service/ReportServiceImpl.java @@ -23,6 +23,7 @@ import jakarta.mail.internet.InternetAddress; import jakarta.mail.internet.MimeMessage; import jakarta.transaction.Transactional; +import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.mail.javamail.JavaMailSender; @@ -494,4 +495,9 @@ private void memberReported(ReportReason reportReason, Long memberId) { redisUtil.deleteData(id); } + @Override + public void deleteReport(Member member) { + + reportRepository.deleteAllByMember(member); + } } diff --git a/src/main/java/com/example/dgbackend/global/jwt/service/AuthService.java b/src/main/java/com/example/dgbackend/global/jwt/service/AuthService.java index 6d189368..bdfdfe07 100644 --- a/src/main/java/com/example/dgbackend/global/jwt/service/AuthService.java +++ b/src/main/java/com/example/dgbackend/global/jwt/service/AuthService.java @@ -68,6 +68,7 @@ public AuthResponse.AuthResult loginOrJoin(HttpServletResponse response, // 해당 멤버가 탈퇴 신청을 했는지 확인 Boolean isCancelled = cancellationCommandService.checkCancellation(memberId); + if (isCancelled) { cancellationCommandService.deleteCancellation(memberId); }