콘텐츠 API 추가

This commit is contained in:
2023-08-03 20:36:37 +09:00
parent 5d6eb5da4f
commit 1fe5309fdc
55 changed files with 2740 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
package kr.co.vividnext.sodalive.content.donation
import kr.co.vividnext.sodalive.common.ApiResponse
import kr.co.vividnext.sodalive.common.SodaException
import kr.co.vividnext.sodalive.member.Member
import org.springframework.security.core.annotation.AuthenticationPrincipal
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
@RestController
@RequestMapping("/audio-content/donation")
class AudioContentDonationController(private val service: AudioContentDonationService) {
@PostMapping
fun donation(
@RequestBody request: AudioContentDonationRequest,
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
) = run {
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
ApiResponse.ok(service.donation(request = request, member = member))
}
}

View File

@@ -0,0 +1,8 @@
package kr.co.vividnext.sodalive.content.donation
data class AudioContentDonationRequest(
val contentId: Long,
val donationCan: Int,
val comment: String,
val container: String
)

View File

@@ -0,0 +1,43 @@
package kr.co.vividnext.sodalive.content.donation
import kr.co.vividnext.sodalive.can.payment.CanPaymentService
import kr.co.vividnext.sodalive.can.use.CanUsage
import kr.co.vividnext.sodalive.common.SodaException
import kr.co.vividnext.sodalive.content.AudioContentRepository
import kr.co.vividnext.sodalive.content.comment.AudioContentComment
import kr.co.vividnext.sodalive.content.comment.AudioContentCommentRepository
import kr.co.vividnext.sodalive.member.Member
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
@Service
class AudioContentDonationService(
private val coinPaymentService: CanPaymentService,
private val queryRepository: AudioContentRepository,
private val commentRepository: AudioContentCommentRepository
) {
@Transactional
fun donation(request: AudioContentDonationRequest, member: Member) {
if (request.donationCan < 1) throw SodaException("1캔 이상 후원하실 수 있습니다.")
if (request.comment.isBlank()) throw SodaException("함께 보낼 메시지를 입력하세요.")
val audioContent = queryRepository.findByIdAndActive(request.contentId)
?: throw SodaException("잘못된 콘텐츠 입니다.\n다시 시도해 주세요.")
coinPaymentService.spendCan(
memberId = member.id!!,
needCan = request.donationCan,
canUsage = CanUsage.DONATION,
audioContent = audioContent,
container = request.container
)
val audioContentComment = AudioContentComment(
comment = request.comment,
donationCan = request.donationCan
)
audioContentComment.audioContent = audioContent
audioContentComment.member = member
commentRepository.save(audioContentComment)
}
}