test #327

Merged
klaus merged 13 commits from test into main 2025-07-14 11:07:58 +00:00
3 changed files with 29 additions and 0 deletions
Showing only changes of commit a8da17162a - Show all commits

View File

@ -70,6 +70,9 @@ dependencies {
implementation("org.apache.poi:poi-ooxml:5.2.3")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
// file mimetype check
implementation("org.apache.tika:tika-core:3.2.0")
developmentOnly("org.springframework.boot:spring-boot-devtools")
runtimeOnly("com.h2database:h2")
runtimeOnly("com.mysql:mysql-connector-j")

View File

@ -21,6 +21,7 @@ import kr.co.vividnext.sodalive.fcm.FcmEventType
import kr.co.vividnext.sodalive.member.Member
import kr.co.vividnext.sodalive.member.block.BlockMemberRepository
import kr.co.vividnext.sodalive.utils.generateFileName
import kr.co.vividnext.sodalive.utils.validateImage
import org.springframework.beans.factory.annotation.Value
import org.springframework.context.ApplicationEventPublisher
import org.springframework.data.repository.findByIdOrNull
@ -71,6 +72,8 @@ class CreatorCommunityService(
throw SodaException("오디오 등록을 위해서는 이미지가 필요합니다.")
}
postImage?.let { validateImage(it, request.price > 0) }
val post = CreatorCommunity(
content = request.content,
price = request.price,
@ -129,6 +132,8 @@ class CreatorCommunityService(
val post = repository.findByIdAndMemberId(id = request.creatorCommunityId, memberId = member.id!!)
?: throw SodaException("잘못된 요청입니다.")
postImage?.let { validateImage(it, post.price > 0) }
if (request.content != null) {
post.content = request.content
}

View File

@ -0,0 +1,21 @@
package kr.co.vividnext.sodalive.utils
import kr.co.vividnext.sodalive.common.SodaException
import org.apache.tika.Tika
import org.springframework.web.multipart.MultipartFile
/**
* 이미지 파일인지 확인하고,
* GIF의 경우 외부 조건(gifAllowed) 따라 허용 여부 판단
*/
fun validateImage(file: MultipartFile, gifAllowed: Boolean) {
val mimeType = Tika().detect(file.bytes)
if (!mimeType.startsWith("image/")) {
throw SodaException("이미지 파일만 업로드할 수 있습니다.")
}
if (mimeType == "image/gif" && !gifAllowed) {
throw SodaException("GIF 파일은 유료 게시물만 업로드 할 수 있습니다.")
}
}