diff --git a/module-domain/src/main/kotlin/site/yourevents/guest/port/in/GuestUseCase.kt b/module-domain/src/main/kotlin/site/yourevents/guest/port/in/GuestUseCase.kt index 5d236674..b746cf6d 100644 --- a/module-domain/src/main/kotlin/site/yourevents/guest/port/in/GuestUseCase.kt +++ b/module-domain/src/main/kotlin/site/yourevents/guest/port/in/GuestUseCase.kt @@ -33,4 +33,6 @@ interface GuestUseCase { fun getNotAttendGuestsByInvitation(invitation: Invitation): List fun getInvitationAttendance(memberId: UUID, invitationId: UUID): Boolean? + + fun getOwnerNickname(invitationId: UUID, memberId: UUID): String } diff --git a/module-domain/src/main/kotlin/site/yourevents/guest/port/out/GuestPersistencePort.kt b/module-domain/src/main/kotlin/site/yourevents/guest/port/out/GuestPersistencePort.kt index 428995d1..52b0ff79 100644 --- a/module-domain/src/main/kotlin/site/yourevents/guest/port/out/GuestPersistencePort.kt +++ b/module-domain/src/main/kotlin/site/yourevents/guest/port/out/GuestPersistencePort.kt @@ -22,4 +22,6 @@ interface GuestPersistencePort { fun findNotAttendGuestsByInvitation(invitation: Invitation): List fun findAttendanceByMemberAndInvitation(memberId: UUID, invitationId: UUID): Boolean? + + fun findOwnerNickname(invitationId: UUID, memberId: UUID): String } diff --git a/module-domain/src/main/kotlin/site/yourevents/guest/service/GuestService.kt b/module-domain/src/main/kotlin/site/yourevents/guest/service/GuestService.kt index 494ac088..c6e72709 100644 --- a/module-domain/src/main/kotlin/site/yourevents/guest/service/GuestService.kt +++ b/module-domain/src/main/kotlin/site/yourevents/guest/service/GuestService.kt @@ -84,6 +84,9 @@ class GuestService( override fun getInvitationAttendance(memberId: UUID, invitationId: UUID): Boolean? = guestPersistencePort.findAttendanceByMemberAndInvitation(memberId, invitationId) + override fun getOwnerNickname(invitationId: UUID, memberId: UUID): String = + guestPersistencePort.findOwnerNickname(invitationId, memberId) + private fun updateAttendance(guestId: UUID, attendance: Boolean) { val guest = guestPersistencePort.findById(guestId) ?: throw GuestNotFoundException() diff --git a/module-domain/src/main/kotlin/site/yourevents/invitation/domain/Invitation.kt b/module-domain/src/main/kotlin/site/yourevents/invitation/domain/Invitation.kt index f92b4f6e..58b878c4 100644 --- a/module-domain/src/main/kotlin/site/yourevents/invitation/domain/Invitation.kt +++ b/module-domain/src/main/kotlin/site/yourevents/invitation/domain/Invitation.kt @@ -9,6 +9,7 @@ class Invitation( val id: UUID, val member: Member, var qrUrl: String, + var templateKey: String?, var deleted: Boolean, createdAt: LocalDateTime?, modifiedAt: LocalDateTime?, diff --git a/module-domain/src/main/kotlin/site/yourevents/invitation/domain/InvitationVO.kt b/module-domain/src/main/kotlin/site/yourevents/invitation/domain/InvitationVO.kt index da12520f..7bef9314 100644 --- a/module-domain/src/main/kotlin/site/yourevents/invitation/domain/InvitationVO.kt +++ b/module-domain/src/main/kotlin/site/yourevents/invitation/domain/InvitationVO.kt @@ -5,13 +5,20 @@ import site.yourevents.member.domain.Member data class InvitationVO( val member: Member, val qrUrl: String, + val templateKey: String?, val deleted: Boolean, ) { companion object { - fun of(member: Member, qrUrl: String, deleted: Boolean): InvitationVO = InvitationVO( - member = member, - qrUrl = qrUrl, - deleted = deleted + fun of( + member: Member, + qrUrl: String, + templateKey: String?, + deleted: Boolean): InvitationVO = + InvitationVO( + member = member, + qrUrl = qrUrl, + templateKey = templateKey, + deleted = deleted ) } } 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 cb19c6d1..1531b76e 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 @@ -9,7 +9,7 @@ interface InvitationUseCase { fun countByMember(member: Member): Int - fun createInvitation(memberId: UUID, qrUrl: String): Invitation + fun createInvitation(memberId: UUID, qrUrl: String, templateKey: String?): Invitation fun updateQrCode(invitationId: 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 45ddd5a9..31853016 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 @@ -22,15 +22,15 @@ class InvitationService( override fun countByMember(member: Member) = invitationPersistencePort.countByMember(member) - override fun createInvitation(memberId: UUID, qrUrl: String): Invitation { + override fun createInvitation(memberId: UUID, qrUrl: String, templateKey: String?): Invitation { val member = memberUseCase.findById(memberId) ?: throw MemberNotFountException() - return invitationPersistencePort.save( InvitationVO.of( member = member, qrUrl = qrUrl, + templateKey = templateKey, deleted = false ) ) diff --git a/module-domain/src/test/kotlin/site/yourevents/guest/domain/GuestTest.kt b/module-domain/src/test/kotlin/site/yourevents/guest/domain/GuestTest.kt index 866f49e7..5978aeb8 100644 --- a/module-domain/src/test/kotlin/site/yourevents/guest/domain/GuestTest.kt +++ b/module-domain/src/test/kotlin/site/yourevents/guest/domain/GuestTest.kt @@ -27,12 +27,14 @@ class GuestTest : DescribeSpec({ val invitationId = UUID.randomUUID() val qrUrl = "http://example.com" + val templateKey = "templateKey" val deleted = false val invitation = Invitation( id = invitationId, member = member, qrUrl = qrUrl, + templateKey = templateKey, deleted = deleted, createdAt = LocalDateTime.now(), modifiedAt = LocalDateTime.now() diff --git a/module-domain/src/test/kotlin/site/yourevents/guest/domain/GuestVOTest.kt b/module-domain/src/test/kotlin/site/yourevents/guest/domain/GuestVOTest.kt index f76d3fa5..fdbc20a3 100644 --- a/module-domain/src/test/kotlin/site/yourevents/guest/domain/GuestVOTest.kt +++ b/module-domain/src/test/kotlin/site/yourevents/guest/domain/GuestVOTest.kt @@ -26,12 +26,14 @@ class GuestVOTest : DescribeSpec({ val invitationId = UUID.randomUUID() val qrUrl = "http://example.com" + val templateKey = "templateKey" val deleted = false invitation = Invitation( id = invitationId, member = member, qrUrl = qrUrl, - deleted = false, + templateKey = templateKey, + deleted = deleted, createdAt = LocalDateTime.now(), modifiedAt = LocalDateTime.now() ) diff --git a/module-domain/src/test/kotlin/site/yourevents/guest/service/GuestServiceTest.kt b/module-domain/src/test/kotlin/site/yourevents/guest/service/GuestServiceTest.kt index 8a1405c0..2156825d 100644 --- a/module-domain/src/test/kotlin/site/yourevents/guest/service/GuestServiceTest.kt +++ b/module-domain/src/test/kotlin/site/yourevents/guest/service/GuestServiceTest.kt @@ -42,6 +42,7 @@ class GuestServiceTest : DescribeSpec({ id = invitationId, member = member, qrUrl = "https://qrUrl.com", + templateKey = null, deleted = false, createdAt = LocalDateTime.now(), modifiedAt = LocalDateTime.now() diff --git a/module-domain/src/test/kotlin/site/yourevents/invitation/domain/InvitationTest.kt b/module-domain/src/test/kotlin/site/yourevents/invitation/domain/InvitationTest.kt index 9b67db2f..4eba7248 100644 --- a/module-domain/src/test/kotlin/site/yourevents/invitation/domain/InvitationTest.kt +++ b/module-domain/src/test/kotlin/site/yourevents/invitation/domain/InvitationTest.kt @@ -26,11 +26,13 @@ class InvitationTest : DescribeSpec({ val invitationId = UUID.randomUUID() val qrUrl = "http://example.com" + val templateKey = "templateKey" val deleted = false val invitation = Invitation( id = invitationId, member = member, qrUrl = qrUrl, + templateKey = templateKey, deleted = deleted, createdAt = LocalDateTime.now(), modifiedAt = LocalDateTime.now() @@ -40,6 +42,7 @@ class InvitationTest : DescribeSpec({ id shouldBe invitationId member shouldBe member qrUrl shouldBe qrUrl + templateKey shouldBe templateKey } } } diff --git a/module-domain/src/test/kotlin/site/yourevents/invitation/domain/InvitationVOTest.kt b/module-domain/src/test/kotlin/site/yourevents/invitation/domain/InvitationVOTest.kt index 2dab06f2..4d6f1785 100644 --- a/module-domain/src/test/kotlin/site/yourevents/invitation/domain/InvitationVOTest.kt +++ b/module-domain/src/test/kotlin/site/yourevents/invitation/domain/InvitationVOTest.kt @@ -9,6 +9,7 @@ import java.util.UUID class InvitationVOTest : DescribeSpec({ lateinit var member: Member lateinit var qrUrl: String + lateinit var templateKey: String var deleted = false beforeTest { @@ -22,6 +23,7 @@ class InvitationVOTest : DescribeSpec({ modifiedAt = LocalDateTime.now() ) qrUrl = "http://example.com" + templateKey = "templateKey" deleted = false } @@ -31,6 +33,7 @@ class InvitationVOTest : DescribeSpec({ val invitationVO = InvitationVO( member = member, qrUrl = qrUrl, + templateKey = templateKey, deleted = deleted ) @@ -46,10 +49,16 @@ class InvitationVOTest : DescribeSpec({ val originalInvitationVO = InvitationVO( member = member, qrUrl = qrUrl, + templateKey = templateKey, deleted = deleted ) - val transformedInvitationVO = InvitationVO.of( originalInvitationVO.member, originalInvitationVO.qrUrl, originalInvitationVO.deleted) + val transformedInvitationVO = InvitationVO.of( + originalInvitationVO.member, + originalInvitationVO.qrUrl, + originalInvitationVO.templateKey, + originalInvitationVO.deleted + ) transformedInvitationVO.apply { member shouldBe originalInvitationVO.member diff --git a/module-domain/src/test/kotlin/site/yourevents/invitation/service/InvitationServiceTest.kt b/module-domain/src/test/kotlin/site/yourevents/invitation/service/InvitationServiceTest.kt index e156923b..f2dce4a7 100644 --- a/module-domain/src/test/kotlin/site/yourevents/invitation/service/InvitationServiceTest.kt +++ b/module-domain/src/test/kotlin/site/yourevents/invitation/service/InvitationServiceTest.kt @@ -26,6 +26,7 @@ class InvitationServiceTest : DescribeSpec({ lateinit var nickname: String lateinit var email: String lateinit var qrUrl: String + lateinit var templateKey: String lateinit var member: Member var deleted = false @@ -36,6 +37,7 @@ class InvitationServiceTest : DescribeSpec({ nickname = "seunghyun" email = "seunghyun@naver.com" qrUrl = "http://example.com" + templateKey = "templateKey" deleted = false member = Member( @@ -63,6 +65,7 @@ class InvitationServiceTest : DescribeSpec({ id = invitationId, member = member, qrUrl = qrUrl, + templateKey = templateKey, deleted = deleted, createdAt = LocalDateTime.now(), modifiedAt = LocalDateTime.now() @@ -101,13 +104,14 @@ class InvitationServiceTest : DescribeSpec({ id = invitationId, member = member, qrUrl = qrUrl, + templateKey = templateKey, deleted = deleted, createdAt = LocalDateTime.now(), modifiedAt = LocalDateTime.now() ) every { invitationPersistencePort.save(any()) } returns savedInvitation - val result = invitationService.createInvitation(memberId, qrUrl) + val result = invitationService.createInvitation(memberId, qrUrl, templateKey) result shouldBe savedInvitation @@ -127,6 +131,7 @@ class InvitationServiceTest : DescribeSpec({ id = invitationId, member = member, qrUrl = qrUrl, + templateKey = templateKey, deleted = deleted, createdAt = LocalDateTime.now(), modifiedAt = LocalDateTime.now() @@ -163,6 +168,7 @@ class InvitationServiceTest : DescribeSpec({ id = invitationId, member = member, qrUrl = qrUrl, + templateKey = templateKey, deleted = false, createdAt = LocalDateTime.now(), modifiedAt = LocalDateTime.now() diff --git a/module-domain/src/test/kotlin/site/yourevents/invitationinformation/domain/InvitationInformationTest.kt b/module-domain/src/test/kotlin/site/yourevents/invitationinformation/domain/InvitationInformationTest.kt index d8c5a542..84e4f922 100644 --- a/module-domain/src/test/kotlin/site/yourevents/invitationinformation/domain/InvitationInformationTest.kt +++ b/module-domain/src/test/kotlin/site/yourevents/invitationinformation/domain/InvitationInformationTest.kt @@ -23,6 +23,7 @@ class InvitationInformationTest : DescribeSpec({ id = UUID.randomUUID(), member = member, qrUrl = "http://example.com", + templateKey = "templateKey", deleted = false, createdAt = LocalDateTime.now(), modifiedAt = LocalDateTime.now() diff --git a/module-domain/src/test/kotlin/site/yourevents/invitationinformation/domain/InvitationInformationVOTest.kt b/module-domain/src/test/kotlin/site/yourevents/invitationinformation/domain/InvitationInformationVOTest.kt index e3370623..f3f733c3 100644 --- a/module-domain/src/test/kotlin/site/yourevents/invitationinformation/domain/InvitationInformationVOTest.kt +++ b/module-domain/src/test/kotlin/site/yourevents/invitationinformation/domain/InvitationInformationVOTest.kt @@ -28,6 +28,7 @@ class InvitationInformationVOTest : DescribeSpec({ id = UUID.randomUUID(), member = member, qrUrl = "http://example.com", + templateKey = null, deleted = false, createdAt = LocalDateTime.now(), modifiedAt = LocalDateTime.now() diff --git a/module-domain/src/test/kotlin/site/yourevents/invitationinformation/service/InvitationInformationServiceTest.kt b/module-domain/src/test/kotlin/site/yourevents/invitationinformation/service/InvitationInformationServiceTest.kt index 06c0c656..dd2be9bb 100644 --- a/module-domain/src/test/kotlin/site/yourevents/invitationinformation/service/InvitationInformationServiceTest.kt +++ b/module-domain/src/test/kotlin/site/yourevents/invitationinformation/service/InvitationInformationServiceTest.kt @@ -45,6 +45,7 @@ class InvitationInformationServiceTest : DescribeSpec({ id = invitationId, member = member, qrUrl = "http://example.com", + templateKey = null, deleted = false, createdAt = LocalDateTime.now(), modifiedAt = LocalDateTime.now() diff --git a/module-domain/src/test/kotlin/site/yourevents/invitationthumbnail/domain/InvitationThumbnailTest.kt b/module-domain/src/test/kotlin/site/yourevents/invitationthumbnail/domain/InvitationThumbnailTest.kt index ca657771..d4fe30a8 100644 --- a/module-domain/src/test/kotlin/site/yourevents/invitationthumbnail/domain/InvitationThumbnailTest.kt +++ b/module-domain/src/test/kotlin/site/yourevents/invitationthumbnail/domain/InvitationThumbnailTest.kt @@ -20,8 +20,17 @@ class InvitationThumbnailTest : DescribeSpec({ val invitationId = UUID.randomUUID() val qrUrl = "http://example.com" + val templateKey = null val deleted = false - val invitation = Invitation(invitationId, member, qrUrl, deleted, LocalDateTime.now(), LocalDateTime.now()) + val invitation = Invitation( + invitationId, + member, + qrUrl, + templateKey, + deleted, + LocalDateTime.now(), + LocalDateTime.now() + ) val thumbnailId = UUID.randomUUID() val url = "http://example.com/" diff --git a/module-domain/src/test/kotlin/site/yourevents/invitationthumbnail/domain/InvitationThumbnailVOTest.kt b/module-domain/src/test/kotlin/site/yourevents/invitationthumbnail/domain/InvitationThumbnailVOTest.kt index 799e3ae1..e64584fd 100644 --- a/module-domain/src/test/kotlin/site/yourevents/invitationthumbnail/domain/InvitationThumbnailVOTest.kt +++ b/module-domain/src/test/kotlin/site/yourevents/invitationthumbnail/domain/InvitationThumbnailVOTest.kt @@ -26,8 +26,17 @@ class InvitationThumbnailVOTest : DescribeSpec({ val invitationId = UUID.randomUUID() val qrUrl = "http://example.com" + val templateKey = null val deleted = false - invitation = Invitation(invitationId, member, qrUrl, deleted, LocalDateTime.now(), LocalDateTime.now()) + invitation = Invitation( + invitationId, + member, + qrUrl, + templateKey, + deleted, + LocalDateTime.now(), + LocalDateTime.now() + ) url = "http://example.com/" } diff --git a/module-domain/src/test/kotlin/site/yourevents/invitationthumbnail/service/InvitationThumbnailServiceTest.kt b/module-domain/src/test/kotlin/site/yourevents/invitationthumbnail/service/InvitationThumbnailServiceTest.kt index 97aa1c19..af11c24f 100644 --- a/module-domain/src/test/kotlin/site/yourevents/invitationthumbnail/service/InvitationThumbnailServiceTest.kt +++ b/module-domain/src/test/kotlin/site/yourevents/invitationthumbnail/service/InvitationThumbnailServiceTest.kt @@ -40,6 +40,7 @@ class InvitationThumbnailServiceTest : DescribeSpec({ id = invitationId, member = member, qrUrl = "http://example.com", + templateKey = null, deleted = false, createdAt = LocalDateTime.now(), modifiedAt = LocalDateTime.now() diff --git a/module-infrastructure/persistence-db/src/main/kotlin/site/yourevents/guest/repository/GuestJPARepository.kt b/module-infrastructure/persistence-db/src/main/kotlin/site/yourevents/guest/repository/GuestJPARepository.kt index c975cb00..035a5005 100644 --- a/module-infrastructure/persistence-db/src/main/kotlin/site/yourevents/guest/repository/GuestJPARepository.kt +++ b/module-infrastructure/persistence-db/src/main/kotlin/site/yourevents/guest/repository/GuestJPARepository.kt @@ -19,11 +19,11 @@ interface GuestJPARepository : JpaRepository { @Query( "SELECT DISTINCT i " + - "FROM guest g " + - "JOIN g.invitation i " + - "WHERE g.member = :memberEntity " + - "AND i.member <> :memberEntity " + - "AND i.deleted = false" + "FROM guest g " + + "JOIN g.invitation i " + + "WHERE g.member = :memberEntity " + + "AND i.member <> :memberEntity " + + "AND i.deleted = false" ) fun getReceivedInvitations(memberEntity: MemberEntity): List @@ -46,4 +46,10 @@ interface GuestJPARepository : JpaRepository { "WHERE g.member.id = :memberId " + "AND g.invitation.id = :invitationId") fun findAttendanceByMemberIdAndInvitationId(memberId: UUID, invitationId: UUID): Boolean? + + @Query("SELECT g.nickname " + + "FROM guest g " + + "WHERE g.member.id = :memberId " + + "AND g.invitation.id = :invitationId") + fun findOwnerNickname(invitationId: UUID, memberId: UUID): String } diff --git a/module-infrastructure/persistence-db/src/main/kotlin/site/yourevents/guest/repository/GuestRepository.kt b/module-infrastructure/persistence-db/src/main/kotlin/site/yourevents/guest/repository/GuestRepository.kt index 9fc8db57..474555d4 100644 --- a/module-infrastructure/persistence-db/src/main/kotlin/site/yourevents/guest/repository/GuestRepository.kt +++ b/module-infrastructure/persistence-db/src/main/kotlin/site/yourevents/guest/repository/GuestRepository.kt @@ -49,4 +49,7 @@ class GuestRepository( override fun findAttendanceByMemberAndInvitation(memberId: UUID, invitationId: UUID): Boolean? { return guestJPARepository.findAttendanceByMemberIdAndInvitationId(memberId, invitationId) } + + override fun findOwnerNickname(invitationId: UUID, memberId: UUID): String = + guestJPARepository.findOwnerNickname(invitationId, memberId) } diff --git a/module-infrastructure/persistence-db/src/main/kotlin/site/yourevents/invitation/entity/InvitationEntity.kt b/module-infrastructure/persistence-db/src/main/kotlin/site/yourevents/invitation/entity/InvitationEntity.kt index c119af14..a3f0e86a 100644 --- a/module-infrastructure/persistence-db/src/main/kotlin/site/yourevents/invitation/entity/InvitationEntity.kt +++ b/module-infrastructure/persistence-db/src/main/kotlin/site/yourevents/invitation/entity/InvitationEntity.kt @@ -26,6 +26,9 @@ class InvitationEntity( @Column val qrUrl: String, + @Column + val templateKey: String?, + @Column val deleted: Boolean, ) : BaseTimeEntity() { @@ -33,6 +36,7 @@ class InvitationEntity( id = id!!, member = member.toDomain(), qrUrl = qrUrl, + templateKey = templateKey, deleted = deleted, createdAt = createdAt, modifiedAt = modifiedAt @@ -43,12 +47,14 @@ class InvitationEntity( id = invitation.id, member = MemberEntity.from(invitation.member), qrUrl = invitation.qrUrl, + templateKey = invitation.templateKey, deleted = invitation.deleted ) fun from(invitationVO: InvitationVO): InvitationEntity = InvitationEntity( member = MemberEntity.from(invitationVO.member), qrUrl = invitationVO.qrUrl, + templateKey = invitationVO.templateKey, deleted = invitationVO.deleted ) } diff --git a/module-infrastructure/persistence-db/src/test/kotlin/site/yourevents/guest/repository/GuestRepositoryTest.kt b/module-infrastructure/persistence-db/src/test/kotlin/site/yourevents/guest/repository/GuestRepositoryTest.kt index 63ab3357..324efc8a 100644 --- a/module-infrastructure/persistence-db/src/test/kotlin/site/yourevents/guest/repository/GuestRepositoryTest.kt +++ b/module-infrastructure/persistence-db/src/test/kotlin/site/yourevents/guest/repository/GuestRepositoryTest.kt @@ -41,6 +41,7 @@ class GuestRepositoryTest( invitationEntity = InvitationEntity( member = memberEntity, qrUrl = "http://example.com", + templateKey = null, deleted = false ) invitationJPARepository.save(invitationEntity) diff --git a/module-infrastructure/persistence-db/src/test/kotlin/site/yourevents/invitation/repository/InvitationRepositoryTest.kt b/module-infrastructure/persistence-db/src/test/kotlin/site/yourevents/invitation/repository/InvitationRepositoryTest.kt index 5f7c35ad..0461557d 100644 --- a/module-infrastructure/persistence-db/src/test/kotlin/site/yourevents/invitation/repository/InvitationRepositoryTest.kt +++ b/module-infrastructure/persistence-db/src/test/kotlin/site/yourevents/invitation/repository/InvitationRepositoryTest.kt @@ -26,6 +26,7 @@ class InvitationRepositoryTest( lateinit var memberEntity: MemberEntity lateinit var invitationId: UUID val qrUrl = "http://example.com" + val templateKey = null val deleted = false beforeSpec { @@ -43,6 +44,7 @@ class InvitationRepositoryTest( val invitationEntity = InvitationEntity( member = memberEntity, qrUrl = qrUrl, + templateKey = templateKey, deleted = deleted ) invitationJPARepository.save(invitationEntity) @@ -64,6 +66,7 @@ class InvitationRepositoryTest( id shouldBe invitationId member shouldBe invitation.member qrUrl shouldBe invitation.qrUrl + templateKey shouldBe invitation.templateKey deleted shouldBe invitation.deleted } } diff --git a/module-infrastructure/persistence-db/src/test/kotlin/site/yourevents/invitationinformation/repository/InvitationInformationRepositoryTest.kt b/module-infrastructure/persistence-db/src/test/kotlin/site/yourevents/invitationinformation/repository/InvitationInformationRepositoryTest.kt index a6f0dc8d..d656b8f8 100644 --- a/module-infrastructure/persistence-db/src/test/kotlin/site/yourevents/invitationinformation/repository/InvitationInformationRepositoryTest.kt +++ b/module-infrastructure/persistence-db/src/test/kotlin/site/yourevents/invitationinformation/repository/InvitationInformationRepositoryTest.kt @@ -43,6 +43,7 @@ class InvitationInformationRepositoryTest( invitationEntity = InvitationEntity( member = memberEntity, qrUrl = "http://example.com", + templateKey = null, deleted = false ) invitationJPARepository.save(invitationEntity) @@ -72,6 +73,7 @@ class InvitationInformationRepositoryTest( savedInfo.remark shouldBe invitationInformationVO.remark savedInfo.invitation.id shouldBe invitationEntity.id savedInfo.invitation.qrUrl shouldBe invitationEntity.qrUrl + savedInfo.invitation.templateKey shouldBe invitationEntity.templateKey savedInfo.invitation.deleted shouldBe invitationEntity.deleted savedInfo.invitation.member.socialId shouldBe memberEntity.toDomain().socialId savedInfo.invitation.member.nickname shouldBe memberEntity.toDomain().nickname diff --git a/module-infrastructure/persistence-db/src/test/kotlin/site/yourevents/invitationthumbnail/repository/InvitationThumbnailRepositoryTest.kt b/module-infrastructure/persistence-db/src/test/kotlin/site/yourevents/invitationthumbnail/repository/InvitationThumbnailRepositoryTest.kt index b7e23c1f..1000f9b3 100644 --- a/module-infrastructure/persistence-db/src/test/kotlin/site/yourevents/invitationthumbnail/repository/InvitationThumbnailRepositoryTest.kt +++ b/module-infrastructure/persistence-db/src/test/kotlin/site/yourevents/invitationthumbnail/repository/InvitationThumbnailRepositoryTest.kt @@ -44,6 +44,7 @@ class InvitationThumbnailRepositoryTest( invitationEntity = InvitationEntity( member = memberEntity, qrUrl = "http://example.com", + templateKey = null, deleted = false ) invitationJPARepository.save(invitationEntity) diff --git a/module-presentation/src/main/kotlin/site/yourevents/invitation/api/InvitationApi.kt b/module-presentation/src/main/kotlin/site/yourevents/invitation/api/InvitationApi.kt index f56fa74d..781ab4d9 100644 --- a/module-presentation/src/main/kotlin/site/yourevents/invitation/api/InvitationApi.kt +++ b/module-presentation/src/main/kotlin/site/yourevents/invitation/api/InvitationApi.kt @@ -22,7 +22,7 @@ interface InvitationApi { fun createInvitation( @RequestBody createInvitationRequest: CreateInvitationRequest, @AuthenticationPrincipal authDetails: AuthDetails, - ): ApiResponse + ): ApiResponse @Operation(summary = "초대장 QR 코드 조회") @GetMapping("/qr") diff --git a/module-presentation/src/main/kotlin/site/yourevents/invitation/api/InvitationController.kt b/module-presentation/src/main/kotlin/site/yourevents/invitation/api/InvitationController.kt index 23e1a1a0..637395bb 100644 --- a/module-presentation/src/main/kotlin/site/yourevents/invitation/api/InvitationController.kt +++ b/module-presentation/src/main/kotlin/site/yourevents/invitation/api/InvitationController.kt @@ -21,7 +21,7 @@ class InvitationController( override fun createInvitation( @RequestBody createInvitationRequest: CreateInvitationRequest, @AuthenticationPrincipal authDetails: AuthDetails, - ): ApiResponse = ApiResponse.success( + ): ApiResponse = ApiResponse.success( SuccessCode.REQUEST_OK, invitationFacade.createInvitation(createInvitationRequest, authDetails) ) diff --git a/module-presentation/src/main/kotlin/site/yourevents/invitation/dto/request/CreateInvitationRequest.kt b/module-presentation/src/main/kotlin/site/yourevents/invitation/dto/request/CreateInvitationRequest.kt index fb89d005..69befe32 100644 --- a/module-presentation/src/main/kotlin/site/yourevents/invitation/dto/request/CreateInvitationRequest.kt +++ b/module-presentation/src/main/kotlin/site/yourevents/invitation/dto/request/CreateInvitationRequest.kt @@ -4,6 +4,7 @@ import java.time.LocalDateTime data class CreateInvitationRequest( val ownerNickname: String, + val templateKey: String?, val thumbnailUrl: String, val title: String, val schedule: LocalDateTime, diff --git a/module-presentation/src/main/kotlin/site/yourevents/invitation/dto/response/CreateInvitationResponse.kt b/module-presentation/src/main/kotlin/site/yourevents/invitation/dto/response/CreateInvitationResponse.kt deleted file mode 100644 index b3dc7284..00000000 --- a/module-presentation/src/main/kotlin/site/yourevents/invitation/dto/response/CreateInvitationResponse.kt +++ /dev/null @@ -1,90 +0,0 @@ -package site.yourevents.invitation.dto.response - -import site.yourevents.guest.domain.Guest -import site.yourevents.invitation.domain.Invitation -import site.yourevents.invitationinformation.domain.InvitationInformation -import site.yourevents.invitationthumnail.domain.InvitationThumbnail -import java.time.LocalDateTime -import java.util.UUID - -data class CreateInvitationResponse( - val invitation: InvitationResponseDto, - val owner: OwnerResponseDto, - val invitationThumbnail: InvitationThumbnailResponseDto, - val invitationInformation: InvitationInformationResponseDto, -) { - data class InvitationResponseDto( - val invitationId: UUID, - val memberId: UUID, - val qrUrl: String, - val deleted: Boolean, - ) - - data class OwnerResponseDto( - val ownerId: UUID, - val invitationId: UUID, - val ownerNickname: String, - val attendance: Boolean = true, - ) - - data class InvitationThumbnailResponseDto( - val thumbnailId: UUID, - val invitationId: UUID, - val thumbnailUrl: String, - ) - - data class InvitationInformationResponseDto( - val informationId: UUID, - val invitationId: UUID, - val title: String, - val schedule: LocalDateTime, - val location: String, - val remark: String, - ) - - companion object { - fun of( - invitation: Invitation, - owner: Guest, - invitationThumbnail: InvitationThumbnail, - invitationInformation: InvitationInformation, - ): CreateInvitationResponse { - - val invitationResponse = InvitationResponseDto( - invitationId = invitation.id, - memberId = invitation.member.id, - qrUrl = invitation.qrUrl, - deleted = invitation.deleted - ) - - val ownerResponse = OwnerResponseDto( - ownerId = owner.id, - invitationId = owner.invitation.id, - ownerNickname = owner.nickname, - attendance = owner.attendance - ) - - val thumbnailResponse = InvitationThumbnailResponseDto( - thumbnailId = invitationThumbnail.id, - invitationId = invitationThumbnail.invitation.id, - thumbnailUrl = invitationThumbnail.url - ) - - val informationResponse = InvitationInformationResponseDto( - informationId = invitationInformation.id, - invitationId = invitationInformation.invitation.id, - title = invitationInformation.title, - schedule = invitationInformation.schedule, - location = invitationInformation.location, - remark = invitationInformation.remark - ) - - return CreateInvitationResponse( - invitation = invitationResponse, - owner = ownerResponse, - invitationThumbnail = thumbnailResponse, - invitationInformation = informationResponse - ) - } - } -} diff --git a/module-presentation/src/main/kotlin/site/yourevents/invitation/dto/response/InvitationInfoResponse.kt b/module-presentation/src/main/kotlin/site/yourevents/invitation/dto/response/InvitationInfoResponse.kt index 69825840..d692547f 100644 --- a/module-presentation/src/main/kotlin/site/yourevents/invitation/dto/response/InvitationInfoResponse.kt +++ b/module-presentation/src/main/kotlin/site/yourevents/invitation/dto/response/InvitationInfoResponse.kt @@ -8,7 +8,9 @@ import java.util.UUID data class InvitationInfoResponse( val invitationId: UUID, + val templateKey: String?, val createDate: LocalDateTime?, + val ownerNickname: String, val title: String, val schedule: LocalDateTime, val location: String, @@ -19,11 +21,14 @@ data class InvitationInfoResponse( companion object { fun of( invitation: Invitation, + ownerNickname: String, invitationInformation: InvitationInformation, invitationThumbnail: InvitationThumbnail, ): InvitationInfoResponse = InvitationInfoResponse( invitation.id, + invitation.templateKey, invitation.createdAt, + ownerNickname, invitationInformation.title, invitationInformation.schedule, invitationInformation.location, 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 2f9a6f73..a2ad1f5f 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 @@ -26,16 +26,18 @@ class InvitationFacade( fun createInvitation( createInvitationRequest: CreateInvitationRequest, authDetails: AuthDetails, - ): CreateInvitationResponse { + ): UUID { val memberId = authDetails.uuid - val invitation = invitationUseCase.updateQrCode(generateInvitation(memberId).id) + val invitation = invitationUseCase.updateQrCode( + generateInvitation(memberId, createInvitationRequest.templateKey).id + ) - val owner = generateOwner(memberId, invitation.id, createInvitationRequest.ownerNickname) + generateOwner(memberId, invitation.id, createInvitationRequest.ownerNickname) - val invitationThumbnail = generateInvitationThumbnail(invitation.id, createInvitationRequest.thumbnailUrl) + generateInvitationThumbnail(invitation.id, createInvitationRequest.thumbnailUrl) - val invitationInformation = generateInvitationInformation( + generateInvitationInformation( invitation.id, title = createInvitationRequest.title, schedule = createInvitationRequest.schedule, @@ -43,7 +45,7 @@ class InvitationFacade( remark = createInvitationRequest.remark ) - return CreateInvitationResponse.of(invitation, owner, invitationThumbnail, invitationInformation) + return invitation.id } fun deleteInvitation( @@ -62,12 +64,15 @@ class InvitationFacade( fun getInvitation(invitationId: UUID): InvitationInfoResponse { val invitation = invitationUseCase.findById(invitationId) + val ownerNickname = guestUseCase.getOwnerNickname(invitationId, invitation.member.id) + val invitationInformation = invitationInformationUseCase.findByInvitation(invitation) val invitationThumbnail = invitationThumbnailUseCase.findByInvitation(invitation) return InvitationInfoResponse.of( invitation, + ownerNickname, invitationInformation, invitationThumbnail ) @@ -87,8 +92,7 @@ class InvitationFacade( ) } - fun getInvitationAttendance(invitationId: UUID, authDetails: AuthDetails): InvitationAttendanceResponse - { + fun getInvitationAttendance(invitationId: UUID, authDetails: AuthDetails): InvitationAttendanceResponse { val memberId = authDetails.uuid val invitationAttendance = guestUseCase.getInvitationAttendance(memberId, invitationId) @@ -98,12 +102,12 @@ class InvitationFacade( attendance = invitationAttendance ) } - + fun verifySender(invitationId: UUID, authDetails: AuthDetails) = invitationUseCase.getOwnerId(invitationId) == authDetails.uuid - private fun generateInvitation(memberId: UUID) = - invitationUseCase.createInvitation(memberId, null.toString()) + private fun generateInvitation(memberId: UUID, templateKey: String?) = + invitationUseCase.createInvitation(memberId, null.toString(), templateKey) private fun generateOwner(memberId: UUID, invitationId: UUID, ownerNickname: String) = guestUseCase.createGuest( @@ -123,12 +127,12 @@ class InvitationFacade( title: String, schedule: LocalDateTime, location: String, - remark: String + remark: String, ) = invitationInformationUseCase.createInvitationInformation( - invitationId = invitationId, - title = title, - schedule = schedule, - location = location, - remark = remark - ) + invitationId = invitationId, + title = title, + schedule = schedule, + location = location, + remark = remark + ) } diff --git a/module-presentation/src/main/kotlin/site/yourevents/memeber/facade/MemberFacade.kt b/module-presentation/src/main/kotlin/site/yourevents/memeber/facade/MemberFacade.kt index cfe76917..6aeb5757 100644 --- a/module-presentation/src/main/kotlin/site/yourevents/memeber/facade/MemberFacade.kt +++ b/module-presentation/src/main/kotlin/site/yourevents/memeber/facade/MemberFacade.kt @@ -68,10 +68,13 @@ class MemberFacade( private fun createInvitationInfoResponse(invitation: Invitation): InvitationInfoResponse { val invitationInfo = invitationInformationUseCase.findByInvitation(invitation) + val ownerNickname = guestUseCase.getOwnerNickname(invitation.id, invitation.member.id) + val invitationThumbnail = invitationThumbnailUseCase.findByInvitation(invitation) return InvitationInfoResponse.of( invitation, + ownerNickname, invitationInfo, invitationThumbnail ) 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 36083958..a7076b92 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 @@ -7,7 +7,6 @@ import site.yourevents.guest.domain.Guest import site.yourevents.guest.port.`in`.GuestUseCase import site.yourevents.invitation.domain.Invitation import site.yourevents.invitation.dto.request.CreateInvitationRequest -import site.yourevents.invitation.dto.response.CreateInvitationResponse import site.yourevents.invitation.dto.response.InvitationGuestResponse import site.yourevents.invitation.dto.response.InvitationInfoResponse import site.yourevents.invitation.port.`in`.InvitationUseCase @@ -46,6 +45,7 @@ class InvitationFacadeTest : DescribeSpec({ val createInvitationRequest = CreateInvitationRequest( ownerNickname = "nickname", + templateKey = "templateKey", thumbnailUrl = "http://example.com/", title = "title", schedule = LocalDateTime.now(), @@ -66,6 +66,7 @@ class InvitationFacadeTest : DescribeSpec({ id = invitationId, member = Member(memberId, "6316", "nickname", "email", LocalDateTime.now(), LocalDateTime.now()), qrUrl = null.toString(), + templateKey = "templateKey", deleted = false, createdAt = LocalDateTime.now(), modifiedAt = LocalDateTime.now() @@ -83,6 +84,8 @@ class InvitationFacadeTest : DescribeSpec({ modifiedAt = LocalDateTime.now() ) + val ownerNickname = "nickname" + val invitationThumbnail = InvitationThumbnail( id = thumbnailId, invitation = invitation, @@ -109,7 +112,7 @@ class InvitationFacadeTest : DescribeSpec({ context("createInvitation 메서드가 호출되었을 때") { it("초대장을 생성하고 CreateInvitationResponse를 반환해야 한다") { every { - invitationUseCase.createInvitation(any(), any()) + invitationUseCase.createInvitation(any(), any(), any()) } answers { invitationUseCase.updateQrCode(invitation.id) invitation @@ -128,14 +131,7 @@ class InvitationFacadeTest : DescribeSpec({ val response = invitationFacade.createInvitation(createInvitationRequest, authDetails) - response.shouldBe( - CreateInvitationResponse.of( - invitation = invitation, - owner = guest, - invitationThumbnail = invitationThumbnail, - invitationInformation = invitationInformation - ) - ) + response.shouldBe(invitation.id) } } @@ -156,6 +152,7 @@ class InvitationFacadeTest : DescribeSpec({ context("getInvitation 메서드가 호출되었을 때") { it("존재하는 초대장 정보를 반환해야 한다") { every { invitationUseCase.findById(invitationId) } returns invitation + every { guestUseCase.getOwnerNickname(invitationId, invitation.member.id) } returns ownerNickname every { invitationInformationUseCase.findByInvitation(invitation) } returns invitationInformation every { invitationThumbnailUseCase.findByInvitation(invitation) } returns invitationThumbnail @@ -164,6 +161,7 @@ class InvitationFacadeTest : DescribeSpec({ response.shouldBe( InvitationInfoResponse.of( invitation = invitation, + ownerNickname = ownerNickname, invitationInformation = invitationInformation, invitationThumbnail = invitationThumbnail ) diff --git a/module-presentation/src/test/kotlin/site/yourevents/member/facade/MemberFacadeTest.kt b/module-presentation/src/test/kotlin/site/yourevents/member/facade/MemberFacadeTest.kt index 1216c949..37d5d9d0 100644 --- a/module-presentation/src/test/kotlin/site/yourevents/member/facade/MemberFacadeTest.kt +++ b/module-presentation/src/test/kotlin/site/yourevents/member/facade/MemberFacadeTest.kt @@ -76,10 +76,14 @@ class MemberFacadeTest : DescribeSpec({ UUID.randomUUID(), member, "https://sent.qr.com", + "templateKey", false, LocalDateTime.now(), LocalDateTime.now() ) + + val ownerNickname = "ownerNickname" + val invitationInfo = InvitationInformation( UUID.randomUUID(), invitation, @@ -101,6 +105,7 @@ class MemberFacadeTest : DescribeSpec({ val expectedResponse = listOf( InvitationInfoResponse.of( invitation, + ownerNickname, invitationInfo, invitationThumbnail ) @@ -108,6 +113,7 @@ class MemberFacadeTest : DescribeSpec({ every { memberUseCase.findById(authDetails.uuid) } returns member every { invitationUseCase.findByMember(member) } returns listOf(invitation) + every { guestUseCase.getOwnerNickname(invitation.id, invitation.member.id) } returns ownerNickname every { invitationInformationUseCase.findByInvitation(invitation) } returns invitationInfo every { invitationThumbnailUseCase.findByInvitation(invitation) } returns invitationThumbnail @@ -123,10 +129,12 @@ class MemberFacadeTest : DescribeSpec({ UUID.randomUUID(), member, "https://received.qr.com", + "templateKey", false, LocalDateTime.now(), LocalDateTime.now() ) + val ownerNickname = "ownerNickname" val invitationInfo = InvitationInformation( UUID.randomUUID(), invitation, @@ -147,6 +155,7 @@ class MemberFacadeTest : DescribeSpec({ val expectedResponse = listOf( InvitationInfoResponse.of( invitation, + ownerNickname, invitationInfo, invitationThumbnail ) @@ -154,6 +163,7 @@ class MemberFacadeTest : DescribeSpec({ every { memberUseCase.findById(authDetails.uuid) } returns member every { guestUseCase.getReceivedInvitations(member) } returns listOf(invitation) + every { guestUseCase.getOwnerNickname(invitation.id, invitation.member.id) } returns ownerNickname every { invitationInformationUseCase.findByInvitation(invitation) } returns invitationInfo every { invitationThumbnailUseCase.findByInvitation(invitation) } returns invitationThumbnail