-
Notifications
You must be signed in to change notification settings - Fork 0
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
[𧬠merge] develop -> staging #109
Merged
Merged
Conversation
This file contains 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
- nullμ νμ©ν μ μλλ‘ λ³κ²½ - νλΌλ―Έν°λ‘ λ°μ tokenμ λνμ¬ μ ν¨μ± κ²μ¦μ μννλλ‘ λ‘μ§ λ³κ²½
- APPLE μμ
- μ μ ν©ν 리 λ©μλ ν¨ν΄ μΆκ°
- ν΄λΉ Repository λ΄λΆμμ μμΈμ²λ¦¬ μ§ν - MEMBER_NOT_FOUND μμ ν΄λμ€ μΆκ°
- ν΄λΉ Repository λ΄λΆμμ μμΈμ²λ¦¬ μ§ν
- ν΄λΉ Repository λ΄λΆμμ μμΈμ²λ¦¬ μ§ν
- optionIdμ ν΄λΉλ Like κ°―μλ₯Ό ꡬνλ getLikeCountByOptionId ꡬν - appointmentMemberIdμ ν΄λΉλ Like κ°―μλ₯Ό ꡬνλ getLikeCountByAppointmentMemberId ꡬν
- μ’μμλ₯Ό μ μ₯ν λ€, OptionIdμ ν΄λΉνλ μ’μμμ κ°―μλ₯Ό λ°ν
- JwtInterceptorμμ λ°ννλ€ κ°μ
- κ° μΈμλ₯Ό λ©μμ§μ μ λ¬νκΈ° μν΄ μΆκ°
- 0μΌ λ μμ νλ €λ κ²½μ° μμΈμ²λ¦¬ μΆκ°
- μ’μμ μμ μ μ μ²λ¦¬ μ¬λΆ νμΈ - μ’μμ κ°―μκ° 0κ°μΌ λ μμ νλ €λ κ²½μ° μμΈμ²λ¦¬ νμΈ
- μλν¬μΈνΈ ꡬ쑰λ₯Ό `/api/v1` κΈ°λ°μΌλ‘ λ³κ²½ - κΈ°μ‘΄ `@PostMapping` κ²½λ‘λ₯Ό `/groups/{groupId}/appointments`λ‘ λͺ μμ μΌλ‘ λ³κ²½ - `getRecommendedAppointmentOptions` λ©μλ μΆκ°νμ¬ μΆμ² μ΅μ μ‘°ν κΈ°λ₯ ꡬν - TODO: GROUPμΌλ‘ μ΄λν΄μΌ νλ λ‘μ§ μ‘΄μ¬ (μΆν μμ νμ)
- `org.noostak.appointment.application`μμ `org.noostak.appointment.application.create`λ‘ μ΄λ - μλΉμ€ μν μ λͺ νν νκΈ° μν΄ `create` νμ ν¨ν€μ§λ‘ λΆλ¦¬
- `GroupConfirmedAppointmentsService` μΈν°νμ΄μ€ μΆκ° - `getGroupConfirmedAppointments(Long memberId, Long groupId)` λ©μλ μ μ (κ·Έλ£Ή λ΄ νμ λ μ½μ μ‘°ν) - κ·Έλ£Ή νμ λ μ½μ λ°μ΄ν°λ₯Ό μλΉμ€ κ³μΈ΅μμ κ΄λ¦¬νλλ‘ κΈ°λ₯ νμ₯
- `GroupConfirmedAppointmentsServiceImpl` ν΄λμ€ μΆκ° λ° `GroupConfirmedAppointmentsService` ꡬν - `getGroupConfirmedAppointments(Long memberId, Long groupId)` λ©μλ ꡬν (κ·Έλ£Ή λ΄ νμ λ μ½μ μ‘°ν) - κ·Έλ£Ή μ 보 μ‘°ν λ° νλ‘ν μ΄λ―Έμ§ URL λ°ν (`getGroup`, `getGroupProfileImageUrl`) - κ·Έλ£Ήμ μν νμ λ μ½μ λͺ©λ‘ μ‘°ν (`getConfirmedAppointments`) - νμ λ μ½μ μ΅μ μ‘°ν (`getConfirmedAppointmentOptions`) - μ‘°νν λ°μ΄ν°λ₯Ό `GroupConfirmedAppointmentsResponse`λ‘ λ³ννμ¬ λ°ν - `S3Service`λ₯Ό νμ©ν΄ κ·Έλ£Ή νλ‘ν μ΄λ―Έμ§ URL μ‘°ν - κ·Έλ£Ή νμ λ μ½μμ ν¨μ¨μ μΌλ‘ μ‘°ννκ³ μλ΅μ ꡬμ±νλ κΈ°λ₯ ꡬν
- `GroupCreateService` μΈν°νμ΄μ€ μΆκ° - `createGroup(Long memberId, GroupCreateRequest createGroupRequest)` λ©μλ μ μ (κ·Έλ£Ή μμ± κΈ°λ₯ μ 곡) - κ·Έλ£Ή μμ± μμ²μ μ²λ¦¬νκ³ λ΄λΆ μλ΅ κ°μ²΄ λ°ν (`GroupCreateInternalResponse`) - κ·Έλ£Ή μμ± κ΄λ ¨ λ‘μ§μ μλΉμ€ κ³μΈ΅μμ κ΄λ¦¬νλλ‘ μ€κ³
- `GroupCreateService` μΈν°νμ΄μ€ ꡬν (`GroupCreateServiceImpl` ν΄λμ€ μΆκ°) - `createGroup(Long memberId, GroupCreateRequest request)` λ©μλ ꡬν - `findGroupHost(memberId)`: κ·Έλ£Ή νΈμ€νΈ μ‘°ν λ° κ²μ¦ - `uploadGroupProfileImageSafely(request.file())`: νλ‘ν μ΄λ―Έμ§ μ λ‘λ - `createGroup(groupHost, request.groupName(), response.getKey())`: κ·Έλ£Ή κ°μ²΄ μμ± - `saveGroup(group, response.getUrl(), response.getKey())`: κ·Έλ£Ή μ μ₯ λ° μλ΅ λ°ν - μμΈ λ°μ μ μ λ‘λλ νλ‘ν μ΄λ―Έμ§λ₯Ό μμ νκ² μμ νλ λ‘μ§ μΆκ° (`deleteUploadedImageSafely`) - S3λ₯Ό μ΄μ©ν μ΄λ―Έμ§ μ λ‘λ λ° μμ κΈ°λ₯ ν¬ν¨ - κ·Έλ£Ή μμ± κΈ°λ₯μ μμ μ μΌλ‘ μ 곡νκΈ° μν μλΉμ€ ꡬν
- `GroupConfirmedAppointmentsService` μμ‘΄μ± μΆκ° - `getGroupConfirmedAppointments(Long memberId, Long groupId)` λ©μλ ꡬν - `groupConfirmedAppointmentsService.getGroupConfirmedAppointments(memberId, groupId)` νΈμΆνμ¬ κ·Έλ£Ή νμ λ μ½μ μ‘°ν - κ·Έλ£Ή μλΉμ€μμ νμ λ μ½μμ μ‘°νν μ μλλ‘ κΈ°λ₯ νμ₯
- `CONFIRMED_OPTION_NOT_FOUND` μ€λ₯ μ½λ μΆκ° (νμ λ μ½μ μ΅μ μ μ°Ύμ μ μλ κ²½μ°) - `MEMBER_NOT_FOUND` μ€λ₯ μ½λ μ€λ³΅ μ μΈ μμ - κ·Έλ£Ή κ΄λ ¨ μμΈ μ²λ¦¬λ₯Ό λͺ ννκ² κ΅¬λΆνκΈ° μν κΈ°λ₯ μΆκ°
- `GROUP_CONFIRMED_APPOINTMENTS_LOADED` μ±κ³΅ μ½λ μΆκ° (κ·Έλ£Ή νμ λ μ½μ μ‘°ν μ±κ³΅ μλ΅) - `GROUP_ONGOING_APPOINTMENTS_LOADED` μ€λ³΅ μ μΈ μμ - κ·Έλ£Ή κ΄λ ¨ μλ΅ λ©μμ§λ₯Ό λͺ ννκ² κ΅¬λΆνκΈ° μν κΈ°λ₯ μΆκ°
- `AppointmentTimeResponse` λ μ½λ μΆκ° (μ½μμ λ μ§, μμ μκ°, μ’ λ£ μκ°μ μλ΅μΌλ‘ μ λ¬) - `of` ν©ν 리 λ©μλ μΆκ°νμ¬ μΈμ€ν΄μ€ μμ± νΈμμ± μ 곡 - νμ λ μ½μ μ‘°ν μλ΅μ μ¬μ©λ μκ° κ΄λ ¨ μ 보λ₯Ό μ²λ¦¬νλ DTO ꡬν
- `ConfirmedAppointmentsResponse` λ μ½λ μΆκ° (μ½μ ID, μ΄λ¦, μΉ΄ν κ³ λ¦¬, μκ° μ 보λ₯Ό μλ΅μΌλ‘ μ λ¬) - `of` ν©ν 리 λ©μλ μΆκ°νμ¬ μΈμ€ν΄μ€ μμ± νΈμμ± μ 곡 - κ·Έλ£Ή νμ λ μ½μ μ‘°ν μλ΅μ νμν λ°μ΄ν°λ₯Ό μ²λ¦¬νλ DTO ꡬν
- `GroupConfirmedAppointmentsResponse` λ μ½λ μΆκ° (κ·Έλ£Ή μ 보μ νμ λ μ½μ λͺ©λ‘μ μλ΅μΌλ‘ μ λ¬) - `of` ν©ν 리 λ©μλ μΆκ°νμ¬ μΈμ€ν΄μ€ μμ± νΈμμ± μ 곡 - κ·Έλ£Ή νμ λ μ½μ μ‘°ν μλ΅μ νμν λ°μ΄ν°λ₯Ό μ²λ¦¬νλ DTO ꡬν
- `GroupConfirmedInfoResponse` λ μ½λ μΆκ° (κ·Έλ£Ή μ΄λ¦, νλ‘ν μ΄λ―Έμ§ URL, κ·Έλ£Ή λ©€λ² μ μ 보λ₯Ό μλ΅μΌλ‘ μ λ¬) - `of` ν©ν 리 λ©μλ μΆκ°νμ¬ μΈμ€ν΄μ€ μμ± νΈμμ± μ 곡 - κ·Έλ£Ή νμ λ μ½μ μ 보 μ‘°ν μλ΅μ νμν λ°μ΄ν°λ₯Ό μ²λ¦¬νλ DTO ꡬν
- `GroupConfirmedResponseMapper` ν΄λμ€ μΆκ° - κ·Έλ£Ή μ 보 λ° νμ λ μ½μ μλ΅μ λ³ννλ λ©μλ ꡬν - `toGroupConfirmedInfo`: κ·Έλ£Ή μ 보 λ³ν - `toConfirmedAppointmentsResponse`: νμ λ μ½μ λͺ©λ‘ λ³ν - `toConfirmedAppointmentResponse`: κ° νμ λ μ½μ μλ΅ λ³ν - `toAppointmentTimeResponse`: μ½μ μκ° λ³ν - `findConfirmedOption`: νμ λ μ½μ μ΅μ μ‘°ν λ° μμΈ μ²λ¦¬ - κ·Έλ£Ή λ° μ½μ μ 보λ₯Ό DTOλ‘ λ³ννλ μ± μμ λ΄λΉνλ μ νΈ ν΄λμ€ κ΅¬ν
- `getById` λ©μλλ₯Ό `findById`λ‘ λ³κ²½νμ¬ Optionalμ μ²λ¦¬νλλ‘ μμ - `orElseThrow`λ₯Ό μ¬μ©νμ¬ λ©€λ²κ° μ‘΄μ¬νμ§ μλ κ²½μ° μμΈ μ²λ¦¬ - μ€λ³΅λ λ©€λ² μ‘°ν μ½λ μ 리
- `getById` λ©μλ μ κ±°νκ³ , `findById`λ₯Ό μ§μ νΈμΆνμ¬ μμΈ μ²λ¦¬ λ‘μ§ μ²λ¦¬ - μ€λ³΅λ μ½λ μ κ±°λ‘ κ°λ μ± ν₯μ
β¦ μμ λ° μ€λ³΅ μ½λ μ κ±° - `findAllByGroupIdConfirmed` λ©μλ μ€λ³΅ μ κ±° λ° ν΅ν© - `String status`λ₯Ό `AppointmentStatus`λ‘ λ³κ²½νμ¬ νμ μμ μ± ν보 - `appointmentStatus`κ° `CONFIRMED`μΈ μ½μλ§ νν°λ§νλλ‘ μμ - μ½λ κ°λ μ± ν₯μ λ° λΆνμν 쑰건 νν°λ§ μ κ±°
- μ ν¨ν νκΈ μΉ΄ν κ³ λ¦¬ μ λ ₯μ λν΄ μ¬λ°λ₯Έ `AppointmentCategory` λ°ν νμΈ (`shouldReturnCorrectCategoryForValidInput`) - μλͺ»λ μΉ΄ν κ³ λ¦¬ μ λ ₯μ λν΄ μμΈ λ°μ νμΈ (`shouldThrowExceptionForInvalidCategory`) - `null` λλ λΉ λ¬Έμμ΄ μ λ ₯μ λν΄ μμΈ λ°μ νμΈ (`shouldThrowExceptionForNullOrBlankCategory`) - νκΈ μΉ΄ν κ³ λ¦¬ μΈ λ¨μ΄ μ λ ₯ μ μμΈ λ°μ ν μ€νΈ κ°ν - `MethodSource`λ₯Ό νμ©νμ¬ `null` λλ λΉ λ¬Έμμ΄ μ λ ₯μ λν μμΈ μ²λ¦¬ νμΈ
- `findConfirmedOptionByAppointmentId(Long appointmentId)` λ©μλ μΆκ° (νΉμ μ½μμ λν΄ νμ λ μ΅μ μ μ‘°ν) - `existsById(Long id)` λ©μλ ꡬν (μ½μ μ΅μ μ‘΄μ¬ μ¬λΆ 체ν¬) - νμ λ μ½μ μ΅μ μ λ μ§ κΈ°μ€μΌλ‘ μ΅μ νλͺ©μ λ°ννλ κΈ°λ₯ ꡬν
β¦νΈ ꡬν - `GroupConfirmedAppointmentsServiceImplTest` ν΄λμ€ μΆκ° - `μ±κ³΅ μΌμ΄μ€`: νμ λ μ½μ λͺ©λ‘ μ μ μ‘°ν νμΈ (`shouldGetConfirmedAppointmentsSuccessfully`) - `μ€ν¨ μΌμ΄μ€`: μ‘΄μ¬νμ§ μλ κ·Έλ£Ήμμ μ‘°ν μ μμΈ λ°μ λ° νμ λ μ½μμ΄ μμ κ²½μ° λΉ λͺ©λ‘ λ°ν νμΈ - `shouldThrowExceptionWhenGroupNotFound`: κ·Έλ£Ήμ΄ μ‘΄μ¬νμ§ μμΌλ©΄ μμΈ λ°μ - `shouldReturnEmptyListWhenNoConfirmedAppointments`: νμ λ μ½μμ΄ μμ κ²½μ° λΉ λͺ©λ‘ λ°ν - `AppointmentOption` λ° `Appointment` μμ± λ‘μ§μ νμ©νμ¬ ν μ€νΈ μΌμ΄μ€ ꡬν
- `MockitoAnnotations.initMocks(this)`λ‘ Mockito μ΄κΈ°ν λ‘μ§ μμ - `@Mock`μΌλ‘ μ μΈλ μμ‘΄μ±(mock κ°μ²΄)μ λͺ μμ μΌλ‘ μ΄κΈ°ννλλ‘ μμ - ν μ€νΈ μ½λμμ μμ‘΄μ± μ£Όμ λ° Mock κ°μ²΄ μ€μ κ°μ
[β¨feat] νμ λ μ½μλ€ μ‘°ν API ꡬν
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
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.
π Merge PR: develop -> main
π οΈ Key Updates
π Notes for Reviewers