Conversation
|
Important Review skippedAuto incremental reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the 📝 WalkthroughWalkthrough마이페이지에서 사용자가 참여 중인 파티 목록을 조회할 수 있는 기능을 추가합니다. PartyParticipantRepository에 활성 파티 조회 및 상태별 카운팅 메서드를 추가하고, UserService에 getActiveParties 메서드를 구현합니다. UserController에 새 엔드포인트 GET /api/v1/user/parties/active를 추가하고, PartyResponse DTO를 도입하여 파티 정보를 응답합니다. 사용자의 인증 정보를 기반으로 활성 및 승인된 상태의 파티만 필터링하여 반환합니다. Sequence DiagramsequenceDiagram
actor Client
participant UC as UserController
participant US as UserService
participant PPR as PartyParticipantRepository
participant DB as Database
Client->>UC: GET /api/v1/user/parties/active
activate UC
UC->>US: getActiveParties(userId)
deactivate UC
activate US
US->>PPR: findActivePartiesByUserId(userId, RECRUITING, APPROVED)
deactivate US
activate PPR
PPR->>DB: Query PartyParticipant with filters
DB-->>PPR: List<PartyParticipant>
deactivate PPR
activate US
loop For each PartyParticipant
US->>PPR: countByPartyIdAndStatus(partyId, APPROVED)
activate PPR
PPR->>DB: Count APPROVED participants
DB-->>PPR: int count
deactivate PPR
US->>US: Build PartyResponse with<br/>currentParticipants, isHost, status
end
US-->>UC: List<PartyResponse>
deactivate US
activate UC
UC-->>Client: ResponseEntity<List<PartyResponse>>
deactivate UC
Possibly related PRs
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 5
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/main/java/ita/tinybite/domain/party/repository/PartyParticipantRepository.java (1)
3-3: 잘못된@Param어노테이션 import입니다.
io.lettuce.core.dynamic.annotation.Param은 Lettuce Redis 클라이언트용 어노테이션입니다. Spring Data JPA의@Query와 함께 사용하려면org.springframework.data.repository.query.Param을 사용해야 합니다. 현재 코드는 런타임에 파라미터 바인딩 오류가 발생합니다.🔎 수정 제안
-import io.lettuce.core.dynamic.annotation.Param; +import org.springframework.data.repository.query.Param;
🧹 Nitpick comments (2)
src/main/java/ita/tinybite/domain/user/controller/UserController.java (2)
88-93: API 응답 형식이 다른 엔드포인트와 일관성이 없습니다.다른 엔드포인트들은
APIResponse<?>래퍼를 사용하지만, 이 엔드포인트만ResponseEntity<List<PartyResponse>>를 직접 반환합니다. 클라이언트 측에서 두 가지 다른 응답 형식을 처리해야 하므로 일관성 있는 API 설계를 위해APIResponse로 래핑하는 것이 좋습니다.🔎 수정 제안
@GetMapping("/parties/active") - public ResponseEntity<List<PartyResponse>> getActiveParties( + public APIResponse<List<PartyResponse>> getActiveParties( @AuthenticationPrincipal Long userId) { List<PartyResponse> response = userService.getActiveParties(userId); - return ResponseEntity.ok(response); + return success(response); }
9-9: 사용되지 않는 import입니다.
UserDto가 import되어 있지만 이 컨트롤러에서 사용되지 않습니다.🔎 수정 제안
-import ita.tinybite.domain.auth.dto.response.UserDto;
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (6)
.gitignoresrc/main/java/ita/tinybite/domain/party/repository/PartyParticipantRepository.javasrc/main/java/ita/tinybite/domain/user/controller/UserController.javasrc/main/java/ita/tinybite/domain/user/dto/res/PartyResponse.javasrc/main/java/ita/tinybite/domain/user/service/UserService.javasrc/test/java/ita/tinybite/domain/user/service/UserServiceTest.java
🔇 Additional comments (2)
.gitignore (1)
42-42: LGTM!Firebase 자격 증명 및 설정 파일이 저장소에 커밋되지 않도록
.gitignore에 추가한 것은 좋은 보안 관행입니다.src/main/java/ita/tinybite/domain/user/controller/UserController.java (1)
89-91:userId가 null일 경우 처리가 필요합니다.인증되지 않은 요청이나 인증 정보가 잘못된 경우
@AuthenticationPrincipal이 null을 반환할 수 있습니다.userService.getActiveParties(userId)에 null이 전달되면 예상치 못한 동작이 발생할 수 있습니다.Spring Security 설정에서 이 엔드포인트가 인증 필수로 설정되어 있는지 확인해주세요. 인증 필수라면 null 체크가 불필요할 수 있습니다.
| @Query("SELECT pp FROM PartyParticipant pp " + | ||
| "WHERE pp.user.id = :userId " + | ||
| "AND pp.party.status =:partyStatus " + | ||
| "AND pp.status = :participantStatus") | ||
| List<PartyParticipant> findActivePartiesByUserId( | ||
| @Param("userId") Long userId, | ||
| @Param("partyStatuses") PartyStatus partyStatus, | ||
| @Param("participantStatus") ParticipantStatus participantStatus | ||
| ); |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# Search for User entity definition
fd -t f -e java "User.java" | head -20Repository: tinybite-2025/tinybite-server
Length of output: 128
🏁 Script executed:
# Search for PartyParticipant entity definition
fd -t f -e java "PartyParticipant.java" | head -20Repository: tinybite-2025/tinybite-server
Length of output: 141
🏁 Script executed:
# Also search in the repository file itself to understand the context better
cat -n src/main/java/ita/tinybite/domain/party/repository/PartyParticipantRepository.javaRepository: tinybite-2025/tinybite-server
Length of output: 2246
🏁 Script executed:
# Read User entity to check field name
cat -n src/main/java/ita/tinybite/domain/user/entity/User.java | head -50Repository: tinybite-2025/tinybite-server
Length of output: 1653
🏁 Script executed:
# Read PartyParticipant entity
cat -n src/main/java/ita/tinybite/domain/party/entity/PartyParticipant.java | head -80Repository: tinybite-2025/tinybite-server
Length of output: 2306
JPQL 파라미터 바인딩 및 필드명 불일치로 런타임 오류가 발생합니다.
- Line 35:
@Param("partyStatuses")는 복수형이지만 JPQL에서:partyStatus(단수형)를 사용하여 바인딩이 실패합니다. - Line 30: User 엔티티의 ID 필드명은
userId이므로 JPQL에서pp.user.id대신pp.user.userId를 사용해야 합니다. - Line 3:
io.lettuce.core.dynamic.annotation.Param을 import하고 있는데, Spring Data JPA 쿼리에는org.springframework.data.jpa.repository.Param을 사용해야 합니다.
🔎 수정 제안
-import io.lettuce.core.dynamic.annotation.Param;
+import org.springframework.data.jpa.repository.Param;
@Query("SELECT pp FROM PartyParticipant pp " +
- "WHERE pp.user.id = :userId " +
+ "WHERE pp.user.userId = :userId " +
"AND pp.party.status =:partyStatus " +
"AND pp.status = :participantStatus")
List<PartyParticipant> findActivePartiesByUserId(
@Param("userId") Long userId,
- @Param("partyStatuses") PartyStatus partyStatus,
+ @Param("partyStatus") PartyStatus partyStatus,
@Param("participantStatus") ParticipantStatus participantStatus
);🤖 Prompt for AI Agents
In
src/main/java/ita/tinybite/domain/party/repository/PartyParticipantRepository.java
around lines 29 to 37, the JPQL and parameter annotations are mismatched and the
wrong @Param import is used; update the query to reference the correct user id
field (replace pp.user.id with pp.user.userId), make the @Param name for the
party status match the JPQL placeholder (use "partyStatus" instead of
"partyStatuses") and ensure the method parameter name matches that @Param, and
replace the imported io.lettuce.core.dynamic.annotation.Param with
org.springframework.data.jpa.repository.Param so Spring Data JPA binds
parameters correctly.
| .hostUsername(party.getHost().getNickname()) | ||
| .startDate(party.getCreatedAt()) | ||
| .endDate(party.getClosedAt()) | ||
| .createdAt(party.getCreatedAt()) |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# First, locate and read the PartyResponse.java file
find . -name "PartyResponse.java" -type fRepository: tinybite-2025/tinybite-server
Length of output: 140
🏁 Script executed:
# Also locate the Party entity
find . -name "Party.java" -type fRepository: tinybite-2025/tinybite-server
Length of output: 132
🏁 Script executed:
# Check file sizes before reading
wc -l ./src/main/java/ita/tinybite/domain/user/dto/res/PartyResponse.java
wc -l ./src/main/java/ita/tinybite/domain/party/entity/Party.javaRepository: tinybite-2025/tinybite-server
Length of output: 207
🏁 Script executed:
# Read PartyResponse.java entirely
cat -n ./src/main/java/ita/tinybite/domain/user/dto/res/PartyResponse.javaRepository: tinybite-2025/tinybite-server
Length of output: 1960
🏁 Script executed:
# Read Party.java to check fields
cat -n ./src/main/java/ita/tinybite/domain/party/entity/Party.javaRepository: tinybite-2025/tinybite-server
Length of output: 6650
🏁 Script executed:
# Check if there are any null safety patterns for host field
rg "host.*null|host.*Optional" ./src/main/java/ita/tinybite/domain/party/entity/Party.java ./src/main/java/ita/tinybite/domain/user/dto/res/PartyResponse.javaRepository: tinybite-2025/tinybite-server
Length of output: 184
🏁 Script executed:
# Search for other usages of party.getHost() to see if null checks are done elsewhere
rg "getHost\(\)" --type java -A 2 -B 2 | head -50Repository: tinybite-2025/tinybite-server
Length of output: 4923
startDate와 createdAt이 동일한 값으로 매핑되고 있으며, NPE 방지를 위한 개선이 필요합니다.
startDate와createdAt이 모두party.getCreatedAt()으로 설정되어 있어 중복되고 의미가 불명확합니다. Party 엔티티에는 별도의 시작일(startDate) 필드가 없으므로,startDate의 의도를 명확히 하고 적절한 필드를 매핑해야 합니다. 현재 매핑은 파티 생성 시간을 두 필드에 중복으로 설정하는 것으로 보이며, 이는 DTO 설계를 재검토할 필요가 있습니다.party.getHost()가 null이 될 가능성에 대비하여 null 체크를 추가하는 것을 권장합니다.
🔎 NPE 방지를 위한 수정 제안
- .hostUsername(party.getHost().getNickname())
+ .hostUsername(party.getHost() != null ? party.getHost().getNickname() : null)🤖 Prompt for AI Agents
In src/main/java/ita/tinybite/domain/user/dto/res/PartyResponse.java around
lines 37 to 40, startDate is incorrectly mapped to party.getCreatedAt()
(duplicating createdAt) and party.getHost() is used without a null check; change
the startDate mapping to the correct source (e.g., party.getStartDate() if the
Party entity has that field, otherwise leave startDate null or remove the
duplicate), and guard host access with a null check so the DTO uses host == null
? null : host.getNickname() to avoid NPEs.
| return participants.stream() | ||
| .map(pp -> { | ||
| Party party = pp.getParty(); | ||
| int currentParticipants = participantRepository | ||
| .countByPartyIdAndStatus(party.getId(), ParticipantStatus.APPROVED); | ||
| boolean isHost = party.getHost().getUserId().equals(userId); | ||
| return PartyResponse.from(party, currentParticipants, isHost,pp.getStatus()); | ||
| }) | ||
| .collect(Collectors.toList()); |
There was a problem hiding this comment.
N+1 쿼리 문제가 있습니다.
각 PartyParticipant마다 countByPartyIdAndStatus()를 호출하여 참여자 수를 조회하고 있습니다. 사용자가 N개의 활성 파티에 참여 중이라면 N+1개의 쿼리가 발생합니다. 파티 수가 많아지면 성능 저하가 발생할 수 있습니다.
🔎 개선 방안
하나의 쿼리로 파티별 참여자 수를 미리 조회하는 방법을 고려해보세요:
// Repository에 추가
@Query("SELECT pp.party.id, COUNT(pp) FROM PartyParticipant pp " +
"WHERE pp.party.id IN :partyIds AND pp.status = :status " +
"GROUP BY pp.party.id")
List<Object[]> countByPartyIdsAndStatus(
@Param("partyIds") List<Long> partyIds,
@Param("status") ParticipantStatus status
);또는 Party 엔티티의 currentParticipants 필드가 이미 동기화되어 있다면 해당 필드를 사용할 수 있습니다.
🤖 Prompt for AI Agents
In src/main/java/ita/tinybite/domain/user/service/UserService.java around lines
74-82, the current implementation issues N+1 queries by calling
participantRepository.countByPartyIdAndStatus(...) per PartyParticipant;
instead, add a repository method that returns counts grouped by party IDs for
the list of party IDs (e.g., countByPartyIdsAndStatus), call that once with all
party IDs to produce a Map<Long,Integer> of partyId->count, and then use that
map and the already-loaded Party/host info when mapping participants to
PartyResponse; ensure you collect partyIds from participants first, invoke the
batch count query, build the lookup, and replace per-item count calls with
lookups to eliminate the per-item DB call.
| Party party = pp.getParty(); | ||
| int currentParticipants = participantRepository | ||
| .countByPartyIdAndStatus(party.getId(), ParticipantStatus.APPROVED); | ||
| boolean isHost = party.getHost().getUserId().equals(userId); |
There was a problem hiding this comment.
party.getHost()가 null일 경우 NPE가 발생할 수 있습니다.
호스트가 탈퇴하거나 삭제된 경우 getHost()가 null을 반환할 수 있습니다.
🔎 수정 제안
- boolean isHost = party.getHost().getUserId().equals(userId);
+ boolean isHost = party.getHost() != null && party.getHost().getUserId().equals(userId);🤖 Prompt for AI Agents
In src/main/java/ita/tinybite/domain/user/service/UserService.java around line
79, calling party.getHost().getUserId() can throw an NPE if getHost() is null;
change the logic to perform a null-safe check (e.g., assign Host host =
party.getHost(); then set isHost = host != null &&
Objects.equals(host.getUserId(), userId) or use
Optional.ofNullable(party.getHost()).map(Host::getUserId).map(id ->
id.equals(userId)).orElse(false)) so that when the host is missing isHost
becomes false and no NPE is raised.
| private PartyParticipantRepository participantRepository; | ||
|
|
There was a problem hiding this comment.
participantRepository가 초기화되지 않아 NPE가 발생할 수 있습니다.
participantRepository 필드가 @Autowired나 @Mock으로 선언되지 않아 null 상태로 UserService에 전달됩니다. 현재 테스트에서 getActiveParties() 메서드를 호출하지 않더라도, 새로 추가된 기능에 대한 테스트 커버리지가 누락되어 있고 향후 NPE를 유발할 수 있습니다.
🔎 수정 제안
@Autowired
private UserRepository userRepository;
- private PartyParticipantRepository participantRepository;
+ @Autowired
+ private PartyParticipantRepository participantRepository;또는 getActiveParties() 메서드에 대한 별도의 테스트 케이스를 추가하는 것을 권장합니다.
Also applies to: 44-44
…erver into feature/user-mypage
* feat : 닉네임 중복 체크 (nickname unique), 인증코드 검사 예외처리 추가 * fix : user_id IDENTITY strategy & dev redis host 이름변경 (localhost -> redis) * test코드 생성 & swagger url 삭제 & 환경변수 중복 삭제 * fix : 엔드포인트 추가 * Feature/26 notification (#29) * feat : google login 구현 완료 * feat : google login 구현 완료 (ios 구현 중) * fix : main push 시에만 workflow trigger * Feature/#28 google apple login * feat : google login 구현 완료 * fix : user hard delete * feat : apple 로그인 구현 및 ddl-auto -> update 변경 * workflow 줄바꿈 에러 수정 * hotifx : 에러 핸들링 수정 및 무중단 배포 삭제 (리소스 너무 많이 먹음) * 수정사항 반영 (API 인증 관련, db schema, 예외 처리 등..) * Feature/35 term (#38) * 약관 엔티티 생성 및 연관관계 설정 * 회원가입에 약관 저장 로직 추가 * 서버에서 idToken을 받아올 수 없으므로 단순히 이메일로 accessToken을 받아오는 test API 추가 * fix : docker compose 명령어 수정 * Feature : 파티 기능 (#42) * feat : 파티 엔티티 정의 * feat : 파티 dto * feat : party dto 정의 * feat : party entity 정의 * feat : 파티 생성,수정,삭제, 조회 partycontroller partyservice partyrepository * feat : 거리 계산 클래스 * refactor : 불필요한 코드 삭제 * refactor : token provider로 유저 아이디 추출하도록 변경 * Fix: 파티 기능 버그 수정 * docs : 파티 swagger 문서 추가 * hotfix : url parser 경로 제거 * hotfix : 파티 거리 계산 로직 임시 주석 처리 * hotfix : 파티 수정, 삭제 controller 추가 * hotfix : 선택 값들이 존재할때만 넣도록 수정 * hotfix : 위도, 경도 로직 삭제 * Feat : 마이페이지 참여중인 파티 조회 (#50) * feat : 마이페이지 활성 파티 조회 * docs : 유저 기능 swagger 문서화 --------- Co-authored-by: Wonjae Lim <yyytir777@gmail.com> Co-authored-by: Youjin <114673063+marshmallowing@users.noreply.github.com>
* feat : 닉네임 중복 체크 (nickname unique), 인증코드 검사 예외처리 추가 * fix : user_id IDENTITY strategy & dev redis host 이름변경 (localhost -> redis) * test코드 생성 & swagger url 삭제 & 환경변수 중복 삭제 * fix : 엔드포인트 추가 * Feature/26 notification (#29) * feat : google login 구현 완료 * feat : google login 구현 완료 (ios 구현 중) * fix : main push 시에만 workflow trigger * Feature/#28 google apple login * feat : google login 구현 완료 * fix : user hard delete * feat : apple 로그인 구현 및 ddl-auto -> update 변경 * workflow 줄바꿈 에러 수정 * hotifx : 에러 핸들링 수정 및 무중단 배포 삭제 (리소스 너무 많이 먹음) * 수정사항 반영 (API 인증 관련, db schema, 예외 처리 등..) * Feature/35 term (#38) * 약관 엔티티 생성 및 연관관계 설정 * 회원가입에 약관 저장 로직 추가 * 서버에서 idToken을 받아올 수 없으므로 단순히 이메일로 accessToken을 받아오는 test API 추가 * fix : docker compose 명령어 수정 * Feature : 파티 기능 (#42) * feat : 파티 엔티티 정의 * feat : 파티 dto * feat : party dto 정의 * feat : party entity 정의 * feat : 파티 생성,수정,삭제, 조회 partycontroller partyservice partyrepository * feat : 거리 계산 클래스 * refactor : 불필요한 코드 삭제 * refactor : token provider로 유저 아이디 추출하도록 변경 * Fix: 파티 기능 버그 수정 * docs : 파티 swagger 문서 추가 * hotfix : url parser 경로 제거 * hotfix : 파티 거리 계산 로직 임시 주석 처리 * hotfix : 파티 수정, 삭제 controller 추가 * hotfix : 선택 값들이 존재할때만 넣도록 수정 * hotfix : 위도, 경도 로직 삭제 * Feat : 마이페이지 참여중인 파티 조회 (#50) * feat : 마이페이지 활성 파티 조회 * docs : 유저 기능 swagger 문서화 * hotfix : user service에 transactional 어노테이션 추가 * hotfix : 참여중 파티 조회 반환 형식 통일 * hotfix : 파티 생성, 조회 시, 거리 계산 로직 반영 * Hotfix: 유저 좌표 입력 requestParam 형식으로 변경 * hotfix : 누락된 swagger 문서 수정사항 반영 * feat : 회원 탈퇴 및 재가입 방지, 검증 (#65) * fix : 파티 수정 버그 픽스 (#67) * hotfix : 탈퇴 유저 마스킹 로직 변경 * feat : 마이페이지에서 참여중,호스트인 파티 구분해서 조회 (#71) * Feature/73 search party (#74) * feat : 파티 검색 추가 * fix : 스웨거 description 추가 * Feature/73 search party (#76) * feature & fix : 유저 최근 검색어 API 구현 * Fix : 호스트만 있을때는 파티 수정할 수 있도록 변경 (#78) * fix : 파티 삭제시 호스트는 현재인원에서 제외하도록 수정 (#80) * hotfix : jpa 네이밍 및 쿼리 수정 * hotfix : jpa 네이밍 및 쿼리 수정 * feat : 파티 카테고리, 최신순, 거리순 정렬 (#83) * Feature/44 chat (#82) * feat : stomp import 및 인증 설정 진행 * feat : 웹소켓 subscribe, unsubscribe, disconnect 시 유저의 실시간 채팅방 접속 정보 수정 * feat : chatMessage 엔티티 추가 * feat : 채팅 전송, 채팅이력 조회 API 생성 * fix : 채팅 기능 고도화 * fix : minor change * fix : 웹소켓에서 오류 발생 시 에러 메시지 사용자에게 보냄 * fix : 참여 요청 거절 수정 * hotfix : 파티 삭제 되지 않는 문제 수정 (#86) * hotfix : 파티 수정사항이 db에 반영 되지 않는 문제 수정 * feat : 유저 프로필 이미지 수정, 삭제 (#89) * Fix : 유저 프로필 수정, 삭제 (#91) * feat : 유저 프로필 이미지 수정, 삭제 * fix : 유저 프로필 수정, 삭제 * hotfix: 유저 정보 조회시 프로필 이미지 반환하도록 수정 * Fix/party search (#94) * feat : 거리 계산 쿼리 PartySearchRepository로 분리 (거리순, 페이징, 검색) * feat : 거리 계산 API 구현 * feat: 파티 참여, 거절, 종료 알림 연결 (#97) Co-authored-by: marshmallowing <yuin1111801@naver.com> * fix : 마이페이지에서 참여중, 호스트 파티 조회시 최신순으로 조회되도록 수정 (#98) * feat : 파티 생성시 이미지 없을 경우 디폴트 이미지 반환하도록 수정 (#100) * feat: 채팅 알림 단체/개인 구분 (#102) * feat: 파티 참여, 거절, 종료 알림 연결 * feat: 채팅 알림 단체/개인 구분 * fix : 마이페이지에서 참여중, 호스트 파티 조회시 최신순으로 조회되도록 수정 (#98) * hotfix : native query 문법 오류 해결 * hotfix : 카테고리 조건 추가 * hotfix : Param 이름 추가 * hotfix : PartyCategory를 String으로 받아 index로 조회하지 못하게 방지 * hotfix : 메시지 스키마 변경 * feat : 파티 생성시 이미지 없을 경우 디폴트 이미지 반환하도록 수정 (#100) --------- Co-authored-by: marshmallowing <yuin1111801@naver.com> Co-authored-by: Donghun Won <wonhun1225@gmail.com> Co-authored-by: Wonjae Lim <yyytir777@gmail.com> * fix : 채팅방 유형 별 알림 변경 * Feat : 파티 목록 디폴트 이미지 필드 추가 (#104) * feat : 파티 생성시 이미지 없을 경우 디폴트 이미지 반환하도록 수정 * feat : 파티 목록 이미지 디폴트 필드 추가 * Fix : 파티 썸네일 이미지 주입되도록 value값 수정 (#106) * feat : 파티 생성시 이미지 없을 경우 디폴트 이미지 반환하도록 수정 * feat : 파티 목록 이미지 디폴트 필드 추가 * fix : 파티 썸네일 이미지 주입되도록 value값 수정 --------- Co-authored-by: Wonjae Lim <yyytir777@gmail.com> Co-authored-by: Youjin <114673063+marshmallowing@users.noreply.github.com> Co-authored-by: marshmallowing <yuin1111801@naver.com>
* feat : 닉네임 중복 체크 (nickname unique), 인증코드 검사 예외처리 추가 * fix : user_id IDENTITY strategy & dev redis host 이름변경 (localhost -> redis) * test코드 생성 & swagger url 삭제 & 환경변수 중복 삭제 * fix : 엔드포인트 추가 * Feature/26 notification (#29) * feat : google login 구현 완료 * feat : google login 구현 완료 (ios 구현 중) * fix : main push 시에만 workflow trigger * Feature/#28 google apple login * feat : google login 구현 완료 * fix : user hard delete * feat : apple 로그인 구현 및 ddl-auto -> update 변경 * workflow 줄바꿈 에러 수정 * hotifx : 에러 핸들링 수정 및 무중단 배포 삭제 (리소스 너무 많이 먹음) * 수정사항 반영 (API 인증 관련, db schema, 예외 처리 등..) * Feature/35 term (#38) * 약관 엔티티 생성 및 연관관계 설정 * 회원가입에 약관 저장 로직 추가 * 서버에서 idToken을 받아올 수 없으므로 단순히 이메일로 accessToken을 받아오는 test API 추가 * fix : docker compose 명령어 수정 * Feature : 파티 기능 (#42) * feat : 파티 엔티티 정의 * feat : 파티 dto * feat : party dto 정의 * feat : party entity 정의 * feat : 파티 생성,수정,삭제, 조회 partycontroller partyservice partyrepository * feat : 거리 계산 클래스 * refactor : 불필요한 코드 삭제 * refactor : token provider로 유저 아이디 추출하도록 변경 * Fix: 파티 기능 버그 수정 * docs : 파티 swagger 문서 추가 * hotfix : url parser 경로 제거 * hotfix : 파티 거리 계산 로직 임시 주석 처리 * hotfix : 파티 수정, 삭제 controller 추가 * hotfix : 선택 값들이 존재할때만 넣도록 수정 * hotfix : 위도, 경도 로직 삭제 * Feat : 마이페이지 참여중인 파티 조회 (#50) * feat : 마이페이지 활성 파티 조회 * docs : 유저 기능 swagger 문서화 * hotfix : user service에 transactional 어노테이션 추가 * hotfix : 참여중 파티 조회 반환 형식 통일 * hotfix : 파티 생성, 조회 시, 거리 계산 로직 반영 * Hotfix: 유저 좌표 입력 requestParam 형식으로 변경 * hotfix : 누락된 swagger 문서 수정사항 반영 * feat : 회원 탈퇴 및 재가입 방지, 검증 (#65) * fix : 파티 수정 버그 픽스 (#67) * hotfix : 탈퇴 유저 마스킹 로직 변경 * feat : 마이페이지에서 참여중,호스트인 파티 구분해서 조회 (#71) * Feature/73 search party (#74) * feat : 파티 검색 추가 * fix : 스웨거 description 추가 * Feature/73 search party (#76) * feature & fix : 유저 최근 검색어 API 구현 * Fix : 호스트만 있을때는 파티 수정할 수 있도록 변경 (#78) * fix : 파티 삭제시 호스트는 현재인원에서 제외하도록 수정 (#80) * hotfix : jpa 네이밍 및 쿼리 수정 * hotfix : jpa 네이밍 및 쿼리 수정 * feat : 파티 카테고리, 최신순, 거리순 정렬 (#83) * Feature/44 chat (#82) * feat : stomp import 및 인증 설정 진행 * feat : 웹소켓 subscribe, unsubscribe, disconnect 시 유저의 실시간 채팅방 접속 정보 수정 * feat : chatMessage 엔티티 추가 * feat : 채팅 전송, 채팅이력 조회 API 생성 * fix : 채팅 기능 고도화 * fix : minor change * fix : 웹소켓에서 오류 발생 시 에러 메시지 사용자에게 보냄 * fix : 참여 요청 거절 수정 * hotfix : 파티 삭제 되지 않는 문제 수정 (#86) * hotfix : 파티 수정사항이 db에 반영 되지 않는 문제 수정 * feat : 유저 프로필 이미지 수정, 삭제 (#89) * Fix : 유저 프로필 수정, 삭제 (#91) * feat : 유저 프로필 이미지 수정, 삭제 * fix : 유저 프로필 수정, 삭제 * hotfix: 유저 정보 조회시 프로필 이미지 반환하도록 수정 * Fix/party search (#94) * feat : 거리 계산 쿼리 PartySearchRepository로 분리 (거리순, 페이징, 검색) * feat : 거리 계산 API 구현 * feat: 파티 참여, 거절, 종료 알림 연결 (#97) Co-authored-by: marshmallowing <yuin1111801@naver.com> * fix : 마이페이지에서 참여중, 호스트 파티 조회시 최신순으로 조회되도록 수정 (#98) * feat : 파티 생성시 이미지 없을 경우 디폴트 이미지 반환하도록 수정 (#100) * feat: 채팅 알림 단체/개인 구분 (#102) * feat: 파티 참여, 거절, 종료 알림 연결 * feat: 채팅 알림 단체/개인 구분 * fix : 마이페이지에서 참여중, 호스트 파티 조회시 최신순으로 조회되도록 수정 (#98) * hotfix : native query 문법 오류 해결 * hotfix : 카테고리 조건 추가 * hotfix : Param 이름 추가 * hotfix : PartyCategory를 String으로 받아 index로 조회하지 못하게 방지 * hotfix : 메시지 스키마 변경 * feat : 파티 생성시 이미지 없을 경우 디폴트 이미지 반환하도록 수정 (#100) --------- Co-authored-by: marshmallowing <yuin1111801@naver.com> Co-authored-by: Donghun Won <wonhun1225@gmail.com> Co-authored-by: Wonjae Lim <yyytir777@gmail.com> * fix : 채팅방 유형 별 알림 변경 * Feat : 파티 목록 디폴트 이미지 필드 추가 (#104) * feat : 파티 생성시 이미지 없을 경우 디폴트 이미지 반환하도록 수정 * feat : 파티 목록 이미지 디폴트 필드 추가 * Fix : 파티 썸네일 이미지 주입되도록 value값 수정 (#106) * feat : 파티 생성시 이미지 없을 경우 디폴트 이미지 반환하도록 수정 * feat : 파티 목록 이미지 디폴트 필드 추가 * fix : 파티 썸네일 이미지 주입되도록 value값 수정 * Feature/44 chat (#107) * fix : 파티 요청 채팅방 반환하도록 수정 * hotfix: 파티 세부 조회시 디폴트 이미지 필드 수정 * Feature/103 파티장 리마인드 알림 (#110) * feat: 파티장 리마인드 알림 * feat: 파티서비스에 적용 --------- Co-authored-by: marshmallowing <yuin1111801@naver.com> * Feat : 파티 추가 기능(파티 목록 페이지네이션, 파티탈퇴, 파티 모집 완료) (#113) * feat : 파티 탈퇴, 파티 모집 완료 * feat : 파티 목록 조회시 페이지네이션 * Feature/44 chat (#115) --------- Co-authored-by: Youjin <114673063+marshmallowing@users.noreply.github.com> Co-authored-by: Donghun Won <wonhun1225@gmail.com> Co-authored-by: marshmallowing <yuin1111801@naver.com>
* feat : 닉네임 중복 체크 (nickname unique), 인증코드 검사 예외처리 추가 * fix : user_id IDENTITY strategy & dev redis host 이름변경 (localhost -> redis) * test코드 생성 & swagger url 삭제 & 환경변수 중복 삭제 * fix : 엔드포인트 추가 * Feature/26 notification (#29) * feat : google login 구현 완료 * feat : google login 구현 완료 (ios 구현 중) * fix : main push 시에만 workflow trigger * Feature/#28 google apple login * feat : google login 구현 완료 * fix : user hard delete * feat : apple 로그인 구현 및 ddl-auto -> update 변경 * workflow 줄바꿈 에러 수정 * hotifx : 에러 핸들링 수정 및 무중단 배포 삭제 (리소스 너무 많이 먹음) * 수정사항 반영 (API 인증 관련, db schema, 예외 처리 등..) * Feature/35 term (#38) * 약관 엔티티 생성 및 연관관계 설정 * 회원가입에 약관 저장 로직 추가 * 서버에서 idToken을 받아올 수 없으므로 단순히 이메일로 accessToken을 받아오는 test API 추가 * fix : docker compose 명령어 수정 * Feature : 파티 기능 (#42) * feat : 파티 엔티티 정의 * feat : 파티 dto * feat : party dto 정의 * feat : party entity 정의 * feat : 파티 생성,수정,삭제, 조회 partycontroller partyservice partyrepository * feat : 거리 계산 클래스 * refactor : 불필요한 코드 삭제 * refactor : token provider로 유저 아이디 추출하도록 변경 * Fix: 파티 기능 버그 수정 * docs : 파티 swagger 문서 추가 * hotfix : url parser 경로 제거 * hotfix : 파티 거리 계산 로직 임시 주석 처리 * hotfix : 파티 수정, 삭제 controller 추가 * hotfix : 선택 값들이 존재할때만 넣도록 수정 * hotfix : 위도, 경도 로직 삭제 * Feat : 마이페이지 참여중인 파티 조회 (#50) * feat : 마이페이지 활성 파티 조회 * docs : 유저 기능 swagger 문서화 * hotfix : user service에 transactional 어노테이션 추가 * hotfix : 참여중 파티 조회 반환 형식 통일 * hotfix : 파티 생성, 조회 시, 거리 계산 로직 반영 * Hotfix: 유저 좌표 입력 requestParam 형식으로 변경 * hotfix : 누락된 swagger 문서 수정사항 반영 * feat : 회원 탈퇴 및 재가입 방지, 검증 (#65) * fix : 파티 수정 버그 픽스 (#67) * hotfix : 탈퇴 유저 마스킹 로직 변경 * feat : 마이페이지에서 참여중,호스트인 파티 구분해서 조회 (#71) * Feature/73 search party (#74) * feat : 파티 검색 추가 * fix : 스웨거 description 추가 * Feature/73 search party (#76) * feature & fix : 유저 최근 검색어 API 구현 * Fix : 호스트만 있을때는 파티 수정할 수 있도록 변경 (#78) * fix : 파티 삭제시 호스트는 현재인원에서 제외하도록 수정 (#80) * hotfix : jpa 네이밍 및 쿼리 수정 * hotfix : jpa 네이밍 및 쿼리 수정 * feat : 파티 카테고리, 최신순, 거리순 정렬 (#83) * Feature/44 chat (#82) * feat : stomp import 및 인증 설정 진행 * feat : 웹소켓 subscribe, unsubscribe, disconnect 시 유저의 실시간 채팅방 접속 정보 수정 * feat : chatMessage 엔티티 추가 * feat : 채팅 전송, 채팅이력 조회 API 생성 * fix : 채팅 기능 고도화 * fix : minor change * fix : 웹소켓에서 오류 발생 시 에러 메시지 사용자에게 보냄 * fix : 참여 요청 거절 수정 * hotfix : 파티 삭제 되지 않는 문제 수정 (#86) * hotfix : 파티 수정사항이 db에 반영 되지 않는 문제 수정 * feat : 유저 프로필 이미지 수정, 삭제 (#89) * Fix : 유저 프로필 수정, 삭제 (#91) * feat : 유저 프로필 이미지 수정, 삭제 * fix : 유저 프로필 수정, 삭제 * hotfix: 유저 정보 조회시 프로필 이미지 반환하도록 수정 * Fix/party search (#94) * feat : 거리 계산 쿼리 PartySearchRepository로 분리 (거리순, 페이징, 검색) * feat : 거리 계산 API 구현 * feat: 파티 참여, 거절, 종료 알림 연결 (#97) Co-authored-by: marshmallowing <yuin1111801@naver.com> * fix : 마이페이지에서 참여중, 호스트 파티 조회시 최신순으로 조회되도록 수정 (#98) * feat : 파티 생성시 이미지 없을 경우 디폴트 이미지 반환하도록 수정 (#100) * feat: 채팅 알림 단체/개인 구분 (#102) * feat: 파티 참여, 거절, 종료 알림 연결 * feat: 채팅 알림 단체/개인 구분 * fix : 마이페이지에서 참여중, 호스트 파티 조회시 최신순으로 조회되도록 수정 (#98) * hotfix : native query 문법 오류 해결 * hotfix : 카테고리 조건 추가 * hotfix : Param 이름 추가 * hotfix : PartyCategory를 String으로 받아 index로 조회하지 못하게 방지 * hotfix : 메시지 스키마 변경 * feat : 파티 생성시 이미지 없을 경우 디폴트 이미지 반환하도록 수정 (#100) --------- Co-authored-by: marshmallowing <yuin1111801@naver.com> Co-authored-by: Donghun Won <wonhun1225@gmail.com> Co-authored-by: Wonjae Lim <yyytir777@gmail.com> * fix : 채팅방 유형 별 알림 변경 * Feat : 파티 목록 디폴트 이미지 필드 추가 (#104) * feat : 파티 생성시 이미지 없을 경우 디폴트 이미지 반환하도록 수정 * feat : 파티 목록 이미지 디폴트 필드 추가 * Fix : 파티 썸네일 이미지 주입되도록 value값 수정 (#106) * feat : 파티 생성시 이미지 없을 경우 디폴트 이미지 반환하도록 수정 * feat : 파티 목록 이미지 디폴트 필드 추가 * fix : 파티 썸네일 이미지 주입되도록 value값 수정 * Feature/44 chat (#107) * fix : 파티 요청 채팅방 반환하도록 수정 * hotfix: 파티 세부 조회시 디폴트 이미지 필드 수정 * Feature/103 파티장 리마인드 알림 (#110) * feat: 파티장 리마인드 알림 * feat: 파티서비스에 적용 --------- Co-authored-by: marshmallowing <yuin1111801@naver.com> * Feat : 파티 추가 기능(파티 목록 페이지네이션, 파티탈퇴, 파티 모집 완료) (#113) * feat : 파티 탈퇴, 파티 모집 완료 * feat : 파티 목록 조회시 페이지네이션 * Feature/44 chat (#115) * Feat : host 위치 추가 * Feature/chatroom detail (#118) * Feature/chatroom detail (#120) * Feat : 파티 상세 조회시 host 위치 반환값에 추가 (#117) * feature : 일대일 채팅방 조회 API * feat : 그룹 채팅방 조회 추가 * fix : 예외 처리 추가 --------- Co-authored-by: Donghun Won <wonhun1225@gmail.com> * feat : 파티 정렬 항상 거리순으로 수정 + 동네 기준으로 파티 조회 (#122) * Refactor: 파티 조회 시 거리 정보 반환 및 API 개선 (#124) * fix: PartyController API 경로 슬래시 누락 수정 * fix: 위도/경도 검증 로직 및 null 체크 개선 * docs: Swagger API 문서 보완 * feat: 파티 조회 시 거리 정보 반환 기능 추가 * feat: 알림 테스트용 API (#127) Co-authored-by: marshmallowing <yuin1111801@naver.com> --------- Co-authored-by: Wonjae Lim <yyytir777@gmail.com> Co-authored-by: Donghun Won <wonhun1225@gmail.com> Co-authored-by: marshmallowing <yuin1111801@naver.com>
* feat : 닉네임 중복 체크 (nickname unique), 인증코드 검사 예외처리 추가 * fix : user_id IDENTITY strategy & dev redis host 이름변경 (localhost -> redis) * test코드 생성 & swagger url 삭제 & 환경변수 중복 삭제 * fix : 엔드포인트 추가 * Feature/26 notification (#29) * feat : google login 구현 완료 * feat : google login 구현 완료 (ios 구현 중) * fix : main push 시에만 workflow trigger * Feature/#28 google apple login * feat : google login 구현 완료 * fix : user hard delete * feat : apple 로그인 구현 및 ddl-auto -> update 변경 * workflow 줄바꿈 에러 수정 * hotifx : 에러 핸들링 수정 및 무중단 배포 삭제 (리소스 너무 많이 먹음) * 수정사항 반영 (API 인증 관련, db schema, 예외 처리 등..) * Feature/35 term (#38) * 약관 엔티티 생성 및 연관관계 설정 * 회원가입에 약관 저장 로직 추가 * 서버에서 idToken을 받아올 수 없으므로 단순히 이메일로 accessToken을 받아오는 test API 추가 * fix : docker compose 명령어 수정 * Feature : 파티 기능 (#42) * feat : 파티 엔티티 정의 * feat : 파티 dto * feat : party dto 정의 * feat : party entity 정의 * feat : 파티 생성,수정,삭제, 조회 partycontroller partyservice partyrepository * feat : 거리 계산 클래스 * refactor : 불필요한 코드 삭제 * refactor : token provider로 유저 아이디 추출하도록 변경 * Fix: 파티 기능 버그 수정 * docs : 파티 swagger 문서 추가 * hotfix : url parser 경로 제거 * hotfix : 파티 거리 계산 로직 임시 주석 처리 * hotfix : 파티 수정, 삭제 controller 추가 * hotfix : 선택 값들이 존재할때만 넣도록 수정 * hotfix : 위도, 경도 로직 삭제 * Feat : 마이페이지 참여중인 파티 조회 (#50) * feat : 마이페이지 활성 파티 조회 * docs : 유저 기능 swagger 문서화 * hotfix : user service에 transactional 어노테이션 추가 * hotfix : 참여중 파티 조회 반환 형식 통일 * hotfix : 파티 생성, 조회 시, 거리 계산 로직 반영 * Hotfix: 유저 좌표 입력 requestParam 형식으로 변경 * hotfix : 누락된 swagger 문서 수정사항 반영 * feat : 회원 탈퇴 및 재가입 방지, 검증 (#65) * fix : 파티 수정 버그 픽스 (#67) * hotfix : 탈퇴 유저 마스킹 로직 변경 * feat : 마이페이지에서 참여중,호스트인 파티 구분해서 조회 (#71) * Feature/73 search party (#74) * feat : 파티 검색 추가 * fix : 스웨거 description 추가 * Feature/73 search party (#76) * feature & fix : 유저 최근 검색어 API 구현 * Fix : 호스트만 있을때는 파티 수정할 수 있도록 변경 (#78) * fix : 파티 삭제시 호스트는 현재인원에서 제외하도록 수정 (#80) * hotfix : jpa 네이밍 및 쿼리 수정 * hotfix : jpa 네이밍 및 쿼리 수정 * feat : 파티 카테고리, 최신순, 거리순 정렬 (#83) * Feature/44 chat (#82) * feat : stomp import 및 인증 설정 진행 * feat : 웹소켓 subscribe, unsubscribe, disconnect 시 유저의 실시간 채팅방 접속 정보 수정 * feat : chatMessage 엔티티 추가 * feat : 채팅 전송, 채팅이력 조회 API 생성 * fix : 채팅 기능 고도화 * fix : minor change * fix : 웹소켓에서 오류 발생 시 에러 메시지 사용자에게 보냄 * fix : 참여 요청 거절 수정 * hotfix : 파티 삭제 되지 않는 문제 수정 (#86) * hotfix : 파티 수정사항이 db에 반영 되지 않는 문제 수정 * feat : 유저 프로필 이미지 수정, 삭제 (#89) * Fix : 유저 프로필 수정, 삭제 (#91) * feat : 유저 프로필 이미지 수정, 삭제 * fix : 유저 프로필 수정, 삭제 * hotfix: 유저 정보 조회시 프로필 이미지 반환하도록 수정 * Fix/party search (#94) * feat : 거리 계산 쿼리 PartySearchRepository로 분리 (거리순, 페이징, 검색) * feat : 거리 계산 API 구현 * feat: 파티 참여, 거절, 종료 알림 연결 (#97) Co-authored-by: marshmallowing <yuin1111801@naver.com> * fix : 마이페이지에서 참여중, 호스트 파티 조회시 최신순으로 조회되도록 수정 (#98) * feat : 파티 생성시 이미지 없을 경우 디폴트 이미지 반환하도록 수정 (#100) * feat: 채팅 알림 단체/개인 구분 (#102) * feat: 파티 참여, 거절, 종료 알림 연결 * feat: 채팅 알림 단체/개인 구분 * fix : 마이페이지에서 참여중, 호스트 파티 조회시 최신순으로 조회되도록 수정 (#98) * hotfix : native query 문법 오류 해결 * hotfix : 카테고리 조건 추가 * hotfix : Param 이름 추가 * hotfix : PartyCategory를 String으로 받아 index로 조회하지 못하게 방지 * hotfix : 메시지 스키마 변경 * feat : 파티 생성시 이미지 없을 경우 디폴트 이미지 반환하도록 수정 (#100) --------- Co-authored-by: marshmallowing <yuin1111801@naver.com> Co-authored-by: Donghun Won <wonhun1225@gmail.com> Co-authored-by: Wonjae Lim <yyytir777@gmail.com> * fix : 채팅방 유형 별 알림 변경 * Feat : 파티 목록 디폴트 이미지 필드 추가 (#104) * feat : 파티 생성시 이미지 없을 경우 디폴트 이미지 반환하도록 수정 * feat : 파티 목록 이미지 디폴트 필드 추가 * Fix : 파티 썸네일 이미지 주입되도록 value값 수정 (#106) * feat : 파티 생성시 이미지 없을 경우 디폴트 이미지 반환하도록 수정 * feat : 파티 목록 이미지 디폴트 필드 추가 * fix : 파티 썸네일 이미지 주입되도록 value값 수정 * Feature/44 chat (#107) * fix : 파티 요청 채팅방 반환하도록 수정 * hotfix: 파티 세부 조회시 디폴트 이미지 필드 수정 * Feature/103 파티장 리마인드 알림 (#110) * feat: 파티장 리마인드 알림 * feat: 파티서비스에 적용 --------- Co-authored-by: marshmallowing <yuin1111801@naver.com> * Feat : 파티 추가 기능(파티 목록 페이지네이션, 파티탈퇴, 파티 모집 완료) (#113) * feat : 파티 탈퇴, 파티 모집 완료 * feat : 파티 목록 조회시 페이지네이션 * Feature/44 chat (#115) * Feat : host 위치 추가 * Feature/chatroom detail (#118) * Feature/chatroom detail (#120) * Feat : 파티 상세 조회시 host 위치 반환값에 추가 (#117) * feature : 일대일 채팅방 조회 API * feat : 그룹 채팅방 조회 추가 * fix : 예외 처리 추가 --------- Co-authored-by: Donghun Won <wonhun1225@gmail.com> * feat : 파티 정렬 항상 거리순으로 수정 + 동네 기준으로 파티 조회 (#122) * Refactor: 파티 조회 시 거리 정보 반환 및 API 개선 (#124) * fix: PartyController API 경로 슬래시 누락 수정 * fix: 위도/경도 검증 로직 및 null 체크 개선 * docs: Swagger API 문서 보완 * feat: 파티 조회 시 거리 정보 반환 기능 추가 * feat: 알림 테스트용 API (#127) Co-authored-by: marshmallowing <yuin1111801@naver.com> * hotfix : 모집 완료 파티 조회 수정 --------- Co-authored-by: Wonjae Lim <yyytir777@gmail.com> Co-authored-by: Youjin <114673063+marshmallowing@users.noreply.github.com> Co-authored-by: marshmallowing <yuin1111801@naver.com> Co-authored-by: Youjin <yujin1111801@naver.com>
📝 상세 내용
🔗 관련 이슈
Summary by CodeRabbit
릴리스 노트
새 기능
문서
✏️ Tip: You can customize this high-level summary in your review settings.