Skip to content

[Artist] 아티스트 찜하기#110

Merged
Creamcheesepie merged 11 commits into
mainfrom
feat/#103
Dec 17, 2025
Merged

[Artist] 아티스트 찜하기#110
Creamcheesepie merged 11 commits into
mainfrom
feat/#103

Conversation

@ys0221
Copy link
Copy Markdown
Collaborator

@ys0221 ys0221 commented Dec 16, 2025

🔗 관련 이슈

관련된 이슈 번호를 연결해주세요.
Close #이슈번호 를 쓰면 PR merge 시 자동으로 close 됩니다.

🚀 PR 개요

이 PR이 어떤 변경을 포함하고 있는지 간단히 설명해주세요.

  • 아티스트 찜하기 기능 구현
  1. artistLikes : 아티스트 찜 등록
  2. deleteArtistLikes : 아티스트 찜 해제

📌 변경 사항

주요 변경 내용을 체크리스트 형태로 정리해주세요.

  • 기능 추가
  • 버그 수정
  • 리팩터링
  • 문서 업데이트
  • 테스트 추가/수정

🧪 테스트 방법

변경된 내용을 어떻게 테스트했는지 구체적으로 적어주세요.

포스트맨으로 테스트하였습니다.

📸 스크린샷 (선택)

UI 변경 또는 시각적으로 확인할 수 있는 변경이 있다면 첨부해주세요.

스크린샷 2025-12-17 오전 12 18 52 이렇게 요청을 보내면 스크린샷 2025-12-17 오전 12 19 14 스크린샷 2025-12-17 오전 12 19 32

DB에 저장이 됩니다.

스크린샷 2025-12-17 오전 12 19 54 또한 Delete 요청을 보내면 스크린샷 2025-12-17 오전 12 20 15

아티스트 테이블에서 like_count 수가 감소하고

스크린샷 2025-12-17 오전 12 20 48

아티스트 찜 DB에서도 삭제되는 것을 확인할 수 있습니다.

⚠️ 참고 사항

리뷰어가 알아야 할 사항이 있다면 자유롭게 작성해주세요.

제가 ArtistLike 테이블에서 user_id 칼럼을 genre_id 라고 매핑해놨더라고요... 그래서 DB 최신화 한 번씩만 해주시면 감사하겠습니다!!
((또한 스크린샷은 칼럼 변경하기 전에 찍은거라서... genre_id 가 user_id 라고 봐주시면 됩니다 ㅜㅜ))

@ys0221 ys0221 self-assigned this Dec 16, 2025
@ys0221 ys0221 added the Feature label Dec 16, 2025
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Dec 16, 2025

Test Results

1 tests  ±0   1 ✅ ±0   0s ⏱️ ±0s
1 suites ±0   0 💤 ±0 
1 files   ±0   0 ❌ ±0 

Results for commit a7c2385. ± Comparison against base commit 697d54e.

♻️ This comment has been updated with latest results.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Dec 16, 2025

⭐ JaCoCo Coverage

Line Coverage: 5.40%

📄 Coverage Details

Overall Line Coverage: 5.37% (127 covered / 2364 lines)

Package Summary (lowest first)
Package Line % Covered Missed
com/back/web7_9_codecrete_be/domain/chats/controller 0.00% 0 0
com/back/web7_9_codecrete_be/domain/location/service 0.00% 0 90
com/back/web7_9_codecrete_be/domain/chats/service 0.00% 0 0
com/back/web7_9_codecrete_be/domain/plans/controller 0.00% 0 43
com/back/web7_9_codecrete_be/domain/location/controller 0.00% 0 20
com/back/web7_9_codecrete_be/global/rsData 0.00% 0 11
com/back/web7_9_codecrete_be/domain/location/entity 0.00% 0 15
com/back/web7_9_codecrete_be/global/scheduler 0.00% 0 3
com/back/web7_9_codecrete_be/domain/auth/entity 0.00% 0 0
com/back/web7_9_codecrete_be/domain/auth/service 0.00% 0 121
com/back/web7_9_codecrete_be/domain/plans/service 0.00% 0 278
com/back/web7_9_codecrete_be/global/initData 0.00% 0 30
com/back/web7_9_codecrete_be/domain/users/controller 0.00% 0 20
com/back/web7_9_codecrete_be/domain/email/entity 0.00% 0 6
com/back/web7_9_codecrete_be/domain/users/service 0.00% 0 59
com/back/web7_9_codecrete_be/domain/auth/controller 0.00% 0 24
com/back/web7_9_codecrete_be/domain/artists/controller 0.00% 0 24
com/back/web7_9_codecrete_be/global/aspect 0.00% 0 4
com/back/web7_9_codecrete_be/global/wikidata 0.36% 1 279
com/back/web7_9_codecrete_be/domain/artists/service 0.79% 3 375
com/back/web7_9_codecrete_be/global/musicbrainz 0.99% 1 100
com/back/web7_9_codecrete_be/domain/email/service 1.92% 1 51
com/back/web7_9_codecrete_be/domain/concerts/controller 3.70% 1 26
com/back/web7_9_codecrete_be/domain/concerts/entity 4.29% 3 67
com/back/web7_9_codecrete_be/domain/concerts/service 6.08% 22 340
com/back/web7_9_codecrete_be/domain/artists/entity 11.11% 5 40
com/back/web7_9_codecrete_be/global/rq 12.90% 4 27
com/back/web7_9_codecrete_be/domain/plans/entity 25.00% 21 63
com/back/web7_9_codecrete_be/global/security 26.36% 29 81
com/back/web7_9_codecrete_be/domain/users/entity 29.27% 12 29
com/back/web7_9_codecrete_be/global/storage 33.33% 1 2
com/back/web7_9_codecrete_be/global/spotify 35.71% 5 9
com/back/web7_9_codecrete_be/domain/chats/entity 100.00% 1 0
com/back/web7_9_codecrete_be/global/doc 100.00% 17 0
Lowest Covered Classes (Top 20)
Class Line % Covered Missed
com.back.web7_9_codecrete_be.domain.plans.service.PlanService 0.00% 0 278
com.back.web7_9_codecrete_be.domain.auth.service.AuthService 0.00% 0 76
com.back.web7_9_codecrete_be.domain.artists.service.ArtistService 0.00% 0 65
com.back.web7_9_codecrete_be.domain.users.service.UserService 0.00% 0 55
com.back.web7_9_codecrete_be.domain.concerts.service.ConcertService 0.00% 0 54
com.back.web7_9_codecrete_be.domain.location.service.KakaoLocalService 0.00% 0 47
com.back.web7_9_codecrete_be.domain.plans.controller.PlanController 0.00% 0 43
com.back.web7_9_codecrete_be.domain.concerts.entity.Concert 0.00% 0 40
com.back.web7_9_codecrete_be.global.security.JwtTokenProvider 0.00% 0 37
com.back.web7_9_codecrete_be.domain.plans.entity.Schedule 0.00% 0 34
com.back.web7_9_codecrete_be.domain.artists.entity.Artist 0.00% 0 31
com.back.web7_9_codecrete_be.domain.location.service.LocationService 0.00% 0 30
com.back.web7_9_codecrete_be.global.initData.BaseInitData 0.00% 0 30
com.back.web7_9_codecrete_be.domain.users.entity.User 0.00% 0 29
com.back.web7_9_codecrete_be.domain.auth.service.TokenService 0.00% 0 27
com.back.web7_9_codecrete_be.domain.auth.controller.AuthController 0.00% 0 24
com.back.web7_9_codecrete_be.domain.artists.controller.ArtistsController 0.00% 0 24
com.back.web7_9_codecrete_be.domain.users.controller.UserController 0.00% 0 20
com.back.web7_9_codecrete_be.domain.plans.entity.Plan 0.00% 0 18
com.back.web7_9_codecrete_be.domain.auth.service.KakaoOAuthService 0.00% 0 18
Changed Classes (from this PR)
Source (PR) Class Prefix Line % Covered Missed
src/main/java/com/back/web7_9_codecrete_be/domain/plans/service/PlanService.java com.back.web7_9_codecrete_be.domain.plans.service.PlanService 0.00% 0 278
src/main/java/com/back/web7_9_codecrete_be/domain/auth/service/AuthService.java com.back.web7_9_codecrete_be.domain.auth.service.AuthService 0.00% 0 76
src/main/java/com/back/web7_9_codecrete_be/domain/artists/service/ArtistService.java com.back.web7_9_codecrete_be.domain.artists.service.ArtistService 0.00% 0 65
src/main/java/com/back/web7_9_codecrete_be/domain/concerts/service/ConcertService.java com.back.web7_9_codecrete_be.domain.concerts.service.ConcertService 0.00% 0 54
src/main/java/com/back/web7_9_codecrete_be/domain/location/service/KakaoLocalService.java com.back.web7_9_codecrete_be.domain.location.service.KakaoLocalService 0.00% 0 47
src/main/java/com/back/web7_9_codecrete_be/domain/plans/controller/PlanController.java com.back.web7_9_codecrete_be.domain.plans.controller.PlanController 0.00% 0 43
src/main/java/com/back/web7_9_codecrete_be/domain/location/service/LocationService.java com.back.web7_9_codecrete_be.domain.location.service.LocationService 0.00% 0 30
src/main/java/com/back/web7_9_codecrete_be/global/initData/BaseInitData.java com.back.web7_9_codecrete_be.global.initData.BaseInitData 0.00% 0 30
src/main/java/com/back/web7_9_codecrete_be/domain/artists/controller/ArtistsController.java com.back.web7_9_codecrete_be.domain.artists.controller.ArtistsController 0.00% 0 24
src/main/java/com/back/web7_9_codecrete_be/domain/auth/controller/AuthController.java com.back.web7_9_codecrete_be.domain.auth.controller.AuthController 0.00% 0 24
src/main/java/com/back/web7_9_codecrete_be/domain/auth/service/KakaoOAuthService.java com.back.web7_9_codecrete_be.domain.auth.service.KakaoOAuthService 0.00% 0 18
src/main/java/com/back/web7_9_codecrete_be/domain/location/entity/Location.java com.back.web7_9_codecrete_be.domain.location.entity.Location 0.00% 0 15
src/main/java/com/back/web7_9_codecrete_be/domain/concerts/controller/ConcertAdminController.java com.back.web7_9_codecrete_be.domain.concerts.controller.ConcertAdminController 0.00% 0 10
src/main/java/com/back/web7_9_codecrete_be/domain/location/controller/KakaoTestController.java com.back.web7_9_codecrete_be.domain.location.controller.KakaoTestController 0.00% 0 10
src/main/java/com/back/web7_9_codecrete_be/domain/location/controller/LocationController.java com.back.web7_9_codecrete_be.domain.location.controller.LocationController 0.00% 0 9
src/main/java/com/back/web7_9_codecrete_be/domain/concerts/entity/ConcertUpdateTime.java com.back.web7_9_codecrete_be.domain.concerts.entity.ConcertUpdateTime 0.00% 0 5
src/main/java/com/back/web7_9_codecrete_be/domain/artists/entity/ArtistLike.java com.back.web7_9_codecrete_be.domain.artists.entity.ArtistLike 0.00% 0 4
src/main/java/com/back/web7_9_codecrete_be/domain/location/controller/TmapController.java com.back.web7_9_codecrete_be.domain.location.controller.TmapController 0.00% 0 1
src/main/java/com/back/web7_9_codecrete_be/domain/artists/dto/request/CreateRequest.java com.back.web7_9_codecrete_be.domain.artists.dto.request.CreateRequest 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/artists/dto/request/SearchRequest.java com.back.web7_9_codecrete_be.domain.artists.dto.request.SearchRequest 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/artists/dto/request/UpdateRequest.java com.back.web7_9_codecrete_be.domain.artists.dto.request.UpdateRequest 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/artists/dto/response/ArtistDetailResponse.java com.back.web7_9_codecrete_be.domain.artists.dto.response.ArtistDetailResponse 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/artists/dto/response/SearchResponse.java com.back.web7_9_codecrete_be.domain.artists.dto.response.SearchResponse 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/artists/repository/ArtistLikeRepository.java com.back.web7_9_codecrete_be.domain.artists.repository.ArtistLikeRepository 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/artists/repository/ArtistRepository.java com.back.web7_9_codecrete_be.domain.artists.repository.ArtistRepository 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/auth/dto/kakao/KakaoTokenResponse.java com.back.web7_9_codecrete_be.domain.auth.dto.kakao.KakaoTokenResponse 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/auth/dto/kakao/KakaoUserInfo.java com.back.web7_9_codecrete_be.domain.auth.dto.kakao.KakaoUserInfo 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/auth/dto/kakao/KakaoUserResponse.java com.back.web7_9_codecrete_be.domain.auth.dto.kakao.KakaoUserResponse 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/KopisApiDto/result/SetResultResponse.java com.back.web7_9_codecrete_be.domain.concerts.dto.KopisApiDto.result.SetResultResponse 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertItem.java com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertItem 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertLikeResponse.java com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertLikeResponse 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertTicketTimeSetRequest.java com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertTicketTimeSetRequest 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/concerts/dto/concert/ConcertUpdateRequest.java com.back.web7_9_codecrete_be.domain.concerts.dto.concert.ConcertUpdateRequest 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/concerts/repository/ConcertImageRepository.java com.back.web7_9_codecrete_be.domain.concerts.repository.ConcertImageRepository 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/concerts/repository/ConcertRepository.java com.back.web7_9_codecrete_be.domain.concerts.repository.ConcertRepository 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/concerts/repository/ConcertUpdateTimeRepository.java com.back.web7_9_codecrete_be.domain.concerts.repository.ConcertUpdateTimeRepository 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/concerts/repository/TicketOfficeRepository.java com.back.web7_9_codecrete_be.domain.concerts.repository.TicketOfficeRepository 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/location/dto/KakaoCoordinateResponse.java com.back.web7_9_codecrete_be.domain.location.dto.KakaoCoordinateResponse 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/location/dto/KakaoLocalResponse.java com.back.web7_9_codecrete_be.domain.location.dto.KakaoLocalResponse 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/location/dto/TmapResponse.java com.back.web7_9_codecrete_be.domain.location.dto.TmapResponse 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/location/dto/request/LocationRequestDto.java com.back.web7_9_codecrete_be.domain.location.dto.request.LocationRequestDto 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/location/dto/response/LocationResponseDto.java com.back.web7_9_codecrete_be.domain.location.dto.response.LocationResponseDto 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/location/repository/LocationRepository.java com.back.web7_9_codecrete_be.domain.location.repository.LocationRepository 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/plans/dto/request/ScheduleAddRequest.java com.back.web7_9_codecrete_be.domain.plans.dto.request.ScheduleAddRequest 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/plans/dto/request/ScheduleUpdateRequest.java com.back.web7_9_codecrete_be.domain.plans.dto.request.ScheduleUpdateRequest 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/plans/dto/response/PlanDetailResponse.java com.back.web7_9_codecrete_be.domain.plans.dto.response.PlanDetailResponse 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/plans/dto/response/ScheduleResponse.java com.back.web7_9_codecrete_be.domain.plans.dto.response.ScheduleResponse 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/plans/repository/ScheduleRepository.java com.back.web7_9_codecrete_be.domain.plans.repository.ScheduleRepository 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/users/repository/UserRepository.java com.back.web7_9_codecrete_be.domain.users.repository.UserRepository 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/global/error/code/ArtistErrorCode.java com.back.web7_9_codecrete_be.global.error.code.ArtistErrorCode 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/global/error/code/AuthErrorCode.java com.back.web7_9_codecrete_be.global.error.code.AuthErrorCode 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/global/error/code/LocationErrorCode.java com.back.web7_9_codecrete_be.global.error.code.LocationErrorCode 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/artists/service/ArtistEnrichService.java com.back.web7_9_codecrete_be.domain.artists.service.ArtistEnrichService 0.81% 1 123
src/main/java/com/back/web7_9_codecrete_be/domain/artists/service/SpotifyService.java com.back.web7_9_codecrete_be.domain.artists.service.SpotifyService 1.08% 2 183
src/main/java/com/back/web7_9_codecrete_be/domain/concerts/entity/Concert.java com.back.web7_9_codecrete_be.domain.concerts.entity.Concert 3.12% 2 62
src/main/java/com/back/web7_9_codecrete_be/domain/concerts/service/KopisApiService.java com.back.web7_9_codecrete_be.domain.concerts.service.KopisApiService 5.22% 14 254
src/main/java/com/back/web7_9_codecrete_be/domain/concerts/controller/ConcertController.java com.back.web7_9_codecrete_be.domain.concerts.controller.ConcertController 5.88% 1 16
src/main/java/com/back/web7_9_codecrete_be/domain/artists/entity/Artist.java com.back.web7_9_codecrete_be.domain.artists.entity.Artist 7.89% 3 35
src/main/java/com/back/web7_9_codecrete_be/domain/users/entity/User.java com.back.web7_9_codecrete_be.domain.users.entity.User 12.12% 4 29
src/main/java/com/back/web7_9_codecrete_be/domain/plans/entity/Schedule.java com.back.web7_9_codecrete_be.domain.plans.entity.Schedule 22.73% 10 34
src/main/java/com/back/web7_9_codecrete_be/global/security/SecurityConfig.java com.back.web7_9_codecrete_be.global.security.SecurityConfig 100.00% 25 0
src/main/java/com/back/web7_9_codecrete_be/domain/users/entity/SocialType.java com.back.web7_9_codecrete_be.domain.users.entity.SocialType 100.00% 4 0
src/main/java/com/back/web7_9_codecrete_be/domain/artists/entity/ArtistType.java com.back.web7_9_codecrete_be.domain.artists.entity.ArtistType 100.00% 3 0

🔗 Full HTML report: See artifact jacoco-full-html on this run → https://github.com/prgrms-web-devcourse-final-project/WEB7_9_codecrete_BE/actions/runs/20287662726

private Artist artist;

public ArtistLike(Artist artist, User user) {
this.createdDate = LocalDateTime.now();
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Auditing 사용중이라서 위에 칼럼쪽에 createdate 어노테이션 사용하시면 자동으로 주입될 것 같습니다!

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵 수정하겠습니다!!

public void deleteLikeArtist(Long artistId) {
User user = rq.getUser();
Artist artist = artistRepository.findById(artistId)
.orElseThrow(() -> new BusinessException(ArtistErrorCode.ARTIST_NOT_FOUND));
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

artist 찾아오는 부분은 좋아요 / 좋아요 삭제 부분에서 공통적으로 처리되는 부분이니 메소드로 빼도 좋을 것 같습니다.

  • 이미 알고 있는 미세팁일 수 있지만 해당 부분 드래그하고 export->method 하면 알아서 추출되고 이름만 쳐주면 적용됩니다(중복부분도 같이 바꿔주더라고요)

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵 수정하겠습니다!! 팁 알려주셔서 감사합니당

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

artist 찾아오는 부분은 좋아요 / 좋아요 삭제 부분에서 공통적으로 처리되는 부분이니 메소드로 빼도 좋을 것 같습니다.

  • 이미 알고 있는 미세팁일 수 있지만 해당 부분 드래그하고 export->method 하면 알아서 추출되고 이름만 쳐주면 적용됩니다(중복부분도 같이 바꿔주더라고요)

저도 꿀팁 하나 얻어갑니다!

Copy link
Copy Markdown
Collaborator

@larama-C larama-C left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다!

@Creamcheesepie Creamcheesepie merged commit b8b72c4 into main Dec 17, 2025
1 check passed
@Creamcheesepie Creamcheesepie deleted the feat/#103 branch December 17, 2025 00:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Artist] 아티스트 찜하기

4 participants