Skip to content

Commit db23ae1

Browse files
johnhuh619gunwoong1630HwuanPageaudwls239garusitell
authored
fix: token (#61)
* feature/base domain 04 gunwoong (#6) * feat: 공통 도메인 구현 * feat: 메인 어플리케이션에 추가 * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Refactor application.yml 환경변수 설정 (#25) * refactor: application.yml 환경변수 설정 * Rename: 오타 수정 * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api 스케줄링 * feat: spot service inteface * feat: 카카오 로그인을 stateless 하게 변경한다 (#51) * refactor: 기존 state 사용 방식 -> stateless 방식으로 변경 * refactor: 기존 state 사용 방식 -> stateless 방식으로 변경으로 인해 필요 없는 엔드 포인트 삭제 * test: 변경사항 test 수정 * feat: 카카오 측에서 인증 실패시에 반환 하는 에러 처리하는 코드 구현 * test: 카카오 측에서 인증 실패시에 반환 하는 에러 처리하는 테스트 추가 * fix: 주석 제거 * fix: exception 변경 * Feat/meeting service (#46) * WIP: Rebase를 위한 임시 저장 # Conflicts: # src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java # src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java * feat : Meeting.java -> Meeting 엔터티 @builder 를 상위 어노테이션에 일단 추가시켰습니다. * feat : Meeting.java -> Meeting 엔터티 @builder 를 상위 어노테이션에 일단 추가시켰습니다. * feat : Meeting.java -> Meeting 엔터티 @builder 를 상위 어노테이션에 일단 추가시켰습니다. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : 패키지명 변경 이슈 -> 패키지 명을 컨벤션에 따른 이름으로 변경했습니다. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId로 수정하였습니다. * feat : MeetingError.java MeetingError.java 를 추가하였습니다. * feat : MeetingMapper MeetingServiceImpl에서 사용중이었던 Mapper를 분리하였습니다. * feat : MeetingService.java 패키지 명 수정으로 인해서 수정사항이 있었습니다. * feat : MeetingServiceImpl.java 트랜잭션 관리 명확화 하였습니다. validate 패키지를 개선하였습니다. joinMeeting 중복 참여 제한 로직을 강화하였습니다. * `getAllMeetings(Long cursorId, int size)`: * 목적: 모든 모임 목록을 페이징 처리하여 조회합니다. cursorId를 사용하여 무한 스크롤과 같은 커서 기반 페이징을 지원합니다. * 특징: @transactional(readOnly = true)를 통해 읽기 전용 트랜잭션으로 최적화되었습니다. * `getMeetingDetails(Long meetingId)`: * 목적: 특정 모임의 상세 정보를 조회합니다. 호스트, 장소, 태그 등 연관된 정보를 함께 가져옵니다. * 개선 예정: 현재 N+1 문제가 발생할 수 있어, 향후 Fetch Join을 통한 성능 최적화가 필요합니다. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * 목적: 특정 회원의 상태별(예: 모집 중, 완료) 모임 목록을 페이징 처리하여 조회합니다. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * 목적: 호스트가 자신의 모임 상세 정보와 참여자 목록을 조회합니다. 참여자들의 닉네임을 함께 제공합니다. * `countMeetings(Long memberId)`: * 목적: 특정 회원이 참여한 모임의 총 개수를 반환합니다. * `joinMeeting(Long meetingId, Long memberId)`: * 목적: 회원이 특정 모임에 참여합니다. * 주요 개선: 모임 상태 검증(verifyRecruiting), 중복 참여 검증(`verifyNotAlreadyParticipant`), 모임 정원 초과 검증(verifyMeetingCount) 로직이 강화되었습니다. * 개선 예정: 동시성 문제(Race Condition) 해결을 위한 비관적 락(Pessimistic Lock) 적용이 필요합니다. * `leaveMeeting(Long meetingId, Long memberId)`: * 목적: 회원이 모임에서 탈퇴합니다. * 주요 개선: 호스트 탈퇴 방지(verifyNotHost), 모임 상태에 따른 탈퇴 가능 여부 검증(verifyLeave) 로직이 추가되었습니다. * 개선 예정: MEETING_NOT_FOUND 대신 CANNOT_LEAVE_COMPLETED_MEETING과 같은 더 구체적인 에러 코드 적용이 필요합니다. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * 목적: 새로운 모임을 생성합니다. 호스트를 참여자로 자동 등록하고 태그 정보를 저장합니다. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * 목적: 기존 모임의 정보를 수정합니다. 호스트만 수정할 수 있도록 검증합니다. * `deleteMeeting(Member member, Long meetingId)`: * 목적: 모임을 삭제합니다. * 개선 예정: 물리적 삭제 대신 논리적 삭제(Soft Delete) 방식 도입을 고려 중입니다. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java 검증로직을 추가하였습니다. * feat : MemberError.java , ParticipantRepository 기능을 추가하였습니다. --------- Co-authored-by: Hwang Seong Cheol a.k.a Hwuan Page <[email protected]> * feat: 테스트용 액세스 토큰 생성 * feature/base domain 04 gunwoong (#6) * feat: 공통 도메인 구현 * feat: 메인 어플리케이션에 추가 * Refactor application.yml 환경변수 설정 (#25) * refactor: application.yml 환경변수 설정 * Rename: 오타 수정 * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api 스케줄링 * feat: spot service inteface * feature/base domain 04 gunwoong (#6) * feat: 공통 도메인 구현 * feat: 메인 어플리케이션에 추가 * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api 스케줄링 * feat: spot service inteface * Feature/api scheduler 15 gunwoong (#28) * feat: api * feat: api 스케줄링 * feat: spot service inteface * test: remove legacy test * feat: apply open meteo * test: apply api test * feature/FavoriteCRUD-33-HwuanPage * DELETE COMPLETE * UPDATE COMPLETE * search COMPLETE * Before gunwoong * FavoriteCRUD create * feat/domain test * FavoriteSpotServiceTest * FavoriteSpotServiceTest * feature/FavoriteCURD-33-HwuanPage * add some description on service * Update FavoriteServiceImpl.java * fix: error fix * fix: 소셜 로그인 재시도 시 닉네임 UNIQUE 제약 위반 오류 발생 (#42) * fix: 로그아웃 후 재로그인 시 동일 정보로 db에 insert 하던 버그 수정 * refactor: 로그아웃 후 재로그인 시 동일 정보로 db에 insert 수정 사항 리팩토링 * test: 변경사항에 따른 테스트 코드 수정 * hofix: bug fix * feat: 카카오 로그인을 stateless 하게 변경한다 (#51) * refactor: 기존 state 사용 방식 -> stateless 방식으로 변경 * refactor: 기존 state 사용 방식 -> stateless 방식으로 변경으로 인해 필요 없는 엔드 포인트 삭제 * test: 변경사항 test 수정 * feat: 카카오 측에서 인증 실패시에 반환 하는 에러 처리하는 코드 구현 * test: 카카오 측에서 인증 실패시에 반환 하는 에러 처리하는 테스트 추가 * fix: 주석 제거 * fix: exception 변경 * Feat/meeting service (#46) * WIP: Rebase를 위한 임시 저장 # Conflicts: # src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java # src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java * feat : Meeting.java -> Meeting 엔터티 @builder 를 상위 어노테이션에 일단 추가시켰습니다. * feat : Meeting.java -> Meeting 엔터티 @builder 를 상위 어노테이션에 일단 추가시켰습니다. * feat : Meeting.java -> Meeting 엔터티 @builder 를 상위 어노테이션에 일단 추가시켰습니다. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : 패키지명 변경 이슈 -> 패키지 명을 컨벤션에 따른 이름으로 변경했습니다. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId로 수정하였습니다. * feat : MeetingError.java MeetingError.java 를 추가하였습니다. * feat : MeetingMapper MeetingServiceImpl에서 사용중이었던 Mapper를 분리하였습니다. * feat : MeetingService.java 패키지 명 수정으로 인해서 수정사항이 있었습니다. * feat : MeetingServiceImpl.java 트랜잭션 관리 명확화 하였습니다. validate 패키지를 개선하였습니다. joinMeeting 중복 참여 제한 로직을 강화하였습니다. * `getAllMeetings(Long cursorId, int size)`: * 목적: 모든 모임 목록을 페이징 처리하여 조회합니다. cursorId를 사용하여 무한 스크롤과 같은 커서 기반 페이징을 지원합니다. * 특징: @transactional(readOnly = true)를 통해 읽기 전용 트랜잭션으로 최적화되었습니다. * `getMeetingDetails(Long meetingId)`: * 목적: 특정 모임의 상세 정보를 조회합니다. 호스트, 장소, 태그 등 연관된 정보를 함께 가져옵니다. * 개선 예정: 현재 N+1 문제가 발생할 수 있어, 향후 Fetch Join을 통한 성능 최적화가 필요합니다. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * 목적: 특정 회원의 상태별(예: 모집 중, 완료) 모임 목록을 페이징 처리하여 조회합니다. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * 목적: 호스트가 자신의 모임 상세 정보와 참여자 목록을 조회합니다. 참여자들의 닉네임을 함께 제공합니다. * `countMeetings(Long memberId)`: * 목적: 특정 회원이 참여한 모임의 총 개수를 반환합니다. * `joinMeeting(Long meetingId, Long memberId)`: * 목적: 회원이 특정 모임에 참여합니다. * 주요 개선: 모임 상태 검증(verifyRecruiting), 중복 참여 검증(`verifyNotAlreadyParticipant`), 모임 정원 초과 검증(verifyMeetingCount) 로직이 강화되었습니다. * 개선 예정: 동시성 문제(Race Condition) 해결을 위한 비관적 락(Pessimistic Lock) 적용이 필요합니다. * `leaveMeeting(Long meetingId, Long memberId)`: * 목적: 회원이 모임에서 탈퇴합니다. * 주요 개선: 호스트 탈퇴 방지(verifyNotHost), 모임 상태에 따른 탈퇴 가능 여부 검증(verifyLeave) 로직이 추가되었습니다. * 개선 예정: MEETING_NOT_FOUND 대신 CANNOT_LEAVE_COMPLETED_MEETING과 같은 더 구체적인 에러 코드 적용이 필요합니다. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * 목적: 새로운 모임을 생성합니다. 호스트를 참여자로 자동 등록하고 태그 정보를 저장합니다. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * 목적: 기존 모임의 정보를 수정합니다. 호스트만 수정할 수 있도록 검증합니다. * `deleteMeeting(Member member, Long meetingId)`: * 목적: 모임을 삭제합니다. * 개선 예정: 물리적 삭제 대신 논리적 삭제(Soft Delete) 방식 도입을 고려 중입니다. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java 검증로직을 추가하였습니다. * feat : MemberError.java , ParticipantRepository 기능을 추가하였습니다. --------- Co-authored-by: Hwang Seong Cheol a.k.a Hwuan Page <[email protected]> * fix : jellyfish 부분 * fix: activity 부분 * fix: member 부분 * fix: member 부분 * fix: spot 부분 * fix: forecast 부분 * fix: favorite 부분 * fix: alert 부분 * fix: meeting 부분 --------- Co-authored-by: Gunwoong cho <[email protected]> Co-authored-by: Hwang Seong Cheol a.k.a Hwuan Page <[email protected]> Co-authored-by: MyungJin <[email protected]> Co-authored-by: LEESUNBIN <[email protected]> Co-authored-by: gunwoong <[email protected]>
1 parent 944b62f commit db23ae1

File tree

54 files changed

+1132
-1123
lines changed

Some content is hidden

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

54 files changed

+1132
-1123
lines changed

build.gradle

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@ plugins {
44
id 'io.spring.dependency-management' version '1.1.7'
55
}
66

7-
ext {
8-
springAiVersion = "1.0.0"
9-
}
10-
117
group = 'sevenstar'
128
version = '0.0.1-SNAPSHOT'
139

@@ -33,8 +29,6 @@ dependencies {
3329
implementation 'org.springframework.boot:spring-boot-starter-web'
3430
implementation 'org.springframework.boot:spring-boot-starter-webflux'
3531
implementation 'org.springframework.boot:spring-boot-starter-validation'
36-
implementation 'org.springframework.ai:spring-ai-pdf-document-reader'
37-
implementation 'org.springframework.ai:spring-ai-starter-model-openai'
3832
compileOnly 'org.projectlombok:lombok'
3933
annotationProcessor 'org.projectlombok:lombok'
4034
testImplementation 'org.springframework.boot:spring-boot-starter-test'
@@ -48,7 +42,7 @@ dependencies {
4842
// redis
4943
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
5044

51-
//JSON parsing
45+
//JSON parsing
5246
implementation 'com.fasterxml.jackson.core:jackson-databind'
5347
// db dependencies
5448
runtimeOnly 'com.mysql:mysql-connector-j'
@@ -68,15 +62,6 @@ dependencies {
6862

6963
// mock-inline
7064
testImplementation 'org.mockito:mockito-inline:5.2.0'
71-
// html parser
72-
implementation 'org.jsoup:jsoup:1.21.1'
73-
74-
}
75-
76-
dependencyManagement {
77-
imports {
78-
mavenBom "org.springframework.ai:spring-ai-bom:$springAiVersion"
79-
}
8065
}
8166

8267
tasks.named('test') {

src/main/java/sevenstar/marineleisure/activity/service/ActivityService.java

Lines changed: 235 additions & 235 deletions
Large diffs are not rendered by default.
Lines changed: 36 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,36 @@
1-
package sevenstar.marineleisure.alert.controller;
2-
3-
import java.util.List;
4-
5-
import org.springframework.http.ResponseEntity;
6-
import org.springframework.web.bind.annotation.GetMapping;
7-
import org.springframework.web.bind.annotation.RequestMapping;
8-
import org.springframework.web.bind.annotation.RestController;
9-
10-
import lombok.RequiredArgsConstructor;
11-
import sevenstar.marineleisure.alert.dto.response.JellyfishResponseDto;
12-
import sevenstar.marineleisure.alert.dto.vo.JellyfishDetailVO;
13-
import sevenstar.marineleisure.alert.mapper.AlertMapper;
14-
import sevenstar.marineleisure.alert.service.JellyfishService;
15-
import sevenstar.marineleisure.global.domain.BaseResponse;
16-
17-
@RestController
18-
@RequiredArgsConstructor
19-
@RequestMapping("/alerts")
20-
public class AlertController {
21-
private final JellyfishService jellyfishService;
22-
private final AlertMapper alertMapper;
23-
24-
/**
25-
* 사용자에게 해파리출현에 관한 정보를 넘겨주기위한 메서드입니다.
26-
* @return 해파리 발생 관련 정보
27-
*/
28-
@GetMapping("/jellyfish")
29-
public ResponseEntity<BaseResponse<JellyfishResponseDto>> getJellyfishList() {
30-
List<JellyfishDetailVO> items = jellyfishService.search();
31-
JellyfishResponseDto result = alertMapper.toResponseDto(items);
32-
return BaseResponse.success(result);
33-
}
34-
35-
// 명시적으로 크롤링작업을 호출하기 위함입니다. 프론트에서 사용하지는 않습니다.
36-
// 동작 테스트 완료했습니다.
37-
// OpenAi Token발생하므로 꼭 필요할때만 사용해주세요.
38-
// @GetMapping("/jellyfish/crawl")
39-
// public ResponseEntity<String> triggerCrawl() {
40-
// jellyfishService.updateLatestReport();
41-
// return ResponseEntity.ok("해파리 리포트 크롤링 완료");
42-
// }
43-
}
1+
// package sevenstar.marineleisure.alert.controller;
2+
//
3+
// import org.springframework.web.bind.annotation.RequestMapping;
4+
// import org.springframework.web.bind.annotation.RestController;
5+
//
6+
// import lombok.RequiredArgsConstructor;
7+
// import sevenstar.marineleisure.alert.service.JellyfishService;
8+
// import sevenstar.marineleisure.global.domain.BaseResponse;
9+
//
10+
// @RestController
11+
// @RequiredArgsConstructor
12+
// @RequestMapping("/alerts")
13+
// public class AlertController {
14+
// private final JellyfishService jellyfishService;
15+
// private final AlertMapper alertMapper;
16+
//
17+
// /**
18+
// * 사용자에게 해파리출현에 관한 정보를 넘겨주기위한 메서드입니다.
19+
// * @return 해파리 발생 관련 정보
20+
// */
21+
// @GetMapping("/jellyfish")
22+
// public ResponseEntity<BaseResponse<JellyfishResponseDto>> getJellyfishList() {
23+
// List<JellyfishDetailVO> items = jellyfishService.search();
24+
// JellyfishResponseDto result = alertMapper.toResponseDto(items);
25+
// return BaseResponse.success(result);
26+
// }
27+
//
28+
// // 명시적으로 크롤링작업을 호출하기 위함입니다. 프론트에서 사용하지는 않습니다.
29+
// // 동작 테스트 완료했습니다.
30+
// // OpenAi Token발생하므로 꼭 필요할때만 사용해주세요.
31+
// // @GetMapping("/jellyfish/crawl")
32+
// // public ResponseEntity<String> triggerCrawl() {
33+
// // jellyfishService.updateLatestReport();
34+
// // return ResponseEntity.ok("해파리 리포트 크롤링 완료");
35+
// // }
36+
// }

src/main/java/sevenstar/marineleisure/alert/dto/vo/JellyfishRegionVO.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@
99
*/
1010
@Builder
1111
public record JellyfishRegionVO(String regionName, JellyfishSpeciesVO species) {
12-
}
12+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package sevenstar.marineleisure.alert.dto.vo;
2+
3+
import lombok.Builder;
4+
import sevenstar.marineleisure.global.enums.DensityLevel;
5+
import sevenstar.marineleisure.global.enums.ToxicityLevel;
6+
7+
/**
8+
*
9+
* @param name : 해파리 이름
10+
* @param toxicity : 독성
11+
* @param density : 밀도
12+
*/
13+
@Builder
14+
public record JellyfishSpecies(String name, ToxicityLevel toxicity, DensityLevel density) {
15+
}

0 commit comments

Comments
 (0)