Skip to content

Conversation

@gunwoong1630
Copy link
Collaborator

  • πŸ’― ν…ŒμŠ€νŠΈλŠ” 잘 ν†΅κ³Όν–ˆλ‚˜μš”?
  • πŸ—οΈ λΉŒλ“œλŠ” μ„±κ³΅ν–ˆλ‚˜μš”?
  • 🧹 λΆˆν•„μš”ν•œ μ½”λ“œλŠ” μ œκ±°ν–ˆλ‚˜μš”?
  • πŸ’­ μ΄μŠˆλŠ” λ“±λ‘ν–ˆλ‚˜μš”?
  • 🏷️ 라벨은 λ“±λ‘ν–ˆλ‚˜μš”?

μž‘μ—… λ‚΄μš©

μŠ€ν¬λ¦°μƒ·

μ£Όμ˜μ‚¬ν•­

Closes #{이슈 번호}

HwuanPage and others added 30 commits July 15, 2025 09:21
* feat: 곡톡 도메인 κ΅¬ν˜„

* feat: 메인 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ— μΆ”κ°€

* feat: swagger μΆ”κ°€

* feat: swagger μΆ”κ°€
* feat: 곡톡 도메인 κ΅¬ν˜„

* feat: 메인 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ— μΆ”κ°€
* feature/OpenAPI Test/02-HwuanPage

* Update SurfingForecastApiClient.java

* feature/APICallTest-02-HwuanPage
* feature/EntityInit-13-HwuanPage

* feature/JellyfishEntityInit-13-HwuanPage

* Update FishingType.java

* feature/EntityInitialize-13-HwuanPage
* feat : MeetingService μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„

* feat : ParticipantResponse

* feat : MeetingListResponse κ΅¬ν˜„

* feat : MeetingDetailResponseκ΅¬ν˜„

* feat : MeetingDetailAndMemberResponse κ΅¬ν˜„

* feat : ListSpot κ΅¬ν˜„

* feat : DetailSpot κ΅¬ν˜„

* feat : CreateMeetingRequest κ΅¬ν˜„

* feat : Tag κ΅¬ν˜„

* feat : Long -> long λ³€κ²½

μ„œλΉ„μŠ€μ™€ Entityλ‚΄μ—μ„œ null값이 μ ˆλŒ€ λ‚˜μ˜€μ§€ μ•ŠλŠ”λ‹€κ³  νŒλ‹¨ν•˜λŠ” 값을 long으둜 λ³€κ²½ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

* feat : MeetingService.java

-> λ¬΄ν•œνŽ˜μ΄μ§€λ‘œλ”©ν˜•μ‹μœΌλ‘œ λ°”κΎΈμ—ˆμŠ΅λ‹ˆλ‹€.

* Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
* feature/FavoritesAndAlertInterface-16-HwuanPage

* Update AlertMapper.java

* Update JellyfishRegionDensityRepository.java

* Update AlertController.java

* Update FavoriteController.java

* Update FavoriteRepository.java

* Update AlertController.java

* Update JellyfishSpieces.java

* Update JellyfishRegion.java

* Update JellyfishRegion.java
* feature/CustomExceptionInit-22-HwuanPage

* Errorcode interface Change
* refactor: application.yml ν™˜κ²½λ³€μˆ˜ μ„€μ •
* Rename: μ˜€νƒ€ μˆ˜μ •
gunwoong1630 and others added 29 commits July 15, 2025 09:35
* Create Pdf Parser

* Web crawler run perpectly,but pdfparser do not work well

* PDF parse to stack DB complete with OPENAI

* CallAlert Complete

* JellyFish PDF parsing work well

* feature/ControllerTest Complete

* feature/JellyfishAlert-26-HwuanPage
* feat: 즐겨찾기 μΆ”κ°€ 및 λ¦¬νŒ©ν† λ§

* refactor: λ¦¬νŒ©ν† λ§
* refactor: κΈ°μ‘΄ state μ‚¬μš© 방식 -> stateless λ°©μ‹μœΌλ‘œ λ³€κ²½

* refactor: κΈ°μ‘΄ state μ‚¬μš© 방식 -> stateless λ°©μ‹μœΌλ‘œ λ³€κ²½μœΌλ‘œ 인해 ν•„μš” μ—†λŠ” μ—”λ“œ 포인트 μ‚­μ œ

* test: 변경사항 test μˆ˜μ •

* feat: 카카였 μΈ‘μ—μ„œ 인증 μ‹€νŒ¨μ‹œμ— λ°˜ν™˜ ν•˜λŠ” μ—λŸ¬ μ²˜λ¦¬ν•˜λŠ” μ½”λ“œ κ΅¬ν˜„

* test: 카카였 μΈ‘μ—μ„œ 인증 μ‹€νŒ¨μ‹œμ— λ°˜ν™˜ ν•˜λŠ” μ—λŸ¬ μ²˜λ¦¬ν•˜λŠ” ν…ŒμŠ€νŠΈ μΆ”κ°€

* fix: 주석 제거

* fix: exception λ³€κ²½
* WIP: Rebaseλ₯Ό μœ„ν•œ μž„μ‹œ μ €μž₯

* 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]>
* feature/IntegrationSet(test&Build)-52-HwuanPage

* data.sql unique update

* image build needs

* ignore dev.yml

* remove dev.yml tracking and ignore it

* prod

* proded
* feature: 컨트둀러, μ„œλΉ„μŠ€ 생성

* feature: ν™œλ™λ³„ μ§€μˆ˜ 쑰회(μœ„μΉ˜ 기반)

* feature: DTO μΆ”κ°€

* feature: ν™œλ™λ³„ μ§€μˆ˜ 쑰회(κΈ€λ‘œλ²Œ) μΆ”κ°€, 컨트둀러 μˆ˜μ •

* feature: ν™œλ™λ³„ μ§€μˆ˜ 상세 쑰회(λ―Έμ™„μ„±)

* feature: ν•΄μ–‘ 정보 쑰회

* feature: ν™œλ™ 상세 쑰회

---------

Co-authored-by: Gunwoong cho <[email protected]>
* fix: 멀버 μ‚­μ œ κ΅¬ν˜„

* feat: 멀버 μ‚­μ œ, μœ„/경도 μˆ˜μ • κ΅¬ν˜„

* test: ν…ŒμŠ€νŠΈ μˆ˜μ •

* Delete src/main/java/sevenstar/marineleisure/meeting/repository/MemberRepository.java

* Delete src/main/java/sevenstar/marineleisure/meeting/repository/OutdoorSpotSpotRepository.java

* Delete src/main/resources/test.http

---------

Co-authored-by: LEESUNBIN <[email protected]>
Co-authored-by: Gunwoong cho <[email protected]>
existsByMeetingIdAndUserId 둜 μˆ˜μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
memberId -> userId둜 μˆ˜μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
* 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]>
* hotfix: fix

* hotfix: fix

* hotfix: fix
* fix: application-prod.ymlμ—μ„œ μΏ ν‚€λ₯Ό μ“Έμ§€ 말지 κ²°μ •ν•  수 있게 μˆ˜μ •

* test: ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±
* chore/ReadytoDeployv1.0.0-68-HuwanPage

* chore/ReadytoDeploymentv1.0.0-68-HuwanPage

* remove etc

* prod
* feat : Meetingtest λ₯Ό μœ„ν•œ Util νŒŒμΌμž…λ‹ˆλ‹ˆλ‹€.

* feat : Meetingtest λ₯Ό μœ„ν•œ Util νŒŒμΌμž…λ‹ˆλ‹ˆλ‹€.

* feat : MeetingServiceImplTest λ‹¨μœ„ν…ŒμŠ€νŠΈμž…λ‹ˆλ‹€.

* feat : MeetingControllerTest ν†΅ν•©ν…ŒμŠ€νŠΈμž…λ‹ˆλ‹€.

* feat : Build Lombok을 ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ μˆ˜μ •μž…λ‹ˆλ‹€.

* feat : Tag μ—”ν‹°ν‹°

Tag List<String> content λ₯Ό λ³€ν™˜ν•˜κΈ° μœ„ν•œ νŒŒμΌμž…λ‹ˆλ‹€.

* feat : MeetingServiceImpl

* feat : MeetingServiceImplμ—μ„œ μˆ˜μ •ν•˜λŠ” 응닡을 μˆ˜μ • , 맀퍼λ₯Ό μˆ˜μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

* feat : Meetingμ—μ„œ ν•„μš”ν•œ url을 μ—΄μ–΄λ’€μŠ΅λ‹ˆλ‹€.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants