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: μ˜€νƒ€ μˆ˜μ •
HwuanPage and others added 29 commits July 17, 2025 11:46
* refacotr/favorite-Exception-update

* fix kakao_redirect_uri
* feat: mapServiceRefactoring

* refactoring: spot detail refactoring

* refactoring: GeoUtils refactoring

* test: repository test disable for prod

* fix: apply flyway to yml

* fix: disable test

* refactor: khoa refactoring

* fix: bug

* fix: sql
* fix : MeetingServiceImpl
getStatusMeetings -> getStatusMeeting_role : Guest 인지 host 인지 νŒλ‹¨ν•˜λŠ” λ‘œμ§μ„ μΆ”κ°€

* fix : MeetingRepository

getStatusMeetings -> getStatusMeeting_role : Guest 인지 host 인지 νŒλ‹¨ν•˜λŠ” λ‘œμ§μ„ μΆ”κ°€

* fix : MeetingError

MEETING_MEMBER_NOT_FOUND μ—λŸ¬λ₯Ό μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ―ΈνŒ…μ—μ„œ 맴버λ₯Ό 확인할 수 μ—†λŠ” μ—λŸ¬μž…λ‹ˆλ‹€.

* fix : MeetingController

MeetingController μ—μ„œ role 을 ν™•μΈν•˜μ—¬ μΆ”κ°€ 확인할 수 μžˆλ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

URL κ°œμ„ μ— μ˜ν•œ μƒˆλ‘œμš΄ ν…ŒμŠ€νŠΈ μž…λ‹ˆλ‹€.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

@disabled μΆ”κ°€ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
* feat: member μ‚­μ œ μ‹œ kakao μ—°κ²° 끊기 λ‘œμ§λ„ μˆ˜ν–‰ν•˜κ²Œ κ΅¬ν˜„

* test: λ³€κ²½ 사항 test
* feat: λ³΄μ•ˆ 인증 κ³Όμ •μ—μ„œ PKCE μΆ”κ°€ν•˜μ—¬ κ΅¬ν˜„

* test: λ³€κ²½ 사항 test μΆ”κ°€

* feat: PKCE 기반 λ³΄μ•ˆ κΈ°λŠ₯ μ½”λ“œ ꡬ쑰 λ³€κ²½

* test: PKCE 기반 λ³΄μ•ˆ κΈ°λŠ₯ test

* refactor: PKCE 생성을 ν΄λΌμ΄μ–ΈνŠΈ μ—κ²Œ λ„˜κΈ΄λ‹€.

* test: pkce test ν”Œλ‘œμš° 변경에 따라 λ³€κ²½

* fix: member entity의 nickname 쀑볡을 ν—ˆμš©ν•œλ‹€

* fix: ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ SchedulerService.java 의 @RequiredArgsConstrucor μ§€μš΄ λΆ€λΆ„ 볡ꡬ

* fix: ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ SchedulerService.java 의 @RequiredArgsConstrucor μ§€μš΄ λΆ€λΆ„ 볡ꡬ
* fix: 둜그인 μš”μ²­λ•Œμ˜ λ¦¬λ‹€μ΄λ ‰νŠΈ uriλ₯Ό 토큰 κ΅ν™˜μ‹œμ—λ„ μ‚¬μš©

* test: test

* fix: fallback μƒν™©μ—μ„œ λ¦¬λ‹€μ΄λ ‰νŠΈ uri μ°ΎλŠ” 둜직 μΆ”κ°€
* refactor: RichDomain으둜 λ³€κ²½ λ‚΄μ—­μž…λ‹ˆλ‹€.

* refactor: λˆ„λ½ ν”„λ‘œμ νŠΈ 파일이 μžˆμ–΄ μ²¨λΆ€ν•©λ‹ˆλ‹€.
# Conflicts:
#	src/main/java/sevenstar/marineleisure/global/api/kakao/service/PresetSchedulerService.java
#	src/main/java/sevenstar/marineleisure/global/api/scheduler/SchedulerService.java
#	src/main/java/sevenstar/marineleisure/spot/dto/detail/provider/ActivityProvider.java
#	src/main/java/sevenstar/marineleisure/spot/dto/detail/provider/FishingProvider.java
#	src/main/java/sevenstar/marineleisure/spot/dto/detail/provider/MudflatProvider.java
#	src/main/java/sevenstar/marineleisure/spot/dto/detail/provider/ScubaProvider.java
#	src/main/java/sevenstar/marineleisure/spot/dto/detail/provider/SurfingProvider.java
#	src/main/java/sevenstar/marineleisure/spot/service/SpotServiceImpl.java
* git initialize

* feature/swagger-03-gunwoong (#5)

* feat: 곡톡 도메인 κ΅¬ν˜„

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

* feat: swagger μΆ”κ°€

* feat: swagger μΆ”κ°€

* feature/base domain 04 gunwoong (#6)

* feat: 곡톡 도메인 κ΅¬ν˜„

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

* feature/OpenAPI Test/02-HwuanPage

* feature/OpenAPI Test/02-HwuanPage

* Update SurfingForecastApiClient.java

* feature/APICallTest-02-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/JellyfishEntityInit-13-HwuanPage

* Update FishingType.java

* feature/EntityInitialize-13-HwuanPage

* feat: entity, repositor κ΅¬ν˜„

* feat: μ˜ˆμƒ dto κ΅¬ν˜„

* chore: μ˜μ‘΄μ„± μΆ”κ°€

* feat: 둜그인 κ΅¬ν˜„ & 이후 토큰 λ°œκΈ‰ 둜직 κ΅¬ν˜„

* fix: AuthCotnroller μˆ˜μ •

* fix: ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μΉ΄μΉ΄μ˜€μ—μ„œ μ½”λ“œλ₯Ό λ°›μ•„ μ„œλ²„λ‘œ post ν•˜κ²Œ μˆ˜μ •

* feat: 토큰 검증

* feat: refresh token λΈ”λž™λ¦¬μŠ€νŠΈ 처리 둜직 κ΅¬ν˜„

* feat: refresh 토큰 λΈ”λž™λ¦¬μŠ€νŠΈ 처리 & μž¬λ°œκΈ‰ 둜직 κ΅¬ν˜„

* feat: SecurityFilterChain μ—”λ“œ 포인트 ν—ˆμš©

* feat: refresh 토큰 λΈ”λž™λ¦¬μŠ€νŠΈ 검증 둜직 κ΅¬ν˜„

* feat: redisμ—μ„œ refreshToken λΈ”λž™λ¦¬μŠ€νŠΈ 검증

* refactor: controller에 κ°•ν•˜κ²Œ κ²°ν•© λ˜μ–΄ 있던 λ‘œμ§λ“€ 뢄리

* test: member κ΄€λ ¨ ν…ŒμŠ€νŠΈ

* chore: ν•˜λ“œμ½”λ”©ν•œ μ€‘μš” κ°’ Intellij IDEA ν™˜κ²½λ³€μˆ˜λ‘œ μ„€μ •

* refactor: state 관리λ₯Ό μœ„ν•΄ μ„Έμ…˜ μΆ”κ°€

* feat: member 정보 μ‘°νšŒν•˜λŠ” μ„œλΉ„μŠ€ 둜직 κ΅¬ν˜„

* feat: member 정보 μ‘°νšŒν•˜λŠ” μ„œλΉ„μŠ€ 둜직 κ΅¬ν˜„

* format: naver formatter둜 ν¬λ§€νŒ…

* chore: application-dev

* fix: customException 처리

* Feat/meeting interface (#19)

* 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



---------



* Feature/FavoritesAndAlertInterface-16-HwuanPage

* 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

* 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

* 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

* feat: spot service (#34)

* feat: spot service

* feat: spot service 고도화 및 μ‘°νšŒλ„ κ΄€λ ¨ μ„œλΉ„μŠ€ μΆ”κ°€

* feat: μ‘°νšŒλ„ κ΄€λ ¨ μ„œλΉ„μŠ€ μΆ”κ°€

* feat: μ‘°νšŒλ„ κ΄€λ ¨ μ„œλΉ„μŠ€ μΆ”κ°€

* feat: μ‘°νšŒλ„ κ΄€λ ¨ μ„œλΉ„μŠ€ μΆ”κ°€

* hotfix: duplicated controller method

* 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

* Feature/spot preview 40 gunwoong (#41)

* feat: spot preview & λ¦¬νŒ©ν† λ§

* feat: spot preview & λ¦¬νŒ©ν† λ§

* hotfix: jpa metamodel fix

* fix: error fix

* fix: μ†Œμ…œ 둜그인 μž¬μ‹œλ„ μ‹œ λ‹‰λ„€μž„ UNIQUE μ œμ•½ μœ„λ°˜ 였λ₯˜ λ°œμƒ (#42)

* fix: λ‘œκ·Έμ•„μ›ƒ ν›„ 재둜그인 μ‹œ 동일 μ •λ³΄λ‘œ db에 insert ν•˜λ˜ 버그 μˆ˜μ •

* refactor: λ‘œκ·Έμ•„μ›ƒ ν›„ 재둜그인 μ‹œ 동일 μ •λ³΄λ‘œ db에 insert μˆ˜μ • 사항 λ¦¬νŒ©ν† λ§

* test: 변경사항에 λ”°λ₯Έ ν…ŒμŠ€νŠΈ μ½”λ“œ μˆ˜μ •

* hofix: bug fix

* Feature/Alert-22-HwuanPage

* 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: 즐겨찾기 μΆ”κ°€ 및 λ¦¬νŒ©ν† λ§ (#49)

* feat: 즐겨찾기 μΆ”κ°€ 및 λ¦¬νŒ©ν† λ§

* refactor: λ¦¬νŒ©ν† λ§

* feat: 카카였 λ‘œκ·ΈμΈμ„ stateless ν•˜κ²Œ λ³€κ²½ν•œλ‹€ (#51)

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

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

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

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

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

* fix: 주석 제거

* fix: exception λ³€κ²½

* Feat/meeting service (#46)

* 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

κΈ°λŠ₯을 μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

---------



* Feature/integration init (#54)

* 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/activities 17 audwls239 (#56)

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

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

* feature: DTO μΆ”κ°€

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

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

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

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

---------



* feat : ParticipantError μž…λ‹ˆλ‹€.

* hotfix: error fix

* fix : Directory μˆ˜μ •μ‚¬ν•­μž…λ‹ˆλ‹€. (#57)

* hotfix: error fix

* feat: member delete (#58)

* 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

---------




* fix : ParticipantRepository (#59)

existsByMeetingIdAndUserId 둜 μˆ˜μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

* fix : ParticipantRepository (#60)

memberId -> userId둜 μˆ˜μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

* 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

κΈ°λŠ₯을 μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

---------



* 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

κΈ°λŠ₯을 μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

---------



* fix : jellyfish λΆ€λΆ„

* fix: activity λΆ€λΆ„

* fix: member λΆ€λΆ„

* fix: member λΆ€λΆ„

* fix: spot λΆ€λΆ„

* fix: forecast λΆ€λΆ„

* fix: favorite λΆ€λΆ„

* fix: alert λΆ€λΆ„

* fix: meeting λΆ€λΆ„

---------







* hotfix/fix-alert&favorites-62-HwuanPage

* fix(hotfix/Meeting) : rebase둜 μΈν•œ μ½”λ“œ λˆ„λ½ μˆ˜μ • (#65)

* hotfix: μ½”λ“œ λˆ„λ½ ν•΄κ²° (#67)

* Fix/fix 70 gunwoong (#71)

* hotfix: fix

* hotfix: fix

* hotfix: fix

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

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

* test: ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±

* fix: activities μ‹œνλ¦¬ν‹° μ—”λ“œν¬μΈνŠΈ ν—ˆμš©. redirecturi μˆ˜μ •

* Chore/docker set andvariable-68-hwuanPage

* chore/ReadytoDeployv1.0.0-68-HuwanPage

* chore/ReadytoDeploymentv1.0.0-68-HuwanPage

* remove etc

* prod

* refactor: blacklist μ—”ν‹°ν‹°μ˜ jti에 인덱슀λ₯Ό 건닀. (#74)

* Feat/meeting test 75 (#77)

* 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을 μ—΄μ–΄λ’€μŠ΅λ‹ˆλ‹€.

* space prob solve

* stack-trace-DEBUG

* hotfix/data.sql deprecate-HwuanPage (#79)

* hotfix/data.sql deprecate-HwuanPage

* portnum fix

* Xtest

* test X

* workflow fix

* add id

* fix docker-compose-image-root

* release/v1-marineleisure

* fix: blacklist μ—”ν‹°ν‹°μ˜ jti에 인덱슀λ₯Ό 건닀. (#83)

* fix: cors ν”„λ‘ νŠΈμ—”λ“œ 배포 도메인 μΆ”κ°€ (#84)

* fix: blacklist μ—”ν‹°ν‹°μ˜ jti에 인덱슀λ₯Ό 건닀.

* fix: cors ν”„λ‘œνŠΈμ—”λ“œ 도메인 μΆ”κ°€

* hotfix/method_allowed_patch-HwuanPage (#86)

* Refactor/exception hwuan page (#87)

* refacotr/favorite-Exception-update

* fix kakao_redirect_uri

* Feature/map service refactoring 76 gunwoong (#85)

* feat: mapServiceRefactoring

* refactoring: spot detail refactoring

* refactoring: GeoUtils refactoring

* test: repository test disable for prod

* fix: apply flyway to yml

* fix: disable test

* refactor: khoa refactoring

* fix: bug

* fix: sql

* fix: yml ν™˜κ²½λ³€μˆ˜ μΆ”κ°€

* fix: detail field name μˆ˜μ •

* feature: μŠ€μΌ€μ€„λ§ 비동기 κ΅¬ν˜„ (#91)

* refactor: cacheable (#103)

* Fix/meeting urland role (#100)

* fix : MeetingServiceImpl
getStatusMeetings -> getStatusMeeting_role : Guest 인지 host 인지 νŒλ‹¨ν•˜λŠ” λ‘œμ§μ„ μΆ”κ°€

* fix : MeetingRepository

getStatusMeetings -> getStatusMeeting_role : Guest 인지 host 인지 νŒλ‹¨ν•˜λŠ” λ‘œμ§μ„ μΆ”κ°€

* fix : MeetingError

MEETING_MEMBER_NOT_FOUND μ—λŸ¬λ₯Ό μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ―ΈνŒ…μ—μ„œ 맴버λ₯Ό 확인할 수 μ—†λŠ” μ—λŸ¬μž…λ‹ˆλ‹€.

* fix : MeetingController

MeetingController μ—μ„œ role 을 ν™•μΈν•˜μ—¬ μΆ”κ°€ 확인할 수 μžˆλ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

URL κ°œμ„ μ— μ˜ν•œ μƒˆλ‘œμš΄ ν…ŒμŠ€νŠΈ μž…λ‹ˆλ‹€.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

@disabled μΆ”κ°€ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

* feat: νšŒμ› νƒˆν‡΄ μ‹œ 카카였 μ—°κ²° λŠκΈ°λ„ μˆ˜ν–‰ν•˜κ²Œ κ΅¬ν˜„ν•œλ‹€. (#98)

* feat: member μ‚­μ œ μ‹œ kakao μ—°κ²° 끊기 λ‘œμ§λ„ μˆ˜ν–‰ν•˜κ²Œ κ΅¬ν˜„

* test: λ³€κ²½ 사항 test

* feat : Meeting의 μ»€μ„œλ°©μ‹μ—μ„œ 맀핑을 ν•˜μ˜€μŠ΅λ‹ˆλ‹€. (#94)

* feat: 카카였 둜그인 κ³Όμ •μ—μ„œ pkceλ₯Ό 톡해 λ³΄μ•ˆ κ΄€μ μ—μ„œ κ°œμ„  (#106)

* feat: λ³΄μ•ˆ 인증 κ³Όμ •μ—μ„œ PKCE μΆ”κ°€ν•˜μ—¬ κ΅¬ν˜„

* test: λ³€κ²½ 사항 test μΆ”κ°€

* feat: PKCE 기반 λ³΄μ•ˆ κΈ°λŠ₯ μ½”λ“œ ꡬ쑰 λ³€κ²½

* test: PKCE 기반 λ³΄μ•ˆ κΈ°λŠ₯ test

* refactor: PKCE 생성을 ν΄λΌμ΄μ–ΈνŠΈ μ—κ²Œ λ„˜κΈ΄λ‹€.

* test: pkce test ν”Œλ‘œμš° 변경에 따라 λ³€κ²½

* fix: member entity의 nickname 쀑볡을 ν—ˆμš©ν•œλ‹€

* fix: ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ SchedulerService.java 의 @RequiredArgsConstrucor μ§€μš΄ λΆ€λΆ„ 볡ꡬ

* fix: ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ SchedulerService.java 의 @RequiredArgsConstrucor μ§€μš΄ λΆ€λΆ„ 볡ꡬ

* refactor: open-meteo μ„œλΉ„μŠ€ κ΄€λ ¨ λ¦¬νŒ©ν† λ§ (#95)

* refactor: RichDomain으둜 λ³€κ²½ λ‚΄μ—­μž…λ‹ˆλ‹€. (#105)

* Fix: login redirect (#107)

* fix: 둜그인 μš”μ²­λ•Œμ˜ λ¦¬λ‹€μ΄λ ‰νŠΈ uriλ₯Ό 토큰 κ΅ν™˜μ‹œμ—λ„ μ‚¬μš©

* test: test

* fix: fallback μƒν™©μ—μ„œ λ¦¬λ‹€μ΄λ ‰νŠΈ uri μ°ΎλŠ” 둜직 μΆ”κ°€

* Refactor/meeting rich domain (#110)

* refactor: RichDomain으둜 λ³€κ²½ λ‚΄μ—­μž…λ‹ˆλ‹€.

* refactor: λˆ„λ½ ν”„λ‘œμ νŠΈ 파일이 μžˆμ–΄ μ²¨λΆ€ν•©λ‹ˆλ‹€.

* build: caffenine 적용

---------

Co-authored-by: HwuanPage <[email protected]>
Co-authored-by: JaeoneHeo <[email protected]>
Co-authored-by: LEESUNBIN <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: MyungJin <[email protected]>
Co-authored-by: iseonbin <[email protected]>
* git initialize

* feature/swagger-03-gunwoong (#5)

* feat: 곡톡 도메인 κ΅¬ν˜„

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

* feat: swagger μΆ”κ°€

* feat: swagger μΆ”κ°€

* feature/base domain 04 gunwoong (#6)

* feat: 곡톡 도메인 κ΅¬ν˜„

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

* feature/OpenAPI Test/02-HwuanPage

* feature/OpenAPI Test/02-HwuanPage

* Update SurfingForecastApiClient.java

* feature/APICallTest-02-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/JellyfishEntityInit-13-HwuanPage

* Update FishingType.java

* feature/EntityInitialize-13-HwuanPage

* feat: entity, repositor κ΅¬ν˜„

* feat: μ˜ˆμƒ dto κ΅¬ν˜„

* chore: μ˜μ‘΄μ„± μΆ”κ°€

* feat: 둜그인 κ΅¬ν˜„ & 이후 토큰 λ°œκΈ‰ 둜직 κ΅¬ν˜„

* fix: AuthCotnroller μˆ˜μ •

* fix: ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μΉ΄μΉ΄μ˜€μ—μ„œ μ½”λ“œλ₯Ό λ°›μ•„ μ„œλ²„λ‘œ post ν•˜κ²Œ μˆ˜μ •

* feat: 토큰 검증

* feat: refresh token λΈ”λž™λ¦¬μŠ€νŠΈ 처리 둜직 κ΅¬ν˜„

* feat: refresh 토큰 λΈ”λž™λ¦¬μŠ€νŠΈ 처리 & μž¬λ°œκΈ‰ 둜직 κ΅¬ν˜„

* feat: SecurityFilterChain μ—”λ“œ 포인트 ν—ˆμš©

* feat: refresh 토큰 λΈ”λž™λ¦¬μŠ€νŠΈ 검증 둜직 κ΅¬ν˜„

* feat: redisμ—μ„œ refreshToken λΈ”λž™λ¦¬μŠ€νŠΈ 검증

* refactor: controller에 κ°•ν•˜κ²Œ κ²°ν•© λ˜μ–΄ 있던 λ‘œμ§λ“€ 뢄리

* test: member κ΄€λ ¨ ν…ŒμŠ€νŠΈ

* chore: ν•˜λ“œμ½”λ”©ν•œ μ€‘μš” κ°’ Intellij IDEA ν™˜κ²½λ³€μˆ˜λ‘œ μ„€μ •

* refactor: state 관리λ₯Ό μœ„ν•΄ μ„Έμ…˜ μΆ”κ°€

* feat: member 정보 μ‘°νšŒν•˜λŠ” μ„œλΉ„μŠ€ 둜직 κ΅¬ν˜„

* feat: member 정보 μ‘°νšŒν•˜λŠ” μ„œλΉ„μŠ€ 둜직 κ΅¬ν˜„

* format: naver formatter둜 ν¬λ§€νŒ…

* chore: application-dev

* fix: customException 처리

* Feat/meeting interface (#19)

* 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



---------



* Feature/FavoritesAndAlertInterface-16-HwuanPage

* 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

* 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

* 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

* feat: spot service (#34)

* feat: spot service

* feat: spot service 고도화 및 μ‘°νšŒλ„ κ΄€λ ¨ μ„œλΉ„μŠ€ μΆ”κ°€

* feat: μ‘°νšŒλ„ κ΄€λ ¨ μ„œλΉ„μŠ€ μΆ”κ°€

* feat: μ‘°νšŒλ„ κ΄€λ ¨ μ„œλΉ„μŠ€ μΆ”κ°€

* feat: μ‘°νšŒλ„ κ΄€λ ¨ μ„œλΉ„μŠ€ μΆ”κ°€

* hotfix: duplicated controller method

* 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

* Feature/spot preview 40 gunwoong (#41)

* feat: spot preview & λ¦¬νŒ©ν† λ§

* feat: spot preview & λ¦¬νŒ©ν† λ§

* hotfix: jpa metamodel fix

* fix: error fix

* fix: μ†Œμ…œ 둜그인 μž¬μ‹œλ„ μ‹œ λ‹‰λ„€μž„ UNIQUE μ œμ•½ μœ„λ°˜ 였λ₯˜ λ°œμƒ (#42)

* fix: λ‘œκ·Έμ•„μ›ƒ ν›„ 재둜그인 μ‹œ 동일 μ •λ³΄λ‘œ db에 insert ν•˜λ˜ 버그 μˆ˜μ •

* refactor: λ‘œκ·Έμ•„μ›ƒ ν›„ 재둜그인 μ‹œ 동일 μ •λ³΄λ‘œ db에 insert μˆ˜μ • 사항 λ¦¬νŒ©ν† λ§

* test: 변경사항에 λ”°λ₯Έ ν…ŒμŠ€νŠΈ μ½”λ“œ μˆ˜μ •

* hofix: bug fix

* Feature/Alert-22-HwuanPage

* 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: 즐겨찾기 μΆ”κ°€ 및 λ¦¬νŒ©ν† λ§ (#49)

* feat: 즐겨찾기 μΆ”κ°€ 및 λ¦¬νŒ©ν† λ§

* refactor: λ¦¬νŒ©ν† λ§

* feat: 카카였 λ‘œκ·ΈμΈμ„ stateless ν•˜κ²Œ λ³€κ²½ν•œλ‹€ (#51)

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

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

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

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

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

* fix: 주석 제거

* fix: exception λ³€κ²½

* Feat/meeting service (#46)

* 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

κΈ°λŠ₯을 μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

---------



* Feature/integration init (#54)

* 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/activities 17 audwls239 (#56)

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

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

* feature: DTO μΆ”κ°€

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

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

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

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

---------



* feat : ParticipantError μž…λ‹ˆλ‹€.

* hotfix: error fix

* fix : Directory μˆ˜μ •μ‚¬ν•­μž…λ‹ˆλ‹€. (#57)

* hotfix: error fix

* feat: member delete (#58)

* 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

---------




* fix : ParticipantRepository (#59)

existsByMeetingIdAndUserId 둜 μˆ˜μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

* fix : ParticipantRepository (#60)

memberId -> userId둜 μˆ˜μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

* 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

κΈ°λŠ₯을 μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

---------



* 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

κΈ°λŠ₯을 μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

---------



* fix : jellyfish λΆ€λΆ„

* fix: activity λΆ€λΆ„

* fix: member λΆ€λΆ„

* fix: member λΆ€λΆ„

* fix: spot λΆ€λΆ„

* fix: forecast λΆ€λΆ„

* fix: favorite λΆ€λΆ„

* fix: alert λΆ€λΆ„

* fix: meeting λΆ€λΆ„

---------







* hotfix/fix-alert&favorites-62-HwuanPage

* fix(hotfix/Meeting) : rebase둜 μΈν•œ μ½”λ“œ λˆ„λ½ μˆ˜μ • (#65)

* hotfix: μ½”λ“œ λˆ„λ½ ν•΄κ²° (#67)

* Fix/fix 70 gunwoong (#71)

* hotfix: fix

* hotfix: fix

* hotfix: fix

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

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

* test: ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±

* fix: activities μ‹œνλ¦¬ν‹° μ—”λ“œν¬μΈνŠΈ ν—ˆμš©. redirecturi μˆ˜μ •

* Chore/docker set andvariable-68-hwuanPage

* chore/ReadytoDeployv1.0.0-68-HuwanPage

* chore/ReadytoDeploymentv1.0.0-68-HuwanPage

* remove etc

* prod

* refactor: blacklist μ—”ν‹°ν‹°μ˜ jti에 인덱슀λ₯Ό 건닀. (#74)

* Feat/meeting test 75 (#77)

* 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을 μ—΄μ–΄λ’€μŠ΅λ‹ˆλ‹€.

* space prob solve

* stack-trace-DEBUG

* hotfix/data.sql deprecate-HwuanPage (#79)

* hotfix/data.sql deprecate-HwuanPage

* portnum fix

* Xtest

* test X

* workflow fix

* add id

* fix docker-compose-image-root

* release/v1-marineleisure

* fix: blacklist μ—”ν‹°ν‹°μ˜ jti에 인덱슀λ₯Ό 건닀. (#83)

* fix: cors ν”„λ‘ νŠΈμ—”λ“œ 배포 도메인 μΆ”κ°€ (#84)

* fix: blacklist μ—”ν‹°ν‹°μ˜ jti에 인덱슀λ₯Ό 건닀.

* fix: cors ν”„λ‘œνŠΈμ—”λ“œ 도메인 μΆ”κ°€

* hotfix/method_allowed_patch-HwuanPage (#86)

* Refactor/exception hwuan page (#87)

* refacotr/favorite-Exception-update

* fix kakao_redirect_uri

* Feature/map service refactoring 76 gunwoong (#85)

* feat: mapServiceRefactoring

* refactoring: spot detail refactoring

* refactoring: GeoUtils refactoring

* test: repository test disable for prod

* fix: apply flyway to yml

* fix: disable test

* refactor: khoa refactoring

* fix: bug

* fix: sql

* fix: yml ν™˜κ²½λ³€μˆ˜ μΆ”κ°€

* fix: detail field name μˆ˜μ •

* feature: μŠ€μΌ€μ€„λ§ 비동기 κ΅¬ν˜„ (#91)

* refactor: cacheable (#103)

* Fix/meeting urland role (#100)

* fix : MeetingServiceImpl
getStatusMeetings -> getStatusMeeting_role : Guest 인지 host 인지 νŒλ‹¨ν•˜λŠ” λ‘œμ§μ„ μΆ”κ°€

* fix : MeetingRepository

getStatusMeetings -> getStatusMeeting_role : Guest 인지 host 인지 νŒλ‹¨ν•˜λŠ” λ‘œμ§μ„ μΆ”κ°€

* fix : MeetingError

MEETING_MEMBER_NOT_FOUND μ—λŸ¬λ₯Ό μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ―ΈνŒ…μ—μ„œ 맴버λ₯Ό 확인할 수 μ—†λŠ” μ—λŸ¬μž…λ‹ˆλ‹€.

* fix : MeetingController

MeetingController μ—μ„œ role 을 ν™•μΈν•˜μ—¬ μΆ”κ°€ 확인할 수 μžˆλ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

URL κ°œμ„ μ— μ˜ν•œ μƒˆλ‘œμš΄ ν…ŒμŠ€νŠΈ μž…λ‹ˆλ‹€.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

@disabled μΆ”κ°€ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

* feat: νšŒμ› νƒˆν‡΄ μ‹œ 카카였 μ—°κ²° λŠκΈ°λ„ μˆ˜ν–‰ν•˜κ²Œ κ΅¬ν˜„ν•œλ‹€. (#98)

* feat: member μ‚­μ œ μ‹œ kakao μ—°κ²° 끊기 λ‘œμ§λ„ μˆ˜ν–‰ν•˜κ²Œ κ΅¬ν˜„

* test: λ³€κ²½ 사항 test

* feat : Meeting의 μ»€μ„œλ°©μ‹μ—μ„œ 맀핑을 ν•˜μ˜€μŠ΅λ‹ˆλ‹€. (#94)

* feat: 카카였 둜그인 κ³Όμ •μ—μ„œ pkceλ₯Ό 톡해 λ³΄μ•ˆ κ΄€μ μ—μ„œ κ°œμ„  (#106)

* feat: λ³΄μ•ˆ 인증 κ³Όμ •μ—μ„œ PKCE μΆ”κ°€ν•˜μ—¬ κ΅¬ν˜„

* test: λ³€κ²½ 사항 test μΆ”κ°€

* feat: PKCE 기반 λ³΄μ•ˆ κΈ°λŠ₯ μ½”λ“œ ꡬ쑰 λ³€κ²½

* test: PKCE 기반 λ³΄μ•ˆ κΈ°λŠ₯ test

* refactor: PKCE 생성을 ν΄λΌμ΄μ–ΈνŠΈ μ—κ²Œ λ„˜κΈ΄λ‹€.

* test: pkce test ν”Œλ‘œμš° 변경에 따라 λ³€κ²½

* fix: member entity의 nickname 쀑볡을 ν—ˆμš©ν•œλ‹€

* fix: ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ SchedulerService.java 의 @RequiredArgsConstrucor μ§€μš΄ λΆ€λΆ„ 볡ꡬ

* fix: ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ SchedulerService.java 의 @RequiredArgsConstrucor μ§€μš΄ λΆ€λΆ„ 볡ꡬ

* refactor: open-meteo μ„œλΉ„μŠ€ κ΄€λ ¨ λ¦¬νŒ©ν† λ§ (#95)

* refactor: RichDomain으둜 λ³€κ²½ λ‚΄μ—­μž…λ‹ˆλ‹€. (#105)

* Fix: login redirect (#107)

* fix: 둜그인 μš”μ²­λ•Œμ˜ λ¦¬λ‹€μ΄λ ‰νŠΈ uriλ₯Ό 토큰 κ΅ν™˜μ‹œμ—λ„ μ‚¬μš©

* test: test

* fix: fallback μƒν™©μ—μ„œ λ¦¬λ‹€μ΄λ ‰νŠΈ uri μ°ΎλŠ” 둜직 μΆ”κ°€

* Refactor/meeting rich domain (#110)

* refactor: RichDomain으둜 λ³€κ²½ λ‚΄μ—­μž…λ‹ˆλ‹€.

* refactor: λˆ„λ½ ν”„λ‘œμ νŠΈ 파일이 μžˆμ–΄ μ²¨λΆ€ν•©λ‹ˆλ‹€.

* build: caffenine 적용

* relase (#111) (#112)

* git initialize

* feature/swagger-03-gunwoong (#5)

* feat: 곡톡 도메인 κ΅¬ν˜„

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

* feat: swagger μΆ”κ°€

* feat: swagger μΆ”κ°€

* feature/base domain 04 gunwoong (#6)

* feat: 곡톡 도메인 κ΅¬ν˜„

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

* feature/OpenAPI Test/02-HwuanPage

* feature/OpenAPI Test/02-HwuanPage

* Update SurfingForecastApiClient.java

* feature/APICallTest-02-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/EntityInit-13-HwuanPage

* feature/JellyfishEntityInit-13-HwuanPage

* Update FishingType.java

* feature/EntityInitialize-13-HwuanPage

* feat: entity, repositor κ΅¬ν˜„

* feat: μ˜ˆμƒ dto κ΅¬ν˜„

* chore: μ˜μ‘΄μ„± μΆ”κ°€

* feat: 둜그인 κ΅¬ν˜„ & 이후 토큰 λ°œκΈ‰ 둜직 κ΅¬ν˜„

* fix: AuthCotnroller μˆ˜μ •

* fix: ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μΉ΄μΉ΄μ˜€μ—μ„œ μ½”λ“œλ₯Ό λ°›μ•„ μ„œλ²„λ‘œ post ν•˜κ²Œ μˆ˜μ •

* feat: 토큰 검증

* feat: refresh token λΈ”λž™λ¦¬μŠ€νŠΈ 처리 둜직 κ΅¬ν˜„

* feat: refresh 토큰 λΈ”λž™λ¦¬μŠ€νŠΈ 처리 & μž¬λ°œκΈ‰ 둜직 κ΅¬ν˜„

* feat: SecurityFilterChain μ—”λ“œ 포인트 ν—ˆμš©

* feat: refresh 토큰 λΈ”λž™λ¦¬μŠ€νŠΈ 검증 둜직 κ΅¬ν˜„

* feat: redisμ—μ„œ refreshToken λΈ”λž™λ¦¬μŠ€νŠΈ 검증

* refactor: controller에 κ°•ν•˜κ²Œ κ²°ν•© λ˜μ–΄ 있던 λ‘œμ§λ“€ 뢄리

* test: member κ΄€λ ¨ ν…ŒμŠ€νŠΈ

* chore: ν•˜λ“œμ½”λ”©ν•œ μ€‘μš” κ°’ Intellij IDEA ν™˜κ²½λ³€μˆ˜λ‘œ μ„€μ •

* refactor: state 관리λ₯Ό μœ„ν•΄ μ„Έμ…˜ μΆ”κ°€

* feat: member 정보 μ‘°νšŒν•˜λŠ” μ„œλΉ„μŠ€ 둜직 κ΅¬ν˜„

* feat: member 정보 μ‘°νšŒν•˜λŠ” μ„œλΉ„μŠ€ 둜직 κ΅¬ν˜„

* format: naver formatter둜 ν¬λ§€νŒ…

* chore: application-dev

* fix: customException 처리

* Feat/meeting interface (#19)

* 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



---------



* Feature/FavoritesAndAlertInterface-16-HwuanPage

* 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

* 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

* 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

* feat: spot service (#34)

* feat: spot service

* feat: spot service 고도화 및 μ‘°νšŒλ„ κ΄€λ ¨ μ„œλΉ„μŠ€ μΆ”κ°€

* feat: μ‘°νšŒλ„ κ΄€λ ¨ μ„œλΉ„μŠ€ μΆ”κ°€

* feat: μ‘°νšŒλ„ κ΄€λ ¨ μ„œλΉ„μŠ€ μΆ”κ°€

* feat: μ‘°νšŒλ„ κ΄€λ ¨ μ„œλΉ„μŠ€ μΆ”κ°€

* hotfix: duplicated controller method

* 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

* Feature/spot preview 40 gunwoong (#41)

* feat: spot preview & λ¦¬νŒ©ν† λ§

* feat: spot preview & λ¦¬νŒ©ν† λ§

* hotfix: jpa metamodel fix

* fix: error fix

* fix: μ†Œμ…œ 둜그인 μž¬μ‹œλ„ μ‹œ λ‹‰λ„€μž„ UNIQUE μ œμ•½ μœ„λ°˜ 였λ₯˜ λ°œμƒ (#42)

* fix: λ‘œκ·Έμ•„μ›ƒ ν›„ 재둜그인 μ‹œ 동일 μ •λ³΄λ‘œ db에 insert ν•˜λ˜ 버그 μˆ˜μ •

* refactor: λ‘œκ·Έμ•„μ›ƒ ν›„ 재둜그인 μ‹œ 동일 μ •λ³΄λ‘œ db에 insert μˆ˜μ • 사항 λ¦¬νŒ©ν† λ§

* test: 변경사항에 λ”°λ₯Έ ν…ŒμŠ€νŠΈ μ½”λ“œ μˆ˜μ •

* hofix: bug fix

* Feature/Alert-22-HwuanPage

* 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: 즐겨찾기 μΆ”κ°€ 및 λ¦¬νŒ©ν† λ§ (#49)

* feat: 즐겨찾기 μΆ”κ°€ 및 λ¦¬νŒ©ν† λ§

* refactor: λ¦¬νŒ©ν† λ§

* feat: 카카였 λ‘œκ·ΈμΈμ„ stateless ν•˜κ²Œ λ³€κ²½ν•œλ‹€ (#51)

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

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

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

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

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

* fix: 주석 제거

* fix: exception λ³€κ²½

* Feat/meeting service (#46)

* 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

κΈ°λŠ₯을 μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

---------



* Feature/integration init (#54)

* 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/activities 17 audwls239 (#56)

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

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

* feature: DTO μΆ”κ°€

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

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

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

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

---------



* feat : ParticipantError μž…λ‹ˆλ‹€.

* hotfix: error fix

* fix : Directory μˆ˜μ •μ‚¬ν•­μž…λ‹ˆλ‹€. (#57)

* hotfix: error fix

* feat: member delete (#58)

* 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

---------




* fix : ParticipantRepository (#59)

existsByMeetingIdAndUserId 둜 μˆ˜μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

* fix : ParticipantRepository (#60)

memberId -> userId둜 μˆ˜μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

* 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

κΈ°λŠ₯을 μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

---------



* 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

κΈ°λŠ₯을 μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

---------



* fix : jellyfish λΆ€λΆ„

* fix: activity λΆ€λΆ„

* fix: member λΆ€λΆ„

* fix: member λΆ€λΆ„

* fix: spot λΆ€λΆ„

* fix: forecast λΆ€λΆ„

* fix: favorite λΆ€λΆ„

* fix: alert λΆ€λΆ„

* fix: meeting λΆ€λΆ„

---------







* hotfix/fix-alert&favorites-62-HwuanPage

* fix(hotfix/Meeting) : rebase둜 μΈν•œ μ½”λ“œ λˆ„λ½ μˆ˜μ • (#65)

* hotfix: μ½”λ“œ λˆ„λ½ ν•΄κ²° (#67)

* Fix/fix 70 gunwoong (#71)

* hotfix: fix

* hotfix: fix

* hotfix: fix

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

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

* test: ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±

* fix: activities μ‹œνλ¦¬ν‹° μ—”λ“œν¬μΈνŠΈ ν—ˆμš©. redirecturi μˆ˜μ •

* Chore/docker set andvariable-68-hwuanPage

* chore/ReadytoDeployv1.0.0-68-HuwanPage

* chore/ReadytoDeploymentv1.0.0-68-HuwanPage

* remove etc

* prod

* refactor: blacklist μ—”ν‹°ν‹°μ˜ jti에 인덱슀λ₯Ό 건닀. (#74)

* Feat/meeting test 75 (#77)

* 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을 μ—΄μ–΄λ’€μŠ΅λ‹ˆλ‹€.

* space prob solve

* stack-trace-DEBUG

* hotfix/data.sql deprecate-HwuanPage (#79)

* hotfix/data.sql deprecate-HwuanPage

* portnum fix

* Xtest

* test X

* workflow fix

* add id

* fix docker-compose-image-root

* release/v1-marineleisure

* fix: blacklist μ—”ν‹°ν‹°μ˜ jti에 인덱슀λ₯Ό 건닀. (#83)

* fix: cors ν”„λ‘ νŠΈμ—”λ“œ 배포 도메인 μΆ”κ°€ (#84)

* fix: blacklist μ—”ν‹°ν‹°μ˜ jti에 인덱슀λ₯Ό 건닀.

* fix: cors ν”„λ‘œνŠΈμ—”λ“œ 도메인 μΆ”κ°€

* hotfix/method_allowed_patch-HwuanPage (#86)

* Refactor/exception hwuan page (#87)

* refacotr/favorite-Exception-update

* fix kakao_redirect_uri

* Feature/map service refactoring 76 gunwoong (#85)

* feat: mapServiceRefactoring

* refactoring: spot detail refactoring

* refactoring: GeoUtils refactoring

* test: repository test disable for prod

* fix: apply flyway to yml

* fix: disable test

* refactor: khoa refactoring

* fix: bug

* fix: sql

* fix: yml ν™˜κ²½λ³€μˆ˜ μΆ”κ°€

* fix: detail field name μˆ˜μ •

* feature: μŠ€μΌ€μ€„λ§ 비동기 κ΅¬ν˜„ (#91)

* refactor: cacheable (#103)

* Fix/meeting urland role (#100)

* fix : MeetingServiceImpl
getStatusMeetings -> getStatusMeeting_role : Guest 인지 host 인지 νŒλ‹¨ν•˜λŠ” λ‘œμ§μ„ μΆ”κ°€

* fix : MeetingRepository

getStatusMeetings -> getStatusMeeting_role : Guest 인지 host 인지 νŒλ‹¨ν•˜λŠ” λ‘œμ§μ„ μΆ”κ°€

* fix : MeetingError

MEETING_MEMBER_NOT_FOUND μ—λŸ¬λ₯Ό μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ―ΈνŒ…μ—μ„œ 맴버λ₯Ό 확인할 수 μ—†λŠ” μ—λŸ¬μž…λ‹ˆλ‹€.

* fix : MeetingController

MeetingController μ—μ„œ role 을 ν™•μΈν•˜μ—¬ μΆ”κ°€ 확인할 수 μžˆλ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

URL κ°œμ„ μ— μ˜ν•œ μƒˆλ‘œμš΄ ν…ŒμŠ€νŠΈ μž…λ‹ˆλ‹€.

* fix : MeetingServiceImplTest, MeetingControllerTest.java

@disabled μΆ”κ°€ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

* feat: νšŒμ› νƒˆν‡΄ μ‹œ 카카였 μ—°κ²° λŠκΈ°λ„ μˆ˜ν–‰ν•˜κ²Œ κ΅¬ν˜„ν•œλ‹€. (#98)

* feat: member μ‚­μ œ μ‹œ kakao μ—°κ²° 끊기 λ‘œμ§λ„ μˆ˜ν–‰ν•˜κ²Œ κ΅¬ν˜„

* test: λ³€κ²½ 사항 test

* feat : Meeting의 μ»€μ„œλ°©μ‹μ—μ„œ 맀핑을 ν•˜μ˜€μŠ΅λ‹ˆλ‹€. (#94)

* feat: 카카였 둜그인 κ³Όμ •μ—μ„œ pkceλ₯Ό 톡해 λ³΄μ•ˆ κ΄€μ μ—μ„œ κ°œμ„  (#106)

* feat: λ³΄μ•ˆ 인증 κ³Όμ •μ—μ„œ PKCE μΆ”κ°€ν•˜μ—¬ κ΅¬ν˜„

* test: λ³€κ²½ 사항 test μΆ”κ°€

* feat: PKCE 기반 λ³΄μ•ˆ κΈ°λŠ₯ μ½”λ“œ ꡬ쑰 λ³€κ²½

* test: PKCE 기반 λ³΄μ•ˆ κΈ°λŠ₯ test

* refactor: PKCE 생성을 ν΄λΌμ΄μ–ΈνŠΈ μ—κ²Œ λ„˜κΈ΄λ‹€.

* test: pkce test ν”Œλ‘œμš° 변경에 따라 λ³€κ²½

* fix: member entity의 nickname 쀑볡을 ν—ˆμš©ν•œλ‹€

* fix: ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ SchedulerService.java 의 @RequiredArgsConstrucor μ§€μš΄ λΆ€λΆ„ 볡ꡬ

* fix: ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ SchedulerService.java 의 @RequiredArgsConstrucor μ§€μš΄ λΆ€λΆ„ 볡ꡬ

* refactor: open-meteo μ„œλΉ„μŠ€ κ΄€λ ¨ λ¦¬νŒ©ν† λ§ (#95)

* refactor: RichDomain으둜 λ³€κ²½ λ‚΄μ—­μž…λ‹ˆλ‹€. (#105)

* Fix: login redirect (#107)

* fix: 둜그인 μš”μ²­λ•Œμ˜ λ¦¬λ‹€μ΄λ ‰νŠΈ uriλ₯Ό 토큰 κ΅ν™˜μ‹œμ—λ„ μ‚¬μš©

* test: test

* fix: fallback μƒν™©μ—μ„œ λ¦¬λ‹€μ΄λ ‰νŠΈ uri μ°ΎλŠ” 둜직 μΆ”κ°€

* Refactor/meeting rich domain (#110)

* refactor: RichDomain으둜 λ³€κ²½ λ‚΄μ—­μž…λ‹ˆλ‹€.

* refactor: λˆ„λ½ ν”„λ‘œμ νŠΈ 파일이 μžˆμ–΄ μ²¨λΆ€ν•©λ‹ˆλ‹€.

* build: caffenine 적용

---------








* fix: fallback μƒν™©μ—μ„œ λ¦¬λ‹€μ΄λ ‰νŠΈ uri μ°ΎλŠ” 둜직 μΆ”κ°€ (#113)

---------

Co-authored-by: HwuanPage <[email protected]>
Co-authored-by: JaeoneHeo <[email protected]>
Co-authored-by: LEESUNBIN <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: MyungJin <[email protected]>
Co-authored-by: iseonbin <[email protected]>
@gunwoong1630 gunwoong1630 merged commit 14aebb3 into main Jul 28, 2025
2 checks passed
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