크리에이터 관리자 - 콘텐츠 변경 요청 데이터 변경

This commit is contained in:
Klaus 2023-08-23 21:38:04 +09:00
parent 307c09a4c1
commit f49203cafc
4 changed files with 55 additions and 10 deletions

View File

@ -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))
}
}

View File

@ -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"

View File

@ -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) {

View File

@ -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?
)