diff --git a/module-domain/src/main/kotlin/site/yourevents/invitation/port/in/InvitationUseCase.kt b/module-domain/src/main/kotlin/site/yourevents/invitation/port/in/InvitationUseCase.kt index 1531b76e..112bb407 100644 --- a/module-domain/src/main/kotlin/site/yourevents/invitation/port/in/InvitationUseCase.kt +++ b/module-domain/src/main/kotlin/site/yourevents/invitation/port/in/InvitationUseCase.kt @@ -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 diff --git a/module-domain/src/main/kotlin/site/yourevents/invitation/service/InvitationService.kt b/module-domain/src/main/kotlin/site/yourevents/invitation/service/InvitationService.kt index 31853016..b8d4d54d 100644 --- a/module-domain/src/main/kotlin/site/yourevents/invitation/service/InvitationService.kt +++ b/module-domain/src/main/kotlin/site/yourevents/invitation/service/InvitationService.kt @@ -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) diff --git a/module-domain/src/main/kotlin/site/yourevents/qr/port/in/QrCodeUseCase.kt b/module-domain/src/main/kotlin/site/yourevents/qr/port/in/QrCodeUseCase.kt index cb5150d2..91723212 100644 --- a/module-domain/src/main/kotlin/site/yourevents/qr/port/in/QrCodeUseCase.kt +++ b/module-domain/src/main/kotlin/site/yourevents/qr/port/in/QrCodeUseCase.kt @@ -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 } diff --git a/module-domain/src/main/kotlin/site/yourevents/qr/service/QrCodeService.kt b/module-domain/src/main/kotlin/site/yourevents/qr/service/QrCodeService.kt index ba07ffae..a8571355 100644 --- a/module-domain/src/main/kotlin/site/yourevents/qr/service/QrCodeService.kt +++ b/module-domain/src/main/kotlin/site/yourevents/qr/service/QrCodeService.kt @@ -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) } diff --git a/module-domain/src/main/kotlin/site/yourevents/s3/port/out/PreSignedUrlPort.kt b/module-domain/src/main/kotlin/site/yourevents/s3/port/out/PreSignedUrlPort.kt index ffa06e62..d0e5e81e 100644 --- a/module-domain/src/main/kotlin/site/yourevents/s3/port/out/PreSignedUrlPort.kt +++ b/module-domain/src/main/kotlin/site/yourevents/s3/port/out/PreSignedUrlPort.kt @@ -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 } diff --git a/module-infrastructure/s3/src/main/kotlin/site/yourevents/service/S3Service.kt b/module-infrastructure/s3/src/main/kotlin/site/yourevents/service/S3Service.kt index 2a45b1e2..aedf7e3d 100644 --- a/module-infrastructure/s3/src/main/kotlin/site/yourevents/service/S3Service.kt +++ b/module-infrastructure/s3/src/main/kotlin/site/yourevents/service/S3Service.kt @@ -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) @@ -50,7 +51,4 @@ class S3Service( expiration.time = expTimeMillis return expiration } - - private fun createPath(fileName: String): String = - String.format("%S", UUID.randomUUID().toString() + fileName) } diff --git a/module-infrastructure/security/src/main/kotlin/site/yourevents/SecurityConfig.kt b/module-infrastructure/security/src/main/kotlin/site/yourevents/SecurityConfig.kt index e1b937ff..b5e64cbb 100644 --- a/module-infrastructure/security/src/main/kotlin/site/yourevents/SecurityConfig.kt +++ b/module-infrastructure/security/src/main/kotlin/site/yourevents/SecurityConfig.kt @@ -39,7 +39,6 @@ class SecurityConfig( "/v3/**", "/health-check", "$actuatorEndPoint/**", - "/login" ) @Bean @@ -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) diff --git a/module-presentation/src/main/kotlin/site/yourevents/invitation/facade/InvitationFacade.kt b/module-presentation/src/main/kotlin/site/yourevents/invitation/facade/InvitationFacade.kt index 9fe5a117..16ecfc0e 100644 --- a/module-presentation/src/main/kotlin/site/yourevents/invitation/facade/InvitationFacade.kt +++ b/module-presentation/src/main/kotlin/site/yourevents/invitation/facade/InvitationFacade.kt @@ -32,15 +32,13 @@ 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, @@ -48,7 +46,7 @@ class InvitationFacade( remark = createInvitationRequest.remark ) - return invitation.id + return invitationUseCase.updateQrCode(invitation, invitationInfo.title).id } fun deleteInvitation( diff --git a/module-presentation/src/test/kotlin/site/yourevents/invitation/facade/InvitationFacadeTest.kt b/module-presentation/src/test/kotlin/site/yourevents/invitation/facade/InvitationFacadeTest.kt index c6ce0637..89004e98 100644 --- a/module-presentation/src/test/kotlin/site/yourevents/invitation/facade/InvitationFacadeTest.kt +++ b/module-presentation/src/test/kotlin/site/yourevents/invitation/facade/InvitationFacadeTest.kt @@ -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, @@ -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