-
Notifications
You must be signed in to change notification settings - Fork 1
release #120
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
release #120
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
* 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: μ€ν μμ
* 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]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
μμ λ΄μ©
μ€ν¬λ¦°μ·
μ£Όμμ¬ν
Closes #{μ΄μ λ²νΈ}