Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ interface InvitationUseCase {

fun createInvitation(memberId: UUID, qrUrl: String, templateKey: String?): Invitation

fun updateQrCode(invitationId: UUID): Invitation
fun updateQrCode(invitation: Invitation, invitationTitle: String): Invitation

fun findById(id: UUID): Invitation

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,10 @@ class InvitationService(
)
}

override fun updateQrCode(invitationId: UUID): Invitation {
val invitation = findById(invitationId)

val qrCode = qrCodeUseCase.generateQrCode(invitationId)
override fun updateQrCode(invitation: Invitation, invitationTitle: String): Invitation {
val qrCode = qrCodeUseCase.generateQrCode(invitation.id)

val qrUrl = qrCodeUseCase.uploadQrCode(invitationId.toString(), qrCode)
val qrUrl = qrCodeUseCase.uploadQrCode(invitation.id, invitationTitle, qrCode)

invitation.updateQrCode(qrUrl)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ import java.util.UUID
interface QrCodeUseCase {
fun generateQrCode(invitationId: UUID): ByteArray

fun uploadQrCode(imageName: String, qrCodeBytes: ByteArray): String
fun uploadQrCode(invitationId: UUID, invitationTitle: String, qrCodeBytes: ByteArray): String
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ class QrCodeService(
override fun generateQrCode(invitationId: UUID): ByteArray =
qrCodePort.generate(invitationId)

override fun uploadQrCode(imageName: String, qrCodeBytes: ByteArray): String =
preSignedPort.uploadQrCode(imageName, qrCodeBytes)
override fun uploadQrCode(invitationId: UUID, invitationTitle: String, qrCodeBytes: ByteArray): String =
preSignedPort.uploadQrCode(invitationId, invitationTitle, qrCodeBytes)
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package site.yourevents.s3.port.out

import java.util.UUID

interface PreSignedUrlPort {
fun uploadQrCode(imageName: String, qrCodeBytes: ByteArray): String
fun uploadQrCode(invitationId: UUID, invitationTitle: String, qrCodeBytes: ByteArray): String

fun getPreSignedUrl(imageName: String): String
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,20 +19,21 @@ class S3Service(
private val bucketName: String,
) : PreSignedUrlPort {

override fun uploadQrCode(imageName: String, qrCodeBytes: ByteArray): String {
override fun uploadQrCode(invitationId: UUID, invitationTitle: String, qrCodeBytes: ByteArray): String {
val path = "qr/$invitationId/$invitationTitle"
val inputStream = qrCodeBytes.inputStream()
val metadata = ObjectMetadata().apply {
this.contentType = "image/png"
this.contentLength = qrCodeBytes.size.toLong()
this.contentDisposition = "attachment; filename=\"$imageName.png\""
this.contentDisposition = "attachment; filename=\"$invitationTitle.png\""
}

amazonS3.putObject(bucketName, imageName, inputStream, metadata)
return amazonS3.getUrl(bucketName, imageName).toString()
amazonS3.putObject(bucketName, path, inputStream, metadata)
return amazonS3.getUrl(bucketName, path).toString()
}

override fun getPreSignedUrl(imageName: String): String {
val fileName = createPath(imageName)
val fileName = String.format("thumbnail/%S", UUID.randomUUID().toString() + imageName)
val getGeneratePresignedUrlRequest = getGeneratePreSignedUrlRequest(bucketName, fileName)
val preSignedUrl: URL = amazonS3.generatePresignedUrl(getGeneratePresignedUrlRequest)

Expand All @@ -50,7 +51,4 @@ class S3Service(
expiration.time = expTimeMillis
return expiration
}

private fun createPath(fileName: String): String =
String.format("%S", UUID.randomUUID().toString() + fileName)
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ class SecurityConfig(
"/v3/**",
"/health-check",
"$actuatorEndPoint/**",
"/login"
)

@Bean
Expand All @@ -48,6 +47,10 @@ class SecurityConfig(
authorizeHttpRequests {
whiteList.forEach { authorize(it, permitAll) }

// login
authorize(HttpMethod.POST, "/login", permitAll)
authorize("/login", denyAll)

// presigned url
authorize("/presignedurl", authenticated)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,23 +32,21 @@ class InvitationFacade(
): UUID {
val memberId = authDetails.uuid

val invitation = invitationUseCase.updateQrCode(
generateInvitation(memberId, createInvitationRequest.templateKey).id
)
val invitation = generateInvitation(memberId, createInvitationRequest.templateKey)

generateOwner(memberId, invitation.id, createInvitationRequest.ownerNickname)

generateInvitationThumbnail(invitation.id, createInvitationRequest.thumbnailUrl)

generateInvitationInformation(
val invitationInfo = generateInvitationInformation(
invitation.id,
title = createInvitationRequest.title,
schedule = createInvitationRequest.schedule,
location = createInvitationRequest.location,
remark = createInvitationRequest.remark
)

return invitation.id
return invitationUseCase.updateQrCode(invitation, invitationInfo.title).id
}

fun deleteInvitation(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ class InvitationFacadeTest : DescribeSpec({
modifiedAt = LocalDateTime.now()
)

every { invitationUseCase.updateQrCode(any()) } returns invitation
every { invitationUseCase.updateQrCode(any(), any()) } returns invitation

val guest = Guest(
id = ownerId,
Expand Down Expand Up @@ -114,7 +114,7 @@ class InvitationFacadeTest : DescribeSpec({
every {
invitationUseCase.createInvitation(any(), any(), any())
} answers {
invitationUseCase.updateQrCode(invitation.id)
invitationUseCase.updateQrCode(invitation, invitationInformation.title)
invitation
}
every { guestUseCase.createGuest(any(), any(), any()) } returns guest
Expand Down