Skip to content

Commit

Permalink
feat: search user feature and disable show user who deleted
Browse files Browse the repository at this point in the history
  • Loading branch information
jbj338033 committed Aug 1, 2024
1 parent 0f2cc02 commit 173dab6
Show file tree
Hide file tree
Showing 7 changed files with 76 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.open3r.openmusic.domain.admin.user.service.impl
import com.open3r.openmusic.domain.admin.user.service.AdminUserService
import com.open3r.openmusic.domain.user.domain.enums.UserStatus
import com.open3r.openmusic.domain.user.dto.response.UserResponse
import com.open3r.openmusic.domain.user.repository.UserQueryRepository
import com.open3r.openmusic.domain.user.repository.UserRepository
import com.open3r.openmusic.global.error.CustomException
import com.open3r.openmusic.global.error.ErrorCode
Expand All @@ -12,15 +13,18 @@ import org.springframework.transaction.annotation.Transactional

@Service
class AdminUserServiceImpl(
private val userRepository: UserRepository
private val userRepository: UserRepository,
private val userQueryRepository: UserQueryRepository
) : AdminUserService {
@Transactional(readOnly = true)
override fun getUsers() = userRepository.findAll().map { UserResponse.of(it) }
override fun getUsers() = userQueryRepository.findAll().map { UserResponse.of(it) }

@Transactional
override fun deleteUser(userId: Long) {
val user = userRepository.findByIdOrNull(userId) ?: throw CustomException(ErrorCode.USER_NOT_FOUND)

if (user.status == UserStatus.DELETED) throw CustomException(ErrorCode.USER_ALREADY_DELETED)

user.status = UserStatus.DELETED

userRepository.save(user)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,4 +155,9 @@ class UserController(
@GetMapping("/{userId}/playlists")
fun getUserPlaylists(@PathVariable userId: Long) =
BaseResponse(userService.getUserPlaylists(userId), 200).toEntity()

@Operation(summary = "유저 검색")
@GetMapping("/search")
fun searchUsers(@RequestParam keyword: String, @PageableDefault pageable: Pageable) =
BaseResponse(userService.searchUsers(keyword, pageable), 200).toEntity()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.open3r.openmusic.domain.user.repository

import com.open3r.openmusic.domain.user.domain.entity.UserEntity
import org.springframework.data.domain.Page
import org.springframework.data.domain.Pageable

interface UserQueryRepository {
fun findAll(): List<UserEntity>
fun searchUsers(keyword: String, pageable: Pageable): Page<UserEntity>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.open3r.openmusic.domain.user.repository.impl

import com.open3r.openmusic.domain.user.domain.entity.QUserEntity.userEntity
import com.open3r.openmusic.domain.user.domain.entity.UserEntity
import com.open3r.openmusic.domain.user.domain.enums.UserStatus
import com.open3r.openmusic.domain.user.repository.UserQueryRepository
import com.open3r.openmusic.global.util.paginate
import com.querydsl.jpa.impl.JPAQueryFactory
import org.springframework.data.domain.Page
import org.springframework.data.domain.PageImpl
import org.springframework.data.domain.Pageable
import org.springframework.stereotype.Repository
import org.springframework.transaction.annotation.Transactional

@Repository
class UserQueryRepositoryImpl(
private val jpaQueryFactory: JPAQueryFactory
) : UserQueryRepository {
@Transactional
override fun findAll(): List<UserEntity> {
return jpaQueryFactory.selectFrom(userEntity)
.where(userEntity.status.eq(UserStatus.ACTIVE))
.fetch()
}

@Transactional
override fun searchUsers(keyword: String, pageable: Pageable): Page<UserEntity> {
val count = jpaQueryFactory.select(userEntity.count())
.from(userEntity)
.where(userEntity.status.eq(UserStatus.ACTIVE), userEntity.nickname.containsIgnoreCase(keyword))
.fetchFirst() ?: 0

val users = jpaQueryFactory.selectFrom(userEntity)
.where(userEntity.status.eq(UserStatus.ACTIVE), userEntity.nickname.containsIgnoreCase(keyword))
.paginate(pageable)
.orderBy(userEntity.createdAt.desc())
.fetch()

return PageImpl(users, pageable, count)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,6 @@ interface UserService {
fun getUserAlbums(userId: Long): List<AlbumResponse>
fun getUserSongs(userId: Long): List<SongResponse>
fun getUserPlaylists(userId: Long): List<PlaylistResponse>

fun searchUsers(keyword: String, pageable: Pageable): Page<UserResponse>
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import com.open3r.openmusic.domain.user.dto.request.UserSetNowPlayingRequest
import com.open3r.openmusic.domain.user.dto.request.UserUpdateRequest
import com.open3r.openmusic.domain.user.dto.response.UserNowPlayingResponse
import com.open3r.openmusic.domain.user.dto.response.UserResponse
import com.open3r.openmusic.domain.user.repository.UserQueryRepository
import com.open3r.openmusic.domain.user.repository.UserRepository
import com.open3r.openmusic.domain.user.service.UserService
import com.open3r.openmusic.global.error.CustomException
Expand All @@ -38,7 +39,8 @@ class UserServiceImpl(
private val albumRepository: AlbumRepository,
private val playlistRepository: PlaylistRepository,
private val songRepository: SongRepository,
private val songQueryRepository: SongQueryRepository
private val songQueryRepository: SongQueryRepository,
private val userQueryRepository: UserQueryRepository
) : UserService {

@Transactional(readOnly = true)
Expand Down Expand Up @@ -147,7 +149,7 @@ class UserServiceImpl(
@Transactional
override fun getMyQueue(): List<SongResponse> {
val user = userSecurity.user
val songs = user.queue.reversed().map { it.song }
val songs = user.queue.map { it.song }

return songs.map { SongResponse.of(it, user) }
}
Expand Down Expand Up @@ -321,4 +323,11 @@ class UserServiceImpl(

return songs.map { SongResponse.of(it, user) }
}

@Transactional(readOnly = true)
override fun searchUsers(keyword: String, pageable: Pageable): Page<UserResponse> {
val users = userQueryRepository.searchUsers(keyword, pageable)

return users.map { UserResponse.of(it) }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ enum class ErrorCode(
USER_PASSWORD_NOT_MATCH(HttpStatus.BAD_REQUEST, "User password not match"),
USER_QUEUE_NOT_FOUND(HttpStatus.NOT_FOUND, "User queue not found"),
USER_QUEUE_ALREADY_EXISTS(HttpStatus.BAD_REQUEST, "User queue already exists"),
USER_ALREADY_DELETED(HttpStatus.BAD_REQUEST, "User already deleted"),

// Else
MAX_UPLOAD_SIZE_EXCEEDED(HttpStatus.BAD_REQUEST, "Max upload size exceeded"),
Expand Down

0 comments on commit 173dab6

Please sign in to comment.