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: ์˜คํƒ€ ์ˆ˜์ •
* refactor: RichDomain์œผ๋กœ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ž…๋‹ˆ๋‹ค.

* refactor: ๋ˆ„๋ฝ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์ด ์žˆ์–ด ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.
@gunwoong1630 gunwoong1630 self-assigned this Jul 27, 2025
# 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
@gunwoong1630 gunwoong1630 merged commit 21403d7 into main Jul 27, 2025
2 checks passed
gunwoong1630 added a commit that referenced this pull request Jul 27, 2025
* 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]>
gunwoong1630 added a commit that referenced this pull request Jul 28, 2025
* 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

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

---------

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

* 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

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------

Co-authored-by: Hwang Seong Cheol a.k.a Hwuan Page <[email protected]>

* 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: ํ™œ๋™ ์ƒ์„ธ ์กฐํšŒ

---------

Co-authored-by: Gunwoong cho <[email protected]>

* 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

---------

Co-authored-by: LEESUNBIN <[email protected]>
Co-authored-by: Gunwoong cho <[email protected]>

* 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

๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

---------

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-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 ์ ์šฉ

---------

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]>

* 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 mentioned this pull request Jul 28, 2025
5 tasks
@gunwoong1630 gunwoong1630 mentioned this pull request Jul 28, 2025
5 tasks
@gunwoong1630 gunwoong1630 mentioned this pull request Jul 29, 2025
5 tasks
@gunwoong1630 gunwoong1630 mentioned this pull request Jul 30, 2025
5 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet