Skip to content
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 551 commits into from
Feb 27, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
551 commits
Select commit Hold shift + click to select a range
9860a55
refactor(RefreshToken) : μœ νš¨μ„± 검사 κ·œμΉ™ λ³€κ²½
0-tae Feb 25, 2025
9ae7ef4
fix(AuthType) : μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” AuthType μ‚­μ œ
0-tae Feb 25, 2025
7195b34
test(AuthInfoServiceImplTest) : ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„± 및 ν…ŒμŠ€νŠΈ
0-tae Feb 25, 2025
3047f94
test(FakeAuthInfoRepository,FakeAuthInfoService) : λͺ¨μ˜ 객체 ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±
0-tae Feb 25, 2025
a527bff
test(AuthTokenResolver) : ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„± 및 ν…ŒμŠ€νŠΈ
0-tae Feb 25, 2025
b0b5aaf
fix(OauthController) : λ‘œκΉ… λ©”μ‹œμ§€ μˆ˜μ •
0-tae Feb 25, 2025
ee15203
fix(temp) : μž„μ‹œνŒŒμΌ μ‚­μ œ
0-tae Feb 25, 2025
2460a33
refactor(Like) : Likes -> Like 클래슀λͺ… λ³€κ²½ 및 LikesCount VO μ‚­μ œ
0-tae Feb 25, 2025
383ea73
feat(MemberRepository) : getById default λ©”μ†Œλ“œ μΆ”κ°€ 및 MemberErrorCode λ©”μ‹œμ§€ μ •μ˜
0-tae Feb 25, 2025
5c13c9c
feat(AppointmentOptionRepository) : getById default λ©”μ†Œλ“œ μΆ”κ°€
0-tae Feb 25, 2025
fc4ab6c
feat(AppointmentRepository) : getById default λ©”μ†Œλ“œ μΆ”κ°€
0-tae Feb 25, 2025
24dfa28
feat(IncreaseResponse) : μ’‹μ•„μš” μ¦κ°€ν•˜κΈ° DTO 클래슀 κ΅¬ν˜„
0-tae Feb 25, 2025
4576d5f
feat(LikeRepository) : LikeRepository μΈν„°νŽ˜μ΄μŠ€ μ •μ˜
0-tae Feb 25, 2025
4d42e16
feat(LikeService) : μ’‹μ•„μš” 증가 μ„œλΉ„μŠ€ 둜직 κ΅¬ν˜„
0-tae Feb 25, 2025
823ef6b
feat(LikeService) : μ’‹μ•„μš” 증가 API κ΅¬ν˜„
0-tae Feb 25, 2025
a820a02
test(LikeServiceImplTest) : ν…ŒμŠ€νŠΈ 및 ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±
0-tae Feb 25, 2025
d9ed09d
refactor(LikesException) : μ˜ˆμ™Έ 및 μ˜ˆμ™Έ λ©”μ‹œμ§€ μ½”λ“œ νŒ¨ν‚€μ§€ 이동
0-tae Feb 25, 2025
e03b41f
feat(LikesSuccessCode) : LikesSuccessCode μ½”λ“œ μ •μ˜
0-tae Feb 25, 2025
cd88ab2
feat(LikeServiceImpl) : μ’‹μ•„μš” κ°―μˆ˜κ°€ MAX_COUNTλ₯Ό λ„˜μ–΄κ°ˆ μ‹œ μ˜ˆμ™Έμ²˜λ¦¬ μΆ”κ°€
0-tae Feb 25, 2025
88f90a2
refactor(BaseException) : BaseException μƒμ„±μž νŒŒλΌλ―Έν„° μΆ”κ°€
0-tae Feb 25, 2025
2486d08
fix(LikeController) : APIκ°€ ResponseEntityλ₯Ό λ°˜ν™˜ν•˜λ„λ‘ μˆ˜μ •
0-tae Feb 25, 2025
e5030a1
test(LikeServiceImplTest) : μ΅œλŒ€ μ’‹μ•„μš” 수 μ΄ˆκ³Όμ— λŒ€ν•œ μ˜ˆμ™Έμ²˜λ¦¬ ν…ŒμŠ€νŠΈ μž‘μ„±
0-tae Feb 25, 2025
ed9b07b
feat(DecreaseResponse) : μ’‹μ•„μš” μ‚­μ œ 응닡 DTO 클래슀 κ΅¬ν˜„
0-tae Feb 25, 2025
9755c07
feat(LikesSuccessCode) : μ’‹μ•„μš” μ‚­μ œ λ©”μ‹œμ§€ μƒμˆ˜ 클래슀 μ •μ˜
0-tae Feb 25, 2025
c074460
feat(LikeRepository) : μ’‹μ•„μš” μ‚­μ œ 쿼리 μž‘μ„± 및 λ©”μ†Œλ“œ μ •μ˜
0-tae Feb 25, 2025
48b5c68
feat(LikeRepository) : μ’‹μ•„μš” μ‚­μ œ 둜직 μž‘μ„±
0-tae Feb 25, 2025
bb26fd6
feat(LikeRepository) : μ’‹μ•„μš” μ‚­μ œ API κ΅¬ν˜„
0-tae Feb 25, 2025
a14900b
test(LikeServiceImplTest) : ν…ŒμŠ€νŠΈ 및 ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±
0-tae Feb 25, 2025
a5bc54f
refactor(AppointmentController) : μ—”λ“œν¬μΈνŠΈ ꡬ쑰 λ³€κ²½ 및 μΆ”μ²œ μ˜΅μ…˜ 쑰회 κΈ°λŠ₯ μΆ”κ°€
jsoonworld Feb 26, 2025
c90e7a9
refactor(AppointmentCreateService) : νŒ¨ν‚€μ§€ ꡬ쑰 λ³€κ²½
jsoonworld Feb 26, 2025
0ea8a58
refactor(AppointmentCreateServiceImpl) : νŒ¨ν‚€μ§€ ꡬ쑰 λ³€κ²½
jsoonworld Feb 26, 2025
9ab220f
refactor(AppointmentService) : μ„œλΉ„μŠ€ μ˜μ‘΄μ„± 정리 및 νŒ¨ν‚€μ§€ ꡬ쑰 반영
jsoonworld Feb 26, 2025
e4dd7a7
refactor(AppointmentHostSelectedTimeQueryService) : μ½”λ“œ ꡬ쑰 κ°œμ„  및 가독성 ν–₯상
jsoonworld Feb 26, 2025
98d4a6a
feat(AppointmentMemberAvailabilityQueryService) : κ΅¬μ„±μ›μ˜ μ˜ˆμ•½ κ°€λŠ₯ μ‹œκ°„ 쑰회 κΈ°λŠ₯ μΆ”κ°€
jsoonworld Feb 26, 2025
658a07e
feat(AppointmentOptionCommandService) : 약속 μ˜΅μ…˜ μ €μž₯ κΈ°λŠ₯ μΆ”κ°€
jsoonworld Feb 26, 2025
ac55a92
feat(AppointmentOptionPriorityService) : 약속 μ˜΅μ…˜ μš°μ„ μˆœμœ„ κ²°μ • μ„œλΉ„μŠ€ μΆ”κ°€
jsoonworld Feb 26, 2025
2ec5743
feat(AppointmentParticipantQueryService) : 약속 μ°Έκ°€μž 쑰회 μ„œλΉ„μŠ€ κ΅¬ν˜„
jsoonworld Feb 26, 2025
1c8be89
feat(AppointmentRecommendationFacade) : 약속 μΆ”μ²œ κΈ°λŠ₯ κ΅¬ν˜„
jsoonworld Feb 26, 2025
c4dfa7a
feat(AppointmentRecommendedOptionService) : 약속 μΆ”μ²œ μ˜΅μ…˜ μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„
jsoonworld Feb 26, 2025
d717c77
feat(AppointmentRecommendedOptionServiceImpl) : 약속 μΆ”μ²œ μ˜΅μ…˜ μ„œλΉ„μŠ€ κ΅¬ν˜„
jsoonworld Feb 26, 2025
ccd4bb1
feat(AppointmentErrorCode) : 약속 κ΄€λ ¨ μ˜ˆμ™Έ μ½”λ“œ κ΅¬ν˜„
jsoonworld Feb 26, 2025
272aa23
feat(AppointmentMyInfoResponse) : 약속 λ‚΄ 정보 응닡 DTO κ΅¬ν˜„
jsoonworld Feb 26, 2025
d6a294b
feat(AppointmentOptionAvailabilityResponse) : 약속 μ˜΅μ…˜ κ°€μš©μ„± 응닡 DTO κ΅¬ν˜„
jsoonworld Feb 26, 2025
b1ad311
feat(AppointmentOptionResponse) : 약속 μ˜΅μ…˜ 응닡 DTO κ΅¬ν˜„
jsoonworld Feb 26, 2025
aac7070
feat(AppointmentOptionTimeResponse) : 약속 μ˜΅μ…˜ μ‹œκ°„ 응닡 DTO κ΅¬ν˜„
jsoonworld Feb 26, 2025
801d416
feat(AppointmentPriorityGroupResponse) : 약속 μš°μ„ μˆœμœ„ κ·Έλ£Ή 응닡 DTO κ΅¬ν˜„
jsoonworld Feb 26, 2025
24eef6c
feat(AppointmentRecommendedOptionsResponse) : 약속 μΆ”μ²œ μ˜΅μ…˜ 응닡 DTO κ΅¬ν˜„
jsoonworld Feb 26, 2025
2f8c9e1
feat(AvailableFriendsResponse) : κ°€μš© 친ꡬ 응닡 DTO κ΅¬ν˜„
jsoonworld Feb 26, 2025
f96f517
feat(UnavailableFriendsResponse) : λ―Έκ°€μš© 친ꡬ 응닡 DTO κ΅¬ν˜„
jsoonworld Feb 26, 2025
c3c5470
feat(AppointmentAvailabilityMatcher) : 약속 κ°€μš©μ„± 맀칭 μœ ν‹Έλ¦¬ν‹° κ΅¬ν˜„
jsoonworld Feb 26, 2025
1fa71d8
feat(AppointmentOptionResponseMapper) : 약속 μ˜΅μ…˜ 응닡 λ³€ν™˜ μœ ν‹Έλ¦¬ν‹° κ΅¬ν˜„
jsoonworld Feb 26, 2025
febe3f8
feat(AppointmentOptionSorter) : 약속 μ˜΅μ…˜ μ •λ ¬ 및 필터링 μœ ν‹Έλ¦¬ν‹° κ΅¬ν˜„
jsoonworld Feb 26, 2025
e7da9e4
feat(AppointmentTimeSplitter) : 약속 μ‹œκ°„ λΆ„ν•  μœ ν‹Έλ¦¬ν‹° κ΅¬ν˜„
jsoonworld Feb 26, 2025
a3293d3
feat(TimeSlot) : μ‹œκ°„ 슬둯 관리 객체 κ΅¬ν˜„
jsoonworld Feb 26, 2025
60d8d94
refactor(AppointmentMemberAvailableTimesRepository) : μ½”λ“œ μŠ€νƒ€μΌ 정리 및 가독성 κ°œμ„ 
jsoonworld Feb 26, 2025
bc631b5
refactor(AppointmentMemberRepository) : μ½”λ“œ μŠ€νƒ€μΌ 정리 및 가독성 κ°œμ„ 
jsoonworld Feb 26, 2025
dc5954f
refactor(Likes -> Like) : μ—”ν‹°ν‹° 넀이밍 λ³€κ²½ 및 생성 λ©”μ„œλ“œ κ΅¬ν˜„
jsoonworld Feb 26, 2025
962ad8e
feat(LikeRepository) : μ’‹μ•„μš” μ—”ν‹°ν‹°μš© JPA 리포지토리 κ΅¬ν˜„
jsoonworld Feb 26, 2025
419d06d
refactor(AppointmentMemberRepositoryTest) : μ½”λ“œ μŠ€νƒ€μΌ 정리 및 가독성 κ°œμ„ 
jsoonworld Feb 26, 2025
2dc80cc
test(AppointmentHostSelectedTimeQueryServiceTest) : 호슀트 선택 μ‹œκ°„ 쑰회 μ„œλΉ„μŠ€ …
jsoonworld Feb 26, 2025
e1c78f8
test(AppointmentMemberAvailabilityQueryServiceTest) : 멀버 κ°€μš© μ‹œκ°„ 쑰회 μ„œλΉ„μŠ€β€¦
jsoonworld Feb 26, 2025
076e5a5
test(AppointmentOptionCommandServiceTest) : 약속 μ˜΅μ…˜ μ €μž₯ μ„œλΉ„μŠ€ ν…ŒμŠ€νŠΈ κ΅¬ν˜„
jsoonworld Feb 26, 2025
5a019e1
test(AppointmentOptionPriorityServiceTest) : 약속 μ˜΅μ…˜ μš°μ„ μˆœμœ„ κ²°μ • μ„œλΉ„μŠ€ ν…ŒμŠ€νŠΈ κ΅¬ν˜„
jsoonworld Feb 26, 2025
351cd7a
test(AppointmentParticipantQueryServiceTest) : 약속 μ°Έκ°€μž 쑰회 μ„œλΉ„μŠ€ ν…ŒμŠ€νŠΈ κ΅¬ν˜„
jsoonworld Feb 26, 2025
9e38d9b
refactor(AppointmentMemberAvailableTimesRepositoryTest) : ν…ŒμŠ€νŠΈ 리포지토리 λ‘œβ€¦
jsoonworld Feb 26, 2025
1c7f323
refactor(AppointmentOptionRepositoryTest) : findAllById 둜직 κ°œμ„  및 μ½”λ“œ 정리
jsoonworld Feb 26, 2025
f946be6
test(LikeRepositoryTest) : μ’‹μ•„μš” 리포지토리 ν…ŒμŠ€νŠΈ κ΅¬ν˜„
jsoonworld Feb 26, 2025
e400500
merge(Oauth) : μ†Œμ…œ 둜그인 κ΄€λ ¨ κΈ°λŠ₯ κ΅¬ν˜„
0-tae Feb 26, 2025
ce861ab
feat(MonthAppointments) : μΊ˜λ¦°λ” 정보 쑰회 응닡 DTO ν•„λ“œ 클래슀 κ΅¬ν˜„
0-tae Feb 26, 2025
f5b1052
feat(CalendarResponse) : μΊ˜λ¦°λ” 정보 쑰회 응닡 DTO 클래슀 κ΅¬ν˜„
0-tae Feb 26, 2025
8bb7ebc
feat(CalendarSuccessCode) : μΊ˜λ¦°λ” 정보 쑰회 성곡 λ©”μ‹œμ§€ μƒμˆ˜ 클래슀 κ΅¬ν˜„
0-tae Feb 26, 2025
3b2999a
feat(AppointmentOptionRepository) : μ˜΅μ…˜ λ‚ μ§œ 필터링 쑰회 쿼리 둜직 μž‘μ„±
0-tae Feb 26, 2025
9bb601f
feat(AppointmentRepository) : 약속 필터링 쑰회 쿼리 둜직 μž‘μ„±
0-tae Feb 26, 2025
01f2ada
refactor(AppointmentOption) : getDayOfMonth 둜직 μž‘μ„±
0-tae Feb 26, 2025
36f967b
feat(CalendarServiceImpl) : μΊ˜λ¦°λ” 정보 쑰회 μ„œλΉ„μŠ€ 둜직 κ΅¬ν˜„
0-tae Feb 26, 2025
b731756
feat(CalendarController) : μΊ˜λ¦°λ” 정보 쑰회 API κ΅¬ν˜„
0-tae Feb 26, 2025
98c9198
refactor(AppointmentHostSelectedTimeQueryService) : μΈν„°νŽ˜μ΄μŠ€ 뢄리 및 κ΅¬ν˜„μ²΄ 생성
jsoonworld Feb 26, 2025
84b6301
refactor(AppointmentMemberAvailabilityQueryService) : μΈν„°νŽ˜μ΄μŠ€ 뢄리 및 κ΅¬ν˜„μ²΄ 생성
jsoonworld Feb 26, 2025
064551d
refactor(AppointmentOptionCommandService) : μΈν„°νŽ˜μ΄μŠ€ 뢄리 및 κ΅¬ν˜„μ²΄ 생성
jsoonworld Feb 26, 2025
049fdcc
refactor(AppointmentOptionPriorityService) : μΈν„°νŽ˜μ΄μŠ€ 뢄리 및 κ΅¬ν˜„μ²΄ 생성
jsoonworld Feb 26, 2025
39338b3
refactor(AppointmentParticipantQueryService) : μΈν„°νŽ˜μ΄μŠ€ 뢄리 및 κ΅¬ν˜„μ²΄ 생성
jsoonworld Feb 26, 2025
24b5937
refactor(AppointmentRecommendationFacade) : 쀑볡 λ³€μˆ˜ 제거 및 μ½”λ“œ 정리
jsoonworld Feb 26, 2025
6640b8f
feat(AppointmentRepository) : μ»€μŠ€ν…€ 리포지토리 μΈν„°νŽ˜μ΄μŠ€ 적용
jsoonworld Feb 26, 2025
d9f1829
feat(AppointmentRepositoryCustom) : κ·Έλ£Ή ID둜 μ˜ˆμ•½ 쑰회 κΈ°λŠ₯ κ΅¬ν˜„μ„ μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€ μΆ”κ°€
jsoonworld Feb 26, 2025
d5c5037
feat(AppointmentRepositoryImpl) : κ·Έλ£Ή ID둜 μ˜ˆμ•½ 쑰회 κΈ°λŠ₯ κ΅¬ν˜„
jsoonworld Feb 26, 2025
1fd4ea7
feat(GroupController) : 진행 쀑인 κ·Έλ£Ή μ˜ˆμ•½ 쑰회 μ—”λ“œν¬μΈνŠΈ κ΅¬ν˜„
jsoonworld Feb 26, 2025
93d8f7f
feat(GroupService) : 진행 쀑인 κ·Έλ£Ή μ˜ˆμ•½ 쑰회 κΈ°λŠ₯ κ΅¬ν˜„
jsoonworld Feb 26, 2025
5d4cfd1
feat(GroupOngoingAppointmentService) : 진행 쀑인 κ·Έλ£Ή μ˜ˆμ•½ 쑰회 κΈ°λŠ₯을 μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€ μ •μ˜
jsoonworld Feb 26, 2025
70b1b4c
feat(GroupOngoingAppointmentServiceImpl) : 진행 쀑인 κ·Έλ£Ή μ˜ˆμ•½ 쑰회 κΈ°λŠ₯ κ΅¬ν˜„
jsoonworld Feb 26, 2025
148c5a9
feat(GroupSuccessCode) : 진행 쀑인 κ·Έλ£Ή μ˜ˆμ•½ 쑰회 성곡 μ½”λ“œ μΆ”κ°€
jsoonworld Feb 26, 2025
2e55536
feat(AppointmentOngoingHostSelectionTimeResponse) : 진행 쀑인 μ•½μ†μ˜ 호슀트 선택 …
jsoonworld Feb 26, 2025
52388de
feat(GroupOngoingAppointmentsResponse) : 진행 쀑인 κ·Έλ£Ή μ˜ˆμ•½ 응닡 DTO κ΅¬ν˜„
jsoonworld Feb 26, 2025
e68d95d
feat(GroupOngoingInfoResponse) : 진행 쀑인 κ·Έλ£Ή 정보 응닡 DTO κ΅¬ν˜„
jsoonworld Feb 26, 2025
a2ea39f
feat(OngoingAppointmentResponse) : 진행 쀑인 약속 응닡 DTO κ΅¬ν˜„
jsoonworld Feb 26, 2025
a6c8e17
test(AppointmentHostSelectedTimeQueryServiceImplTest) : ν…ŒμŠ€νŠΈ 클래슀 λ¦¬νŒ©ν† λ§ …
jsoonworld Feb 26, 2025
5a22853
test(*ServiceTest) : μΈν„°νŽ˜μ΄μŠ€ 기반으둜 μ„œλΉ„μŠ€ κ΅¬ν˜„μ²΄ 적용
jsoonworld Feb 26, 2025
6a569af
test(AppointmentRepositoryTest) : μ»€μŠ€ν…€ 리포지토리 κ΅¬ν˜„ 및 ν…ŒμŠ€νŠΈ λ¦¬νŒ©ν† λ§
jsoonworld Feb 26, 2025
a3f7068
test(GroupOngoingAppointmentServiceImpl) : 진행 쀑인 κ·Έλ£Ή μ˜ˆμ•½ 쑰회 κΈ°λŠ₯ ν…ŒμŠ€νŠΈ κ΅¬ν˜„
jsoonworld Feb 26, 2025
0e68463
merge(develop) : μΆ”μ²œλœ 약속 쑰회 API κ΅¬ν˜„
jsoonworld Feb 26, 2025
b311924
merge(develop) : 진행 쀑인 약속듀 쑰회 API
jsoonworld Feb 26, 2025
246f7f1
Merge branch 'develop' into feat/84
0-tae Feb 26, 2025
cbee312
fix(Like) : merge둜 μΈν•œ 좩돌 ν•΄κ²°
0-tae Feb 26, 2025
aa29d30
merge(Like) : νŠΉμ • μ˜΅μ…˜ μ’‹μ•„μš” μΆ”κ°€
0-tae Feb 26, 2025
c5fc0d6
Merge branch 'develop' into feat/85
0-tae Feb 26, 2025
93654d0
fix(Like) : merge둜 μΈν•œ 좩돌 ν•΄κ²°
0-tae Feb 26, 2025
1810fba
merge(Like) : νŠΉμ • μ˜΅μ…˜ μ’‹μ•„μš” μ‚­μ œ
0-tae Feb 26, 2025
9e046a8
fix(AppointmentRepositoryTest) : 쿼리 둜직 μΆ”κ°€λ‘œ μΈν•œ ν…ŒμŠ€νŠΈ μ½”λ“œ μˆ˜μ •
0-tae Feb 26, 2025
833b660
refactor(CalendarServiceImpl) : μ€„λ°”κΏˆ 및 λ³€μˆ˜ 이름 μˆ˜μ •
0-tae Feb 26, 2025
8c164c1
test(CalendarServiceImplTest) : ν…ŒμŠ€νŠΈ 및 ν…ŒμŠ€νŠΈ μ½”λ“œ μΆ”κ°€
0-tae Feb 26, 2025
dfdba8e
Merge branch 'develop' into feat/88
0-tae Feb 26, 2025
095bc54
fix(AppointmentOptionRepository) : merge 좩돌둜 μΈν•œ μ½”λ“œ μˆ˜μ •
0-tae Feb 26, 2025
07a9fd9
feat(GetProfileResponse) : ν”„λ‘œν•„ 쑰회 응닡 DTO 클래슀 κ΅¬ν˜„
0-tae Feb 26, 2025
3e7fe0d
feat(MemberService) : ν”„λ‘œν•„ 쑰회 μ„œλΉ„μŠ€ 둜직 κ΅¬ν˜„
0-tae Feb 26, 2025
186832e
feat(MemberSuccessCode) : ν”„λ‘œν•„ 쑰회 성곡 λ©”μ‹œμ§€ μ •μ˜
0-tae Feb 26, 2025
dc357a4
feat(MemberSuccessCode) : 컨트둀러 및 ν”„λ‘œν•„ 쑰회 API κ΅¬ν˜„
0-tae Feb 26, 2025
494f026
test(MemberTest) : νŒ¨ν‚€μ§€ 경둜 μ—λŸ¬λ‘œ μΈν•œ ν…ŒμŠ€νŠΈ μ½”λ“œ μˆ˜μ •
0-tae Feb 26, 2025
4fee19f
refactor(MemberException, MemberErrorCode) : νŒ¨ν‚€μ§€ 경둜 μˆ˜μ •μœΌλ‘œ μΈν•œ λ¦¬νŒ©ν† λ§
0-tae Feb 26, 2025
7a5f477
test(MemberServiceImplTest) : ν…ŒμŠ€νŠΈ 및 ν…ŒμŠ€νŠΈ μ½”λ“œ μΆ”κ°€
0-tae Feb 26, 2025
a7160d1
fix(GetProfileResponse) : λ³€μˆ˜λͺ… μΉ΄λ©œμΌ€μ΄μŠ€ 적용
0-tae Feb 26, 2025
baa4235
feat(S3Service) : S3Delete에 λŒ€ν•œ μ˜ˆμ™Έμ²˜λ¦¬ μ½”λ“œ μΆ”κ°€
0-tae Feb 26, 2025
6f9446c
feat(Member) : key, name에 λŒ€ν•œ Member의 setterμΆ”κ°€
0-tae Feb 26, 2025
9d55a8e
feat(MemberSuccessCode) : 멀버 ν”„λ‘œν•„ μ—…λ°μ΄νŠΈ 성곡 λ©”μ‹œμ§€ μ •μ˜
0-tae Feb 26, 2025
f1e3043
feat(MemberService) : 멀버 ν”„λ‘œν•„ μ—…λ°μ΄νŠΈ μ„œλΉ„μŠ€ 둜직 κ΅¬ν˜„
0-tae Feb 26, 2025
4622b0c
feat(UpdateProfileRequest) : 멀버 ν”„λ‘œν•„ μ—…λ°μ΄νŠΈ μš”μ²­ DTO 클래슀 κ΅¬ν˜„
0-tae Feb 26, 2025
7337c9f
feat(MemberController) : 멀버 ν”„λ‘œν•„ μ—…λ°μ΄νŠΈ api κ΅¬ν˜„
0-tae Feb 26, 2025
87fd8ce
test(MemberServiceImplTest) : ν…ŒμŠ€νŠΈ 및 ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±
0-tae Feb 26, 2025
1891320
feat(MemberSuccessCode) : 멀버 μ‚­μ œ 성곡 응닡 λ©”μ‹œμ§€ μ •μ˜
0-tae Feb 26, 2025
ab5a266
feat(MemberService) : νšŒμ›νƒˆν‡΄ μ„œλΉ„μŠ€ 둜직 κ΅¬ν˜„
0-tae Feb 26, 2025
c2073b5
feat(MemberController) : νšŒμ›νƒˆν‡΄ API κ΅¬ν˜„
0-tae Feb 26, 2025
267020f
feat(MemberServiceImplTest) : ν…ŒμŠ€νŠΈ 및 ν…ŒμŠ€νŠΈ μ½”λ“œ μΆ”κ°€
0-tae Feb 26, 2025
d8780ba
fix(MemberController) : API 경둜 μˆ˜μ •
0-tae Feb 26, 2025
7242201
feat(RestClient) : getRequest 헀더와 본문을 μ μš©ν•˜λŠ” λ©”μ†Œλ“œ μΆ”κ°€
0-tae Feb 27, 2025
b47668f
feat(KaKaoApi) : 카카였 API μΆ”κ°€
0-tae Feb 27, 2025
8a90b60
feat(KakaoLogoutRequest) : 카카였 λ‘œκ·Έμ•„μ›ƒ μš”μ²­ DTO 클래슀 κ΅¬ν˜„
0-tae Feb 27, 2025
427e292
feat(AuthSuccessCode) : νšŒμ›νƒˆν‡΄, λ‘œκ·Έμ•„μ›ƒ 성곡 응닡 λ©”μ‹œμ§€ μ •μ˜
0-tae Feb 27, 2025
fb42245
refactor(MemberController) : νšŒμ›νƒˆν‡΄ API 경둜 μˆ˜μ •
0-tae Feb 27, 2025
6a04274
refactor(KakaoUnlinkResponse) : νšŒμ›νƒˆν‡΄ API 응닡 DTO 클래슀 κ΅¬ν˜„
0-tae Feb 27, 2025
02d0fd4
feat(KakaoServiceImpl) : 카카였 νšŒμ›νƒˆν‡΄ μ„œλΉ„μŠ€ 둜직 κ΅¬ν˜„
0-tae Feb 27, 2025
1cbf3c2
merge(Calendar) : μΊ˜λ¦°λ” - 약속 정보 κ°€μ Έμ˜€κΈ° κ΅¬ν˜„
0-tae Feb 27, 2025
3f1c0d3
merge(Member) : λ§ˆμ΄νŽ˜μ΄μ§€ - λ‚΄ 정보 보기 κ΅¬ν˜„
0-tae Feb 27, 2025
a860428
merge(Member) : λ§ˆμ΄νŽ˜μ΄μ§€ - λ‚΄ 정보 μˆ˜μ • κ΅¬ν˜„
0-tae Feb 27, 2025
876842f
feat(OauthController) : 카카였 νšŒμ›νƒˆν‡΄ API κ΅¬ν˜„
0-tae Feb 27, 2025
22e7333
feat(AuthInfo) : CascadeType.REMOVE μ˜΅μ…˜ μΆ”κ°€
0-tae Feb 27, 2025
9da02d7
feat(KakaoTokenRequestFactory) : logoutRedirectUri ν•„λ“œ μΆ”κ°€
0-tae Feb 27, 2025
7042930
feat(GoogleUnlinkResponse) : Google 연동 ν•΄μ œ 응닡 DTO 클래슀 κ΅¬ν˜„
0-tae Feb 27, 2025
05f83b2
feat(GoogleServiceImpl) : Google νšŒμ› νƒˆν‡΄ μ„œλΉ„μŠ€ 둜직 κ΅¬ν˜„
0-tae Feb 27, 2025
03595a6
feat(GoogleApi) : GoogleApi URL μƒμˆ˜ 클래슀 μ •μ˜
0-tae Feb 27, 2025
bc6101a
fix(GoogleApi) : GoogleApi URL μƒμˆ˜ 클래슀 μ‚­μ œ
0-tae Feb 27, 2025
0a36f34
feat(GoogleApi) : Google λ‘œκ·Έμ•„μ›ƒ 둜직 κ΅¬ν˜„
0-tae Feb 27, 2025
da9eabe
feat(RestClient) : url-encoding μ§€μ›ν•˜λŠ” getRequest μΆ”κ°€
0-tae Feb 27, 2025
904830b
feat(KakaoLogoutResponse) : Kakao λ‘œκ·Έμ•„μ›ƒ 응닡 DTO 클래슀 κ΅¬ν˜„
0-tae Feb 27, 2025
85f11df
feat(KakaoServiceImpl) : Kakao λ‘œκ·Έμ•„μ›ƒ μ„œλΉ„μŠ€ 둜직 κ΅¬ν˜„
0-tae Feb 27, 2025
bcc5c15
feat(KakaoServiceImpl) : λ‘œκ·Έμ•„μ›ƒ API κ΅¬ν˜„
0-tae Feb 27, 2025
55f2649
refactor(Appointment) : νŒ¨ν‚€μ§€ ꡬ쑰 정리 및 응닡 DTO νŒ¨ν‚€μ§€ λ³€κ²½
jsoonworld Feb 27, 2025
efa276e
refactor(AppointmentRepository) : κΈ°λ³Έ λ©”μ„œλ“œ 제거 및 μ˜ˆμ™Έ 처리 방식 κ°œμ„ 
jsoonworld Feb 27, 2025
faac3b4
refactor(AppointmentMyInfoResponse) : DTO νŒ¨ν‚€μ§€ 이동
jsoonworld Feb 27, 2025
1496440
refactor(AppointmentOptionAvailabilityResponse) : DTO νŒ¨ν‚€μ§€ 이동
jsoonworld Feb 27, 2025
82b0b12
refactor(AppointmentOptionResponse) : DTO νŒ¨ν‚€μ§€ 이동
jsoonworld Feb 27, 2025
963d297
refactor(AppointmentOptionTimeResponse) : DTO νŒ¨ν‚€μ§€ 이동
jsoonworld Feb 27, 2025
81dba32
refactor(AppointmentPriorityGroupResponse) : DTO νŒ¨ν‚€μ§€ 이동
jsoonworld Feb 27, 2025
555823f
refactor(AppointmentRecommendedOptionsResponse) : DTO νŒ¨ν‚€μ§€ 이동
jsoonworld Feb 27, 2025
de3a7f8
refactor(AvailableFriendsResponse) : DTO νŒ¨ν‚€μ§€ 이동
jsoonworld Feb 27, 2025
2d3e253
refactor(UnavailableFriendsResponse) : DTO νŒ¨ν‚€μ§€ 이동
jsoonworld Feb 27, 2025
42628d2
refactor(util) : DTO νŒ¨ν‚€μ§€ λ³€κ²½ 반영
jsoonworld Feb 27, 2025
4803c25
refactor(AppointmentMemberRepository) : μ €μž₯μ†Œ μΈν„°νŽ˜μ΄μŠ€ 정리
jsoonworld Feb 27, 2025
48e5394
refactor(AppointmentMemberRepositoryCustom) : λ©”μ„œλ“œ 정리 및 가독성 κ°œμ„ 
jsoonworld Feb 27, 2025
f2f3c57
feat(AppointmentMemberRepositoryImpl) : findByAppointmentId λ©”μ„œλ“œ κ΅¬ν˜„
jsoonworld Feb 27, 2025
f076d80
feat(AppointmentOptionController) : ν™•μ •λœ 약속 μ˜΅μ…˜ 쑰회 API κ΅¬ν˜„
jsoonworld Feb 27, 2025
33879b3
feat(AppointmentOptionConfirmedOptionService) : ν™•μ •λœ 약속 μ˜΅μ…˜ 쑰회 μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄β€¦
jsoonworld Feb 27, 2025
a779d02
feat(AppointmentOptionConfirmedOptionServiceImpl) : ν™•μ •λœ 약속 μ˜΅μ…˜ 쑰회 μ„œλΉ„μŠ€ κ΅¬ν˜„
jsoonworld Feb 27, 2025
ee0349c
feat(AppointmentOptionService) : ν™•μ •λœ 약속 μ˜΅μ…˜ 쑰회 κΈ°λŠ₯ κ΅¬ν˜„
jsoonworld Feb 27, 2025
cfaef67
feat(AppointmentOptionErrorCode) : ν™•μ •λ˜μ§€ μ•Šμ€ 약속 μ˜΅μ…˜ μ˜ˆμ™Έ μ½”λ“œ κ΅¬ν˜„
jsoonworld Feb 27, 2025
680dc10
refactor(AppointmentOptionRepository) : κΈ°λ³Έ λ©”μ„œλ“œ 제거 및 μ˜ˆμ™Έ 처리 뢄리
jsoonworld Feb 27, 2025
81919ea
feat(AppointmentConfirmedOptionAvailableFriendsResponse) : ν™•μ •λœ 약속 μ˜΅μ…˜μ˜β€¦
jsoonworld Feb 27, 2025
2b9cf9e
feat(AppointmentConfirmedOptionMyInfoResponse) : ν™•μ •λœ 약속 μ˜΅μ…˜μ˜ λ‚΄ 정보 DTO κ΅¬ν˜„
jsoonworld Feb 27, 2025
4dadb76
feat(AppointmentConfirmedOptionResponse) : ν™•μ •λœ 약속 μ˜΅μ…˜ 응닡 DTO κ΅¬ν˜„
jsoonworld Feb 27, 2025
a2e88da
feat(AppointmentConfirmedOptionTimeResponse) : ν™•μ •λœ 약속 μ˜΅μ…˜μ˜ μ‹œκ°„ 정보 DTO κ΅¬ν˜„
jsoonworld Feb 27, 2025
30bf55a
feat(AppointmentConfirmedOptionUnavailableFriendsResponse) : ν™•μ •λœ 약속 μ˜΅β€¦
jsoonworld Feb 27, 2025
6baa35d
feat(AppointmentOptionConfirmedOptionConverter) : ν™•μ •λœ 약속 μ˜΅μ…˜ 응닡 λ³€ν™˜κΈ° κ΅¬ν˜„
jsoonworld Feb 27, 2025
146e179
refactor(AwsConfig, DevS3ServiceImpl) : μ½”λ“œ 정리 및 νŒ¨ν‚€μ§€ 경둜 μˆ˜μ •
jsoonworld Feb 27, 2025
523eeda
feat(S3DeleteErrorCode) : S3 이미지 μ‚­μ œ 였λ₯˜ μ½”λ“œ κ΅¬ν˜„
jsoonworld Feb 27, 2025
f08e59a
feat(S3DeleteException) : S3 이미지 μ‚­μ œ μ˜ˆμ™Έ 클래슀 κ΅¬ν˜„
jsoonworld Feb 27, 2025
00c1e68
feat(S3ServiceImpl) : S3 이미지 μ‚­μ œ μ˜ˆμ™Έ 처리 κ΅¬ν˜„
jsoonworld Feb 27, 2025
b4b526f
refactor(S3StorageImpl) : μ½”λ“œ 정리 및 λΆˆν•„μš”ν•œ 곡백 제거
jsoonworld Feb 27, 2025
119c5c5
fix(LikeServiceImpl) : 약속 μ˜΅μ…˜ 쑰회 방식 μˆ˜μ •
jsoonworld Feb 27, 2025
1f80d5e
feat(LikesErrorCode) : μ˜΅μ…˜ 쑰회 μ‹€νŒ¨ μ˜ˆμ™Έ μ½”λ“œ κ΅¬ν˜„
jsoonworld Feb 27, 2025
d85e102
refactor(LikeRepository) : 쿼리 λ©”μ„œλ“œ 정리 및 μ»€μŠ€ν…€ 리포지토리 적용
jsoonworld Feb 27, 2025
162a389
feat(LikeRepositoryCustom) : μ’‹μ•„μš” κ΄€λ ¨ μ»€μŠ€ν…€ 리포지토리 μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„
jsoonworld Feb 27, 2025
21ebb03
feat(LikeRepositoryImpl) : μ’‹μ•„μš” κ΄€λ ¨ μ»€μŠ€ν…€ 리포지토리 κ΅¬ν˜„
jsoonworld Feb 27, 2025
c6f198f
refactor(Test Code) : λΆˆν•„μš”ν•œ 쀑볡 μ½”λ“œ 제거 및 νŒ¨ν‚€μ§€ 경둜 μˆ˜μ •
jsoonworld Feb 27, 2025
d45951c
refactor(Test Code) : DTO νŒ¨ν‚€μ§€ 경둜 μˆ˜μ • 및 쀑볡 μ½”λ“œ 정리
jsoonworld Feb 27, 2025
f826724
merge(Member) : λ§ˆμ΄νŽ˜μ΄μ§€ - νšŒμ› νƒˆν‡΄
0-tae Feb 27, 2025
57ca11d
refactor(AppointmentMemberRepositoryTest) : λ©”μ„œλ“œ κ΅¬ν˜„ 정리 및 λ°˜ν™˜ κ°’ μˆ˜μ •
jsoonworld Feb 27, 2025
1ff65fe
test(AppointmentOptionConfirmedOptionServiceImplTest) : ν™•μ •λœ 약속 μ˜΅μ…˜ 쑰회 …
jsoonworld Feb 27, 2025
33a3a73
refactor(AppointmentOptionRepositoryTest) : μ½”λ“œ 정리 및 λΆˆν•„μš”ν•œ λ©”μ„œλ“œ 정리
jsoonworld Feb 27, 2025
75029c9
merge(Member, Oauth) : λ‘œκ·Έμ•„μ›ƒ 및 νšŒμ› νƒˆν‡΄ 둜직 μˆ˜μ •
0-tae Feb 27, 2025
55f1c9d
refactor(LikeRepositoryTest) : λ©”μ„œλ“œ 정리 및 쀑볡 μ½”λ“œ κ°œμ„ 
jsoonworld Feb 27, 2025
ef01352
Merge branch 'develop' into feat/93
jsoonworld Feb 27, 2025
fbb195f
fix(AppointmentRepository) : 좩돌둜 μΈν•œ λ©”μ„œλ“œ μΆ”κ°€, merge이후 μ‚­μ œν•  μ˜ˆμ •
jsoonworld Feb 27, 2025
5c04043
fix(AppointmentOptionRepository) : μΆ©λŒλ‚˜λŠ” query μž‘μ„±, μΆ”ν›„ μ‚­μ œ μ˜ˆμ •
jsoonworld Feb 27, 2025
aa50fca
merge(develop) : ν™•μ •λœ 약속 쑰회 API κ΅¬ν˜„
jsoonworld Feb 27, 2025
4068d89
refactor(CalendarServiceImpl) : 뢈λͺ…ν™•ν•œ λ©”μ„œλ“œ 호좜 방식 μˆ˜μ •
jsoonworld Feb 27, 2025
7b8889d
feat(AppointmentRepositoryCustom) : 그룹별 ν™•μ •λœ μ˜ˆμ•½ 쑰회 κΈ°λŠ₯ μΆ”κ°€
jsoonworld Feb 27, 2025
1b6801e
feat(AppointmentRepositoryImpl) : 그룹별 ν™•μ •λœ μ˜ˆμ•½ 쑰회 κΈ°λŠ₯ κ΅¬ν˜„
jsoonworld Feb 27, 2025
8d82ad9
refactor(AppointmentOptionRepository) : λ„€μ΄ν‹°λΈŒ 쿼리 λ¦¬νŒ©ν† λ§ 및 μΈν„°νŽ˜μ΄μŠ€ 뢄리
jsoonworld Feb 27, 2025
02d54ca
feat(AppointmentOptionRepositoryCustom) : μ»€μŠ€ν…€ 리포지토리 μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„
jsoonworld Feb 27, 2025
97c8017
feat(AppointmentOptionRepositoryImpl) : QueryDSL 기반 μ»€μŠ€ν…€ 리포지토리 κ΅¬ν˜„
jsoonworld Feb 27, 2025
636cb04
fix(GoogleTokenRequestFactory) : @Value μ• λ„ˆν…Œμ΄μ…˜ μœ„μΉ˜ μˆ˜μ • 및 ν•„λ“œ μ΄ˆκΈ°ν™” 방식 λ³€κ²½
jsoonworld Feb 27, 2025
1d05a66
fix(GoogleTokenRequestFactory) : @Value μ• λ„ˆν…Œμ΄μ…˜ 쀑볡 적용 문제 μˆ˜μ •
jsoonworld Feb 27, 2025
c0c3fed
refactor(AppointmentOptionRepositoryTest) : μ €μž₯ 및 쑰회 둜직 κ°œμ„ 
jsoonworld Feb 27, 2025
119a095
refactor(AppointmentRepositoryTest) : 데이터 쑰회 및 μ •λ ¬ 둜직 κ°œμ„ 
jsoonworld Feb 27, 2025
f837f6a
fix(CalendarServiceImplTest) : 좔후에 λͺ¨ν‚Ή 없이 κ΅¬ν˜„
jsoonworld Feb 27, 2025
5462b78
refactor(CalendarServiceImpl) : λ©”μ„œλ“œ λͺ…λͺ… κ·œμΉ™ 톡일
jsoonworld Feb 27, 2025
d0ef64a
feat(AppointmentErrorCode) : 약속 μ˜΅μ…˜ κ΄€λ ¨ 였λ₯˜ μ½”λ“œ κ΅¬ν˜„
jsoonworld Feb 27, 2025
abc38f7
feat(AppointmentSuccessCode) : ν™•μ •λœ 약속 쑰회 성곡 μ½”λ“œ κ΅¬ν˜„
jsoonworld Feb 27, 2025
56d347b
refactor(AppointmentRepository) : λ©”μ„œλ“œ λͺ…λͺ… κ·œμΉ™ 톡일 및 μ½”λ“œ κ°œμ„ 
jsoonworld Feb 27, 2025
1180739
feat(AppointmentRepositoryCustom) : 그룹별 ν™•μ •λœ 약속 쑰회 λ©”μ„œλ“œ μΆ”κ°€
jsoonworld Feb 27, 2025
bd94034
feat(AppointmentRepositoryImpl) : 그룹별 ν™•μ •λœ 약속 쑰회 λ©”μ„œλ“œ κ΅¬ν˜„
jsoonworld Feb 27, 2025
ac8f1dd
refactor(AppointmentCategory) : μΉ΄ν…Œκ³ λ¦¬ 쑰회 둜직 뢄리 및 가독성 κ°œμ„ 
jsoonworld Feb 27, 2025
67ee7eb
refactor(AppointmentOptionController) : λΆˆν•„μš”ν•œ ν™•μ •λœ 약속 쑰회 μ—”λ“œν¬μΈνŠΈ 제거
jsoonworld Feb 27, 2025
703e344
refactor(AppointmentOption) : λΆˆν•„μš”ν•œ `@Getter` μ• λ…Έν…Œμ΄μ…˜ 제거
jsoonworld Feb 27, 2025
bb7214b
feat(AppointmentOptionRepositoryCustom) : ν™•μ •λœ 약속 μ˜΅μ…˜ 쑰회 λ©”μ„œλ“œ μΆ”κ°€
jsoonworld Feb 27, 2025
fc08b66
feat(AppointmentOptionRepositoryImpl) : ν™•μ •λœ 약속 μ˜΅μ…˜ 쑰회 λ©”μ„œλ“œ κ΅¬ν˜„
jsoonworld Feb 27, 2025
0bc9ba2
feat(GroupController) : 그룹별 ν™•μ •λœ 약속 쑰회 API κ΅¬ν˜„
jsoonworld Feb 27, 2025
e657aa0
refactor(GroupCreateService) : νŒ¨ν‚€μ§€ 이동
jsoonworld Feb 27, 2025
2a54384
refactor(service) : νŒ¨ν‚€μ§€ 이동
jsoonworld Feb 27, 2025
e81ae52
feat(GroupConfirmedAppointmentsService) : κ·Έλ£Ή ν™•μ •λœ 약속 쑰회 μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„
jsoonworld Feb 27, 2025
09f71c6
feat(GroupConfirmedAppointmentsServiceImpl) : κ·Έλ£Ή ν™•μ •λœ 약속 쑰회 μ„œλΉ„μŠ€ κ΅¬ν˜„
jsoonworld Feb 27, 2025
8ac1944
feat(GroupCreateService) : κ·Έλ£Ή 생성 μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄μŠ€ μΆ”κ°€
jsoonworld Feb 27, 2025
5b97830
feat(GroupCreateServiceImpl) : νŒ¨ν‚€μ§€ 이동
jsoonworld Feb 27, 2025
98a6b04
refactor(info) : νŒ¨ν‚€μ§€ 이동
jsoonworld Feb 27, 2025
0251189
refactor(retrieve) : νŒ¨ν‚€μ§€ 이동
jsoonworld Feb 27, 2025
d2744dc
feat(GroupService) : κ·Έλ£Ή ν™•μ •λœ 약속 쑰회 κΈ°λŠ₯ μΆ”κ°€
jsoonworld Feb 27, 2025
40695a7
feat(GroupErrorCode) : ν™•μ •λœ 약속 μ˜΅μ…˜ 쑰회 μ‹€νŒ¨ 였λ₯˜ μ½”λ“œ μΆ”κ°€
jsoonworld Feb 27, 2025
97e1c15
feat(GroupSuccessCode) : κ·Έλ£Ή ν™•μ •λœ 약속 쑰회 성곡 μ½”λ“œ μΆ”κ°€
jsoonworld Feb 27, 2025
2c39fda
feat(GroupConfirmedAppointmentsResponse) : 약속 μ‹œκ°„ 응닡 DTO μΆ”κ°€
jsoonworld Feb 27, 2025
e138f96
feat(GroupConfirmedAppointmentsResponse) : ν™•μ •λœ 약속 응닡 DTO μΆ”κ°€
jsoonworld Feb 27, 2025
c704b48
feat(GroupConfirmedAppointmentsResponse) : κ·Έλ£Ή ν™•μ •λœ 약속 응닡 DTO μΆ”κ°€
jsoonworld Feb 27, 2025
3883db1
feat(GroupConfirmedAppointmentsResponse) : κ·Έλ£Ή ν™•μ •λœ 약속 정보 응닡 DTO μΆ”κ°€
jsoonworld Feb 27, 2025
a6c7465
feat(GroupConfirmedResponseMapper) : κ·Έλ£Ή ν™•μ •λœ 약속 응닡 λ³€ν™˜ 둜직 κ΅¬ν˜„
jsoonworld Feb 27, 2025
4b4d69b
fix(MemberServiceImpl) : μ€‘λ³΅λœ 멀버 쑰회 μ½”λ“œ μˆ˜μ •
jsoonworld Feb 27, 2025
56e9b2b
refactor(MemberRepository) : `getById` λ©”μ„œλ“œ 제거 및 `findById`둜 톡일
jsoonworld Feb 27, 2025
262a68d
refactor(AppointmentRepositoryTest) : `findAllByGroupIdConfirmed` λ©”μ„œλ“œβ€¦
jsoonworld Feb 27, 2025
54065b6
test(AppointmentCategoryTest) : AppointmentCategory 클래슀 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μΆ”κ°€
jsoonworld Feb 27, 2025
0e5c1ed
feat(AppointmentOptionRepositoryTest) : ν™•μ •λœ 약속 μ˜΅μ…˜ 쑰회 κΈ°λŠ₯ μΆ”κ°€
jsoonworld Feb 27, 2025
527504d
test(GroupConfirmedAppointmentsServiceImplTest) : κ·Έλ£Ή ν™•μ •λœ 약속 쑰회 μ„œλΉ„μŠ€ ν…ŒμŠ€β€¦
jsoonworld Feb 27, 2025
e5d44c5
fix(GroupServiceTest) : Mockito μ΄ˆκΈ°ν™” 및 μ˜μ‘΄μ„± μ£Όμž… μˆ˜μ •
jsoonworld Feb 27, 2025
c7e1632
test(MemberServiceImplTest) : λͺ¨ν‚Ή μ œκ±°ν•˜κ³  좔후에 κ°œμ„ 
jsoonworld Feb 27, 2025
c3cf5a1
refactor(MemberName) : μ΅œλŒ€ 이름 갯수 15μ—μ„œ 10으둜 μ‘°μ •
jsoonworld Feb 27, 2025
3ee91cc
merge(develop) : ν™•μ •λœ 약속듀 쑰회 API κ΅¬ν˜„
jsoonworld Feb 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 7 additions & 0 deletions .github/workflows/DOCKER-CD-PROD.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,13 @@ jobs:
echo "${{ secrets.AWS_CONFIG_YML }}" > ./aws-config.yml
working-directory: ${{ env.working-directory }}

- name: oauth-config.yml 생성
run: |
cd ./src/main/resources
touch ./oauth-config.yml
echo "${{ secrets.PROD_OAUTH_CONFIG_YML }}" > ./oauth-config.yml
working-directory: ${{ env.working-directory }}

- name: λΉŒλ“œ
run: |
chmod +x gradlew
Expand Down
7 changes: 7 additions & 0 deletions .github/workflows/DOCKER-CD-STAGING.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,13 @@ jobs:
echo "${{ secrets.AWS_CONFIG_YML }}" > ./aws-config.yml
working-directory: ${{ env.working-directory }}

- name: oauth-config.yml 생성
run: |
cd ./src/main/resources
touch ./oauth-config.yml
echo "${{ secrets.STAGING_OAUTH_CONFIG_YML }}" > ./oauth-config.yml
working-directory: ${{ env.working-directory }}

- name: λΉŒλ“œ
run: |
chmod +x gradlew
Expand Down
16 changes: 16 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,14 @@ repositories {
mavenCentral()
}

ext {
set('queryDslVersion', "5.0.0")
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.testng:testng:7.1.0'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'org.postgresql:postgresql'
annotationProcessor 'org.projectlombok:lombok'
Expand All @@ -38,6 +43,17 @@ dependencies {

// Actuator
implementation 'org.springframework.boot:spring-boot-starter-actuator'

// JWT
implementation 'io.jsonwebtoken:jjwt-api:0.12.6'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.6'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.6'

// QueryDSL
implementation "com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta"
annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}

tasks.named('test') {
Expand Down
2 changes: 0 additions & 2 deletions src/main/java/org/noostak/NoostakApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,11 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;

@SpringBootApplication
public class NoostakApplication {

public static void main(String[] args) {
SpringApplication.run(NoostakApplication.class, args);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package org.noostak.appointment.api;

import lombok.RequiredArgsConstructor;
import org.noostak.appointment.application.AppointmentService;
import org.noostak.appointment.dto.request.AppointmentCreateRequest;
import org.noostak.appointment.dto.response.recommendation.AppointmentRecommendedOptionsResponse;
import org.noostak.global.success.SuccessResponse;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import static org.noostak.appointment.common.success.AppointmentSuccessCode.APPOINTMENT_CREATED;

@RestController
@RequestMapping("/api/v1")
@RequiredArgsConstructor
public class AppointmentController {

private final AppointmentService appointmentService;

// TODO : GROUP 으둜 이동
@PostMapping("/groups/{groupId}/appointments")
public ResponseEntity<SuccessResponse> createAppointment(
// @AuthenticationPrincipal Long memberId,
@PathVariable(name = "groupId") Long groupId,
@RequestBody AppointmentCreateRequest request
) {
Long memberId = 1L;
appointmentService.createAppointment(memberId, groupId, request);
return ResponseEntity.ok(SuccessResponse.of(APPOINTMENT_CREATED));
}

@GetMapping("/appointments/{appointmentId}/recommended-options")
public ResponseEntity<SuccessResponse<AppointmentRecommendedOptionsResponse>> getRecommendedAppointmentOptions(
@PathVariable(name = "appointmentId") Long appointmentId
) {
Long memberId = 1L;
AppointmentRecommendedOptionsResponse response = appointmentService.getRecommendedAppointmentOptions(memberId, appointmentId);
return ResponseEntity.ok(SuccessResponse.of(APPOINTMENT_CREATED, response));
}
}
29 changes: 29 additions & 0 deletions src/main/java/org/noostak/appointment/api/CalendarController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.noostak.appointment.api;


import lombok.RequiredArgsConstructor;
import org.noostak.appointment.application.CalendarService;
import org.noostak.appointment.common.success.CalendarSuccessCode;
import org.noostak.appointment.dto.calendar.CalendarResponse;
import org.noostak.global.success.SuccessResponse;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
public class CalendarController {

private final CalendarService calendarService;
@GetMapping("/api/v1/groups/{groupId}/appointments/calendar")
public ResponseEntity<SuccessResponse> getCalendar(
@PathVariable Long groupId,
@RequestParam int year,
@RequestParam int month
){
CalendarResponse response = calendarService.getCalendarViewByGroupId(groupId, year, month);
return ResponseEntity.ok(SuccessResponse.of(CalendarSuccessCode.CALENDAR_CREATED,response));
}
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.noostak.appointment.application;

import lombok.RequiredArgsConstructor;
import org.noostak.appointment.application.create.AppointmentCreateService;
import org.noostak.appointment.application.recommendation.AppointmentRecommendedOptionService;
import org.noostak.appointment.dto.request.AppointmentCreateRequest;
import org.noostak.appointment.dto.response.recommendation.AppointmentRecommendedOptionsResponse;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class AppointmentService {
private final AppointmentCreateService appointmentCreateService;
private final AppointmentRecommendedOptionService appointmentRecommendedOptionService;

public void createAppointment(Long memberId, Long groupId, AppointmentCreateRequest request) {
appointmentCreateService.createAppointment(memberId, groupId, request);
}

public AppointmentRecommendedOptionsResponse getRecommendedAppointmentOptions(Long memberId, Long appointmentId) {
return appointmentRecommendedOptionService.getRecommendedAppointmentOptions(memberId, appointmentId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.noostak.appointment.application;

import org.noostak.appointment.dto.calendar.CalendarResponse;

public interface CalendarService{
CalendarResponse getCalendarViewByGroupId(Long groupId, int year, int month);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
package org.noostak.appointment.application;


import lombok.RequiredArgsConstructor;
import org.noostak.appointment.domain.Appointment;
import org.noostak.appointment.domain.AppointmentRepository;
import org.noostak.appointment.domain.vo.AppointmentStatus;
import org.noostak.appointment.dto.calendar.CalendarResponse;
import org.noostak.appointment.dto.calendar.MonthAppointment;
import org.noostak.appointment.dto.calendar.MonthAppointments;
import org.noostak.appointmentoption.common.exception.AppointmentOptionErrorCode;
import org.noostak.appointmentoption.common.exception.AppointmentOptionException;
import org.noostak.appointmentoption.domain.AppointmentOption;
import org.noostak.appointmentoption.domain.AppointmentOptionRepository;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;

@Service
@RequiredArgsConstructor
public class CalendarServiceImpl implements CalendarService {

private final AppointmentRepository appointmentRepository;
private final AppointmentOptionRepository appointmentOptionRepository;


@Override
public CalendarResponse getCalendarViewByGroupId(Long groupId, int year, int month) {

List<Appointment> appointmentList =
appointmentRepository.findAllByGroupIdConfirmed(AppointmentStatus.CONFIRMED, groupId);

// 이번 λ‹¬μ˜ μΊ˜λ¦°λ” 정보 λͺ©λ‘ 뢈러였기
ArrayList<MonthAppointments> currentMonthAppointments =
getMonthAppointments(appointmentList, year, month);

// 이전 λ‹¬μ˜ μΊ˜λ¦°λ” 정보 λͺ©λ‘ 뢈러였기
ArrayList<MonthAppointments> previousMonthAppointments =
getPreviousMonthAppointments(appointmentList, year, month);

return CalendarResponse.of(year, month, currentMonthAppointments, previousMonthAppointments);
}

private ArrayList<MonthAppointments> getPreviousMonthAppointments(List<Appointment> appointmentList, int year, int month) {
LocalDate firstDate = LocalDate.of(year, month, 1);
int weekNumber = firstDate.getDayOfWeek().getValue();
LocalDate previousDate = firstDate.minusDays(weekNumber);

return getMonthAppointments(appointmentList, firstDate, previousDate);
}

private ArrayList<MonthAppointments> getMonthAppointments(List<Appointment> appointmentList, LocalDate firstDate, LocalDate previousDate) {
HashMap<Integer, ArrayList<MonthAppointment>> previousMonthAppointmentMapper =
getMonthAppointmentsMapper(appointmentList, firstDate, previousDate);

return getMonthAppointments(previousMonthAppointmentMapper);
}

private ArrayList<MonthAppointments> getMonthAppointments(List<Appointment> appointmentList, int year, int month) {
HashMap<Integer, ArrayList<MonthAppointment>> currentMonthAppointmentMapper =
getMonthAppointmentsMapper(appointmentList, year, month);

return getMonthAppointments(currentMonthAppointmentMapper);
}

private HashMap<Integer, ArrayList<MonthAppointment>>
getMonthAppointmentsMapper(List<Appointment> appointmentList, LocalDate firstDate, LocalDate previousDate) {
HashMap<Integer, ArrayList<MonthAppointment>> previousMonthAppointmentMapper = new HashMap<>();

for (Appointment appointment : appointmentList) {
AppointmentOption previousMonthAppointmentOption
= getAppointmentConfirmed(firstDate, previousDate, appointment);

int day = previousMonthAppointmentOption.getDayOfMonth();

ArrayList<MonthAppointment> dayOfOptions =
previousMonthAppointmentMapper.getOrDefault(day, new ArrayList<>());

MonthAppointment previousMonthAppointment =
MonthAppointment.from(appointment, previousMonthAppointmentOption);

dayOfOptions.add(previousMonthAppointment);

previousMonthAppointmentMapper.put(day, dayOfOptions);
}
return previousMonthAppointmentMapper;
}

private HashMap<Integer, ArrayList<MonthAppointment>>
getMonthAppointmentsMapper(List<Appointment> appointmentList, int year, int month) {
HashMap<Integer, ArrayList<MonthAppointment>> monthAppointmentMapper = new HashMap<>();

for (Appointment appointment : appointmentList) {

AppointmentOption appointmentOption =
getAppointmentConfirmed(appointment, year, month);

int day = appointmentOption.getDayOfMonth();

ArrayList<MonthAppointment> dayOfOptions = monthAppointmentMapper.getOrDefault(day, new ArrayList<>());

MonthAppointment monthAppointment = MonthAppointment.from(appointment, appointmentOption);
dayOfOptions.add(monthAppointment);

monthAppointmentMapper.put(day, dayOfOptions);
}

return monthAppointmentMapper;
}

private ArrayList<MonthAppointments> getMonthAppointments
(HashMap<Integer, ArrayList<MonthAppointment>> monthAppointmentMapper) {
ArrayList<MonthAppointments> currentMonthAppointments = new ArrayList<>();

for (int day : monthAppointmentMapper.keySet()) {
ArrayList<MonthAppointment> appointmentOptions = monthAppointmentMapper.get(day);
MonthAppointments monthAppointments = new MonthAppointments(day, appointmentOptions);

currentMonthAppointments.add(monthAppointments);
Collections.sort(appointmentOptions);
}

return currentMonthAppointments;
}

private AppointmentOption getAppointmentConfirmed(Appointment appointment, int year, int month) {
return appointmentOptionRepository
.findByAppointmentConfirmedYearAndMonth(appointment.getId(), year, month)
.orElseThrow(() -> new AppointmentOptionException(AppointmentOptionErrorCode.APPOINTMENT_OPTION_NOT_FOUND));
}

private AppointmentOption getAppointmentConfirmed(LocalDate firstDate, LocalDate previousDate, Appointment appointment) {
return appointmentOptionRepository
.findByAppointmentConfirmedBetweenDate(appointment.getId(), previousDate, firstDate)
.orElseThrow(() -> new AppointmentOptionException(AppointmentOptionErrorCode.APPOINTMENT_OPTION_NOT_FOUND));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.noostak.appointment.application.create;

import org.noostak.appointment.dto.request.AppointmentCreateRequest;

public interface AppointmentCreateService {
void createAppointment(Long memberId, Long groupId, AppointmentCreateRequest request);
}
Loading