From bdb0da62c03a11bd817a3f91fa8a08a8841ac3f2 Mon Sep 17 00:00:00 2001 From: aesperer Date: Tue, 17 Sep 2024 21:00:49 +0900 Subject: [PATCH 1/5] add :: music field --- .../kotlin/com/dotori/v2/domain/music/domain/entity/Music.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/com/dotori/v2/domain/music/domain/entity/Music.kt b/src/main/kotlin/com/dotori/v2/domain/music/domain/entity/Music.kt index 0929b3d6..f9fca263 100644 --- a/src/main/kotlin/com/dotori/v2/domain/music/domain/entity/Music.kt +++ b/src/main/kotlin/com/dotori/v2/domain/music/domain/entity/Music.kt @@ -27,4 +27,4 @@ class Music( @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id", nullable = false) val member: Member -) : BaseTimeEntity() \ No newline at end of file +) : BaseTimeEntity() From 504fb252374d7d08d949d0b8afbca95a2ff95bde Mon Sep 17 00:00:00 2001 From: aesperer Date: Tue, 17 Sep 2024 21:19:47 +0900 Subject: [PATCH 2/5] create :: music rank query service --- .../domain/repository/MusicRepository.kt | 4 ++ .../data/res/MusicRankListResDto.kt | 5 +++ .../presentation/data/res/MusicRankResDto.kt | 16 ++++++++ .../presentation/data/res/MusicResDto.kt | 3 +- .../music/service/FindMusicRankService.kt | 8 ++++ .../service/impl/FindMusicRankServiceImpl.kt | 39 +++++++++++++++++++ .../service/impl/FindMusicsServiceImpl.kt | 3 +- 7 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 src/main/kotlin/com/dotori/v2/domain/music/presentation/data/res/MusicRankListResDto.kt create mode 100644 src/main/kotlin/com/dotori/v2/domain/music/presentation/data/res/MusicRankResDto.kt create mode 100644 src/main/kotlin/com/dotori/v2/domain/music/service/FindMusicRankService.kt create mode 100644 src/main/kotlin/com/dotori/v2/domain/music/service/impl/FindMusicRankServiceImpl.kt diff --git a/src/main/kotlin/com/dotori/v2/domain/music/domain/repository/MusicRepository.kt b/src/main/kotlin/com/dotori/v2/domain/music/domain/repository/MusicRepository.kt index c6d25593..30ee6a9d 100644 --- a/src/main/kotlin/com/dotori/v2/domain/music/domain/repository/MusicRepository.kt +++ b/src/main/kotlin/com/dotori/v2/domain/music/domain/repository/MusicRepository.kt @@ -9,6 +9,7 @@ import java.time.LocalDate import java.time.LocalDateTime interface MusicRepository : JpaRepository { + @Modifying @Query("update member set member_music = 'CAN'", nativeQuery = true) fun updateMusicStatusMemberByMember() @@ -18,4 +19,7 @@ interface MusicRepository : JpaRepository { fun deleteAllByCreatedDateBefore(date: LocalDateTime) + @Query(value = "select * from music m where created_date like :date% order by m.likeCount", nativeQuery = true) + fun findAllByCreatedDateOrderByLikeCount(@Param("date") date: LocalDate): List + } \ No newline at end of file diff --git a/src/main/kotlin/com/dotori/v2/domain/music/presentation/data/res/MusicRankListResDto.kt b/src/main/kotlin/com/dotori/v2/domain/music/presentation/data/res/MusicRankListResDto.kt new file mode 100644 index 00000000..f7b0cb61 --- /dev/null +++ b/src/main/kotlin/com/dotori/v2/domain/music/presentation/data/res/MusicRankListResDto.kt @@ -0,0 +1,5 @@ +package com.dotori.v2.domain.music.presentation.data.res + +data class MusicRankListResDto( + val content: List +) diff --git a/src/main/kotlin/com/dotori/v2/domain/music/presentation/data/res/MusicRankResDto.kt b/src/main/kotlin/com/dotori/v2/domain/music/presentation/data/res/MusicRankResDto.kt new file mode 100644 index 00000000..5ab63dbe --- /dev/null +++ b/src/main/kotlin/com/dotori/v2/domain/music/presentation/data/res/MusicRankResDto.kt @@ -0,0 +1,16 @@ +package com.dotori.v2.domain.music.presentation.data.res + +import java.time.LocalDateTime + +data class MusicRankResDto( + val id: Long, + val rank: Int, + val url: String, + val title: String, + val thumbnail: String, + val username: String, + val email: String, + val createdTime: LocalDateTime, + val stuNum: String, + val likeCount: Int +) diff --git a/src/main/kotlin/com/dotori/v2/domain/music/presentation/data/res/MusicResDto.kt b/src/main/kotlin/com/dotori/v2/domain/music/presentation/data/res/MusicResDto.kt index bdb70b12..c8549cd0 100644 --- a/src/main/kotlin/com/dotori/v2/domain/music/presentation/data/res/MusicResDto.kt +++ b/src/main/kotlin/com/dotori/v2/domain/music/presentation/data/res/MusicResDto.kt @@ -10,5 +10,6 @@ data class MusicResDto( val username: String, val email: String, val createdTime: LocalDateTime, - val stuNum: String + val stuNum: String, + val likeCount: Int ) \ No newline at end of file diff --git a/src/main/kotlin/com/dotori/v2/domain/music/service/FindMusicRankService.kt b/src/main/kotlin/com/dotori/v2/domain/music/service/FindMusicRankService.kt new file mode 100644 index 00000000..4b1a2855 --- /dev/null +++ b/src/main/kotlin/com/dotori/v2/domain/music/service/FindMusicRankService.kt @@ -0,0 +1,8 @@ +package com.dotori.v2.domain.music.service + +import com.dotori.v2.domain.music.presentation.data.res.MusicRankListResDto +import java.time.LocalDate + +interface FindMusicRankService { + fun execute(date: LocalDate): MusicRankListResDto +} \ No newline at end of file diff --git a/src/main/kotlin/com/dotori/v2/domain/music/service/impl/FindMusicRankServiceImpl.kt b/src/main/kotlin/com/dotori/v2/domain/music/service/impl/FindMusicRankServiceImpl.kt new file mode 100644 index 00000000..c7904462 --- /dev/null +++ b/src/main/kotlin/com/dotori/v2/domain/music/service/impl/FindMusicRankServiceImpl.kt @@ -0,0 +1,39 @@ +package com.dotori.v2.domain.music.service.impl + +import com.dotori.v2.domain.music.domain.repository.MusicRepository +import com.dotori.v2.domain.music.presentation.data.res.MusicRankListResDto +import com.dotori.v2.domain.music.presentation.data.res.MusicRankResDto +import com.dotori.v2.domain.music.service.FindMusicRankService +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional +import java.time.LocalDate + +@Service +@Transactional(readOnly = true) +class FindMusicRankServiceImpl( + private val musicRepository: MusicRepository +) : FindMusicRankService { + + override fun execute(date: LocalDate): MusicRankListResDto { + val responses = musicRepository.findAllByCreatedDateOrderByLikeCount(date) + .mapIndexed { index, music -> + MusicRankResDto( + id = music.id, + rank = index + 1, + url = music.url, + title = music.title, + thumbnail = music.thumbnail, + username = music.member.memberName, + email = music.member.email, + createdTime = music.createdDate, + stuNum = music.member.stuNum, + likeCount = music.likeCount + ) + } + + return MusicRankListResDto( + responses + ) + } + +} diff --git a/src/main/kotlin/com/dotori/v2/domain/music/service/impl/FindMusicsServiceImpl.kt b/src/main/kotlin/com/dotori/v2/domain/music/service/impl/FindMusicsServiceImpl.kt index fe8fe614..e95e9414 100644 --- a/src/main/kotlin/com/dotori/v2/domain/music/service/impl/FindMusicsServiceImpl.kt +++ b/src/main/kotlin/com/dotori/v2/domain/music/service/impl/FindMusicsServiceImpl.kt @@ -50,6 +50,7 @@ class FindMusicsServiceImpl( username = music.member.memberName, email = music.member.email, createdTime = music.createdDate, - stuNum = music.member.stuNum + stuNum = music.member.stuNum, + likeCount = music.likeCount ) } \ No newline at end of file From e93555af5bc777272889ef6c1bfd79dad6198b5c Mon Sep 17 00:00:00 2001 From: aesperer Date: Tue, 17 Sep 2024 21:22:34 +0900 Subject: [PATCH 3/5] add :: music rank query api --- .../presentation/admin/AdminMusicController.kt | 15 ++++++++++++++- .../councillor/CouncillorMusicController.kt | 14 +++++++++++++- .../developer/DeveloperMusicController.kt | 14 +++++++++++++- .../presentation/member/MemberMusicController.kt | 14 +++++++++++++- 4 files changed, 53 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/com/dotori/v2/domain/music/presentation/admin/AdminMusicController.kt b/src/main/kotlin/com/dotori/v2/domain/music/presentation/admin/AdminMusicController.kt index 92394c6e..43d86f9f 100644 --- a/src/main/kotlin/com/dotori/v2/domain/music/presentation/admin/AdminMusicController.kt +++ b/src/main/kotlin/com/dotori/v2/domain/music/presentation/admin/AdminMusicController.kt @@ -1,7 +1,9 @@ package com.dotori.v2.domain.music.presentation.admin import com.dotori.v2.domain.music.presentation.data.res.MusicListResDto +import com.dotori.v2.domain.music.presentation.data.res.MusicRankListResDto import com.dotori.v2.domain.music.service.DeleteMusicService +import com.dotori.v2.domain.music.service.FindMusicRankService import com.dotori.v2.domain.music.service.FindMusicsService import com.dotori.v2.domain.music.service.ToggleMusicLikeService import org.springframework.format.annotation.DateTimeFormat @@ -15,7 +17,8 @@ import java.time.LocalDate class AdminMusicController( private val findMusicsService: FindMusicsService, private val deleteMusicService: DeleteMusicService, - private val toggleMusicLikeService: ToggleMusicLikeService + private val toggleMusicLikeService: ToggleMusicLikeService, + private val findMusicRankService: FindMusicRankService ) { @GetMapping fun findMusics( @@ -35,4 +38,14 @@ class AdminMusicController( fun toggleMusicLike(@PathVariable("music_id") musicId: Long): ResponseEntity = toggleMusicLikeService.execute(musicId) .run { ResponseEntity.status(HttpStatus.OK).build() } + + @GetMapping("/like") + fun findMusicRank( + @RequestParam( + value = "date", + required = true + ) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) date: LocalDate + ): ResponseEntity = + ResponseEntity.status(HttpStatus.OK).body(findMusicRankService.execute(date)) + } \ No newline at end of file diff --git a/src/main/kotlin/com/dotori/v2/domain/music/presentation/councillor/CouncillorMusicController.kt b/src/main/kotlin/com/dotori/v2/domain/music/presentation/councillor/CouncillorMusicController.kt index 06cdf0f1..a983c9e6 100644 --- a/src/main/kotlin/com/dotori/v2/domain/music/presentation/councillor/CouncillorMusicController.kt +++ b/src/main/kotlin/com/dotori/v2/domain/music/presentation/councillor/CouncillorMusicController.kt @@ -2,8 +2,10 @@ package com.dotori.v2.domain.music.presentation.councillor import com.dotori.v2.domain.music.presentation.data.req.ApplyMusicReqDto import com.dotori.v2.domain.music.presentation.data.res.MusicListResDto +import com.dotori.v2.domain.music.presentation.data.res.MusicRankListResDto import com.dotori.v2.domain.music.service.ApplyMusicService import com.dotori.v2.domain.music.service.DeleteMusicService +import com.dotori.v2.domain.music.service.FindMusicRankService import com.dotori.v2.domain.music.service.FindMusicsService import com.dotori.v2.domain.music.service.ToggleMusicLikeService import org.springframework.format.annotation.DateTimeFormat @@ -19,7 +21,8 @@ class CouncillorMusicController( private val applyMusicService: ApplyMusicService, private val findMusicsService: FindMusicsService, private val deleteMusicService: DeleteMusicService, - private val toggleMusicLikeService: ToggleMusicLikeService + private val toggleMusicLikeService: ToggleMusicLikeService, + private val findMusicRankService: FindMusicRankService ) { @PostMapping fun applyMusic(@RequestBody applyMusicReqDto: ApplyMusicReqDto): ResponseEntity = @@ -44,4 +47,13 @@ class CouncillorMusicController( fun toggleMusicLike(@PathVariable("music_id") musicId: Long): ResponseEntity = toggleMusicLikeService.execute(musicId) .run { ResponseEntity.status(HttpStatus.OK).build() } + + @GetMapping("/like") + fun findMusicRank( + @RequestParam( + value = "date", + required = true + ) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) date: LocalDate + ): ResponseEntity = + ResponseEntity.status(HttpStatus.OK).body(findMusicRankService.execute(date)) } \ No newline at end of file diff --git a/src/main/kotlin/com/dotori/v2/domain/music/presentation/developer/DeveloperMusicController.kt b/src/main/kotlin/com/dotori/v2/domain/music/presentation/developer/DeveloperMusicController.kt index f7b22f77..5740baf3 100644 --- a/src/main/kotlin/com/dotori/v2/domain/music/presentation/developer/DeveloperMusicController.kt +++ b/src/main/kotlin/com/dotori/v2/domain/music/presentation/developer/DeveloperMusicController.kt @@ -2,8 +2,10 @@ package com.dotori.v2.domain.music.presentation.developer import com.dotori.v2.domain.music.presentation.data.req.ApplyMusicReqDto import com.dotori.v2.domain.music.presentation.data.res.MusicListResDto +import com.dotori.v2.domain.music.presentation.data.res.MusicRankListResDto import com.dotori.v2.domain.music.service.ApplyMusicService import com.dotori.v2.domain.music.service.DeleteMusicService +import com.dotori.v2.domain.music.service.FindMusicRankService import com.dotori.v2.domain.music.service.FindMusicsService import com.dotori.v2.domain.music.service.ToggleMusicLikeService import org.springframework.format.annotation.DateTimeFormat @@ -19,7 +21,8 @@ class DeveloperMusicController( private val applyMusicService: ApplyMusicService, private val findMusicsService: FindMusicsService, private val deleteMusicService: DeleteMusicService, - private val toggleMusicLikeService: ToggleMusicLikeService + private val toggleMusicLikeService: ToggleMusicLikeService, + private val findMusicRankService: FindMusicRankService ) { @PostMapping fun applyMusic(@RequestBody applyMusicReqDto: ApplyMusicReqDto): ResponseEntity = @@ -44,4 +47,13 @@ class DeveloperMusicController( fun toggleMusicLike(@PathVariable("music_id") musicId: Long): ResponseEntity = toggleMusicLikeService.execute(musicId) .run { ResponseEntity.status(HttpStatus.OK).build() } + + @GetMapping("/like") + fun findMusicRank( + @RequestParam( + value = "date", + required = true + ) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) date: LocalDate + ): ResponseEntity = + ResponseEntity.status(HttpStatus.OK).body(findMusicRankService.execute(date)) } \ No newline at end of file diff --git a/src/main/kotlin/com/dotori/v2/domain/music/presentation/member/MemberMusicController.kt b/src/main/kotlin/com/dotori/v2/domain/music/presentation/member/MemberMusicController.kt index 38b31481..1e738fdb 100644 --- a/src/main/kotlin/com/dotori/v2/domain/music/presentation/member/MemberMusicController.kt +++ b/src/main/kotlin/com/dotori/v2/domain/music/presentation/member/MemberMusicController.kt @@ -2,8 +2,10 @@ package com.dotori.v2.domain.music.presentation.member import com.dotori.v2.domain.music.presentation.data.req.ApplyMusicReqDto import com.dotori.v2.domain.music.presentation.data.res.MusicListResDto +import com.dotori.v2.domain.music.presentation.data.res.MusicRankListResDto import com.dotori.v2.domain.music.service.ApplyMusicService import com.dotori.v2.domain.music.service.DeleteMyMusicService +import com.dotori.v2.domain.music.service.FindMusicRankService import com.dotori.v2.domain.music.service.FindMusicsService import com.dotori.v2.domain.music.service.ToggleMusicLikeService import org.springframework.format.annotation.DateTimeFormat @@ -19,7 +21,8 @@ class MemberMusicController( private val applyMusicService: ApplyMusicService, private val findMusicsService: FindMusicsService, private val deleteMyMusicService: DeleteMyMusicService, - private val toggleMusicLikeService: ToggleMusicLikeService + private val toggleMusicLikeService: ToggleMusicLikeService, + private val findMusicRankService: FindMusicRankService ) { @PostMapping fun applyMusic(@RequestBody applyMusicReqDto: ApplyMusicReqDto): ResponseEntity = @@ -44,4 +47,13 @@ class MemberMusicController( fun toggleMusicLike(@PathVariable("music_id") musicId: Long): ResponseEntity = toggleMusicLikeService.execute(musicId) .run { ResponseEntity.status(HttpStatus.OK).build() } + + @GetMapping("/like") + fun findMusicRank( + @RequestParam( + value = "date", + required = true + ) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) date: LocalDate + ): ResponseEntity = + ResponseEntity.status(HttpStatus.OK).body(findMusicRankService.execute(date)) } \ No newline at end of file From 8565fe95a77e7ef75060a4b3334933c8ca8fedc6 Mon Sep 17 00:00:00 2001 From: aesperer Date: Tue, 17 Sep 2024 21:38:14 +0900 Subject: [PATCH 4/5] =?UTF-8?q?update=20::=20rank=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EC=BF=BC=EB=A6=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dotori/v2/domain/music/domain/repository/MusicRepository.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/com/dotori/v2/domain/music/domain/repository/MusicRepository.kt b/src/main/kotlin/com/dotori/v2/domain/music/domain/repository/MusicRepository.kt index 30ee6a9d..268e2e02 100644 --- a/src/main/kotlin/com/dotori/v2/domain/music/domain/repository/MusicRepository.kt +++ b/src/main/kotlin/com/dotori/v2/domain/music/domain/repository/MusicRepository.kt @@ -19,7 +19,7 @@ interface MusicRepository : JpaRepository { fun deleteAllByCreatedDateBefore(date: LocalDateTime) - @Query(value = "select * from music m where created_date like :date% order by m.likeCount", nativeQuery = true) + @Query(value = "select * from music where created_date like :date% order by music.like_count", nativeQuery = true) fun findAllByCreatedDateOrderByLikeCount(@Param("date") date: LocalDate): List } \ No newline at end of file From 824c47196714e3591dda7ab6499d000deb640aa7 Mon Sep 17 00:00:00 2001 From: aesperer Date: Tue, 17 Sep 2024 21:44:18 +0900 Subject: [PATCH 5/5] add :: music response like count value --- .../v2/domain/music/service/impl/ApplyMusicServiceImpl.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/com/dotori/v2/domain/music/service/impl/ApplyMusicServiceImpl.kt b/src/main/kotlin/com/dotori/v2/domain/music/service/impl/ApplyMusicServiceImpl.kt index 44efa0d4..486919d6 100644 --- a/src/main/kotlin/com/dotori/v2/domain/music/service/impl/ApplyMusicServiceImpl.kt +++ b/src/main/kotlin/com/dotori/v2/domain/music/service/impl/ApplyMusicServiceImpl.kt @@ -60,7 +60,8 @@ class ApplyMusicServiceImpl( username = music.member.memberName, email = music.member.email, createdTime = music.createdDate, - stuNum = music.member.stuNum + stuNum = music.member.stuNum, + likeCount = music.likeCount ) private fun validDayOfWeek(dayOfWeek: DayOfWeek) {