크리에이터 관리자 - 콘텐츠 변경 요청 데이터 변경
This commit is contained in:
parent
307c09a4c1
commit
f49203cafc
|
@ -1,6 +1,5 @@
|
|||
package kr.co.vividnext.sodalive.creator.admin.content
|
||||
|
||||
import kr.co.vividnext.sodalive.admin.content.UpdateAdminContentRequest
|
||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||
import kr.co.vividnext.sodalive.common.SodaException
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
|
@ -9,10 +8,11 @@ import org.springframework.security.access.prepost.PreAuthorize
|
|||
import org.springframework.security.core.annotation.AuthenticationPrincipal
|
||||
import org.springframework.web.bind.annotation.GetMapping
|
||||
import org.springframework.web.bind.annotation.PutMapping
|
||||
import org.springframework.web.bind.annotation.RequestBody
|
||||
import org.springframework.web.bind.annotation.RequestMapping
|
||||
import org.springframework.web.bind.annotation.RequestParam
|
||||
import org.springframework.web.bind.annotation.RequestPart
|
||||
import org.springframework.web.bind.annotation.RestController
|
||||
import org.springframework.web.multipart.MultipartFile
|
||||
|
||||
@RestController
|
||||
@PreAuthorize("hasRole('CREATOR')")
|
||||
|
@ -41,11 +41,12 @@ class CreatorAdminContentController(private val service: CreatorAdminContentServ
|
|||
|
||||
@PutMapping
|
||||
fun modifyAudioContent(
|
||||
@RequestBody request: UpdateAdminContentRequest,
|
||||
@RequestPart("coverImage", required = false) coverImage: MultipartFile? = null,
|
||||
@RequestPart("request") requestString: String,
|
||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||
) = run {
|
||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||
|
||||
ApiResponse.ok(service.updateAudioContent(request, member))
|
||||
ApiResponse.ok(service.updateAudioContent(coverImage, requestString, member))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ import kr.co.vividnext.sodalive.content.QAudioContent.audioContent
|
|||
import kr.co.vividnext.sodalive.content.hashtag.QAudioContentHashTag.audioContentHashTag
|
||||
import kr.co.vividnext.sodalive.content.hashtag.QHashTag.hashTag
|
||||
import kr.co.vividnext.sodalive.content.theme.QAudioContentTheme.audioContentTheme
|
||||
import kr.co.vividnext.sodalive.member.QMember.member
|
||||
import org.springframework.data.jpa.repository.JpaRepository
|
||||
import java.time.LocalDateTime
|
||||
|
||||
|
@ -24,6 +25,8 @@ interface CreatorAdminAudioContentQueryRepository {
|
|||
): List<GetCreatorAdminContentListItem>
|
||||
|
||||
fun getHashTagList(audioContentId: Long): List<String>
|
||||
|
||||
fun getAudioContent(memberId: Long, audioContentId: Long): AudioContent?
|
||||
}
|
||||
|
||||
class CreatorAdminAudioContentQueryRepositoryImpl(
|
||||
|
@ -107,6 +110,18 @@ class CreatorAdminAudioContentQueryRepositoryImpl(
|
|||
.fetch()
|
||||
}
|
||||
|
||||
override fun getAudioContent(memberId: Long, audioContentId: Long): AudioContent? {
|
||||
return queryFactory
|
||||
.selectFrom(audioContent)
|
||||
.innerJoin(audioContent.member, member)
|
||||
.where(
|
||||
member.id.eq(memberId)
|
||||
.and(audioContent.id.eq(audioContentId))
|
||||
)
|
||||
.orderBy(audioContent.id.desc())
|
||||
.fetchFirst()
|
||||
}
|
||||
|
||||
private fun formattedDateExpression(
|
||||
dateTime: DateTimePath<LocalDateTime>,
|
||||
format: String = "%Y-%m-%d"
|
||||
|
|
|
@ -1,19 +1,27 @@
|
|||
package kr.co.vividnext.sodalive.creator.admin.content
|
||||
|
||||
import kr.co.vividnext.sodalive.admin.content.UpdateAdminContentRequest
|
||||
import com.amazonaws.services.s3.model.ObjectMetadata
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import kr.co.vividnext.sodalive.aws.cloudfront.AudioContentCloudFront
|
||||
import kr.co.vividnext.sodalive.aws.s3.S3Uploader
|
||||
import kr.co.vividnext.sodalive.common.SodaException
|
||||
import kr.co.vividnext.sodalive.member.Member
|
||||
import kr.co.vividnext.sodalive.utils.generateFileName
|
||||
import org.springframework.beans.factory.annotation.Value
|
||||
import org.springframework.data.domain.Pageable
|
||||
import org.springframework.data.repository.findByIdOrNull
|
||||
import org.springframework.stereotype.Service
|
||||
import org.springframework.transaction.annotation.Transactional
|
||||
import org.springframework.web.multipart.MultipartFile
|
||||
|
||||
@Service
|
||||
class CreatorAdminContentService(
|
||||
private val repository: CreatorAdminContentRepository,
|
||||
private val audioContentCloudFront: AudioContentCloudFront,
|
||||
private val objectMapper: ObjectMapper,
|
||||
private val s3Uploader: S3Uploader,
|
||||
|
||||
@Value("\${cloud.aws.s3.bucket}")
|
||||
private val bucket: String,
|
||||
|
||||
@Value("\${cloud.aws.cloud-front.host}")
|
||||
private val coverImageHost: String
|
||||
|
@ -90,12 +98,23 @@ class CreatorAdminContentService(
|
|||
}
|
||||
|
||||
@Transactional
|
||||
fun updateAudioContent(request: UpdateAdminContentRequest, member: Member) {
|
||||
val audioContent = repository.findByIdOrNull(id = request.id)
|
||||
fun updateAudioContent(coverImage: MultipartFile?, requestString: String, member: Member) {
|
||||
val request = objectMapper.readValue(requestString, UpdateCreatorAdminContentRequest::class.java)
|
||||
val audioContent = repository.getAudioContent(memberId = member.id!!, audioContentId = request.id)
|
||||
?: throw SodaException("잘못된 콘텐츠 입니다.")
|
||||
|
||||
if (request.isDefaultCoverImage) {
|
||||
audioContent.coverImage = "profile/default_profile.png"
|
||||
if (coverImage != null) {
|
||||
val metadata = ObjectMetadata()
|
||||
metadata.contentLength = coverImage.size
|
||||
|
||||
val fileName = generateFileName()
|
||||
val imagePath = s3Uploader.upload(
|
||||
inputStream = coverImage.inputStream,
|
||||
bucket = bucket,
|
||||
filePath = "audio_content_cover/${request.id}/$fileName",
|
||||
metadata = metadata
|
||||
)
|
||||
audioContent.coverImage = imagePath
|
||||
}
|
||||
|
||||
if (request.isActive != null) {
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
package kr.co.vividnext.sodalive.creator.admin.content
|
||||
|
||||
data class UpdateCreatorAdminContentRequest(
|
||||
val id: Long,
|
||||
val title: String?,
|
||||
val detail: String?,
|
||||
val isAdult: Boolean?,
|
||||
val isActive: Boolean?,
|
||||
val isCommentAvailable: Boolean?
|
||||
)
|
Loading…
Reference in New Issue