From 59758e3a4e5bc009c08e5033a201678b187fbbdf Mon Sep 17 00:00:00 2001 From: uuuuuuuk Date: Fri, 15 Mar 2024 09:02:07 +0900 Subject: [PATCH 01/14] =?UTF-8?q?:fire:=20BaseIdxEntity=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../andreas311/miso/common/entitiy/BaseIdxEntity.kt | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 src/main/kotlin/andreas311/miso/common/entitiy/BaseIdxEntity.kt diff --git a/src/main/kotlin/andreas311/miso/common/entitiy/BaseIdxEntity.kt b/src/main/kotlin/andreas311/miso/common/entitiy/BaseIdxEntity.kt deleted file mode 100644 index 81253e17..00000000 --- a/src/main/kotlin/andreas311/miso/common/entitiy/BaseIdxEntity.kt +++ /dev/null @@ -1,13 +0,0 @@ -package andreas311.miso.common.entitiy - -import javax.persistence.GeneratedValue -import javax.persistence.GenerationType -import javax.persistence.Id -import javax.persistence.MappedSuperclass - -@MappedSuperclass -abstract class BaseIdxEntity( - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - val idx: Long -) \ No newline at end of file From 6f0c77c912106a88cc54e56d10be06b90e199e57 Mon Sep 17 00:00:00 2001 From: uuuuuuuk Date: Fri, 15 Mar 2024 09:02:40 +0900 Subject: [PATCH 02/14] =?UTF-8?q?:memo:=20Email=20=EC=97=90=20updateAuthen?= =?UTF-8?q?tication=20=ED=95=A8=EC=88=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/andreas311/miso/domain/email/domain/Email.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/andreas311/miso/domain/email/domain/Email.kt b/src/main/kotlin/andreas311/miso/domain/email/domain/Email.kt index 98b8d312..c3314c6f 100644 --- a/src/main/kotlin/andreas311/miso/domain/email/domain/Email.kt +++ b/src/main/kotlin/andreas311/miso/domain/email/domain/Email.kt @@ -6,7 +6,8 @@ data class Email( var randomKey: String, var authentication: Boolean ) { - fun updateAuthentication(authentication: Boolean) { + fun updateAuthentication(authentication: Boolean): Email { this.authentication = authentication + return this } } From 66f0772be769a2bcab7ba74547794f4f2c6d9f66 Mon Sep 17 00:00:00 2001 From: uuuuuuuk Date: Fri, 15 Mar 2024 09:02:59 +0900 Subject: [PATCH 03/14] =?UTF-8?q?:memo:=20EmailEntity=20=EC=97=90=20BaseId?= =?UTF-8?q?xEntity=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../email/adapter/output/persistence/entity/EmailEntity.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/andreas311/miso/domain/email/adapter/output/persistence/entity/EmailEntity.kt b/src/main/kotlin/andreas311/miso/domain/email/adapter/output/persistence/entity/EmailEntity.kt index 63dbbb28..56d3e3c3 100644 --- a/src/main/kotlin/andreas311/miso/domain/email/adapter/output/persistence/entity/EmailEntity.kt +++ b/src/main/kotlin/andreas311/miso/domain/email/adapter/output/persistence/entity/EmailEntity.kt @@ -1,11 +1,12 @@ package andreas311.miso.domain.email.adapter.output.persistence.entity -import andreas311.miso.common.entitiy.BaseIdxEntity import javax.persistence.* @Entity @Table(name = "email") class EmailEntity( + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "email_id", nullable = false) val id: Long, @@ -17,4 +18,4 @@ class EmailEntity( @Column(name = "authentication", nullable = false) var authentication: Boolean -): BaseIdxEntity(id) \ No newline at end of file +) \ No newline at end of file From 0c1546703f746e4c1b992d425abef6f62fc53d68 Mon Sep 17 00:00:00 2001 From: uuuuuuuk Date: Fri, 15 Mar 2024 09:03:45 +0900 Subject: [PATCH 04/14] =?UTF-8?q?:memo:=20EmailMapper=20=EC=97=90=20toDoma?= =?UTF-8?q?in=20=ED=95=A8=EC=88=98=EC=9D=98=20nullable=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=98=B5=EC=85=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../email/adapter/output/persistence/mapper/EmailMapper.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/andreas311/miso/domain/email/adapter/output/persistence/mapper/EmailMapper.kt b/src/main/kotlin/andreas311/miso/domain/email/adapter/output/persistence/mapper/EmailMapper.kt index b3552fb2..5181bc85 100644 --- a/src/main/kotlin/andreas311/miso/domain/email/adapter/output/persistence/mapper/EmailMapper.kt +++ b/src/main/kotlin/andreas311/miso/domain/email/adapter/output/persistence/mapper/EmailMapper.kt @@ -14,7 +14,7 @@ class EmailMapper { authentication = domain.authentication ) - fun toDomain(entity: EmailEntity): Email? = + fun toDomain(entity: EmailEntity?): Email? = entity?.let { Email( id = entity.id, From b9f71a0a3dd74f37078a02348bb8516e63e64ff8 Mon Sep 17 00:00:00 2001 From: uuuuuuuk Date: Fri, 15 Mar 2024 09:03:59 +0900 Subject: [PATCH 05/14] =?UTF-8?q?:memo:=20EmailRepository=20=EC=97=90=20fi?= =?UTF-8?q?ndByRandomKey=20=ED=95=A8=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/output/persistence/repository/EmailRepository.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/kotlin/andreas311/miso/domain/email/adapter/output/persistence/repository/EmailRepository.kt b/src/main/kotlin/andreas311/miso/domain/email/adapter/output/persistence/repository/EmailRepository.kt index 50fbd16b..4b8c6050 100644 --- a/src/main/kotlin/andreas311/miso/domain/email/adapter/output/persistence/repository/EmailRepository.kt +++ b/src/main/kotlin/andreas311/miso/domain/email/adapter/output/persistence/repository/EmailRepository.kt @@ -6,4 +6,5 @@ import org.springframework.data.repository.CrudRepository interface EmailRepository: CrudRepository { fun findByEmail(email: String): EmailEntity fun existsByEmail(email: String): Boolean + fun findByRandomKey(randomKey: String): EmailEntity? } \ No newline at end of file From 0de0487278443b396b812c2e511e1e4746758527 Mon Sep 17 00:00:00 2001 From: uuuuuuuk Date: Fri, 15 Mar 2024 09:04:14 +0900 Subject: [PATCH 06/14] =?UTF-8?q?:memo:=20QueryEmailPersistenceAdapter=20?= =?UTF-8?q?=EC=97=90=20findByRandomKeyOrNull=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../output/persistence/QueryEmailPersistenceAdapter.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/kotlin/andreas311/miso/domain/email/adapter/output/persistence/QueryEmailPersistenceAdapter.kt b/src/main/kotlin/andreas311/miso/domain/email/adapter/output/persistence/QueryEmailPersistenceAdapter.kt index 8e29cf7e..12b1fadf 100644 --- a/src/main/kotlin/andreas311/miso/domain/email/adapter/output/persistence/QueryEmailPersistenceAdapter.kt +++ b/src/main/kotlin/andreas311/miso/domain/email/adapter/output/persistence/QueryEmailPersistenceAdapter.kt @@ -18,4 +18,9 @@ class QueryEmailPersistenceAdapter( override fun existsByEmail(email: String): Boolean = emailRepository.existsByEmail(email) + + override fun findByRandomKeyOrNull(randomKey: String): Email? { + val emailEntity = emailRepository.findByRandomKey(randomKey) + return emailMapper.toDomain(emailEntity) + } } \ No newline at end of file From b52fe5efcbea5aa03831c721539e73fe2aaeda77 Mon Sep 17 00:00:00 2001 From: uuuuuuuk Date: Fri, 15 Mar 2024 09:04:23 +0900 Subject: [PATCH 07/14] =?UTF-8?q?:memo:=20QueryEmailPort=20=EC=97=90=20fin?= =?UTF-8?q?dByRandomKeyOrNull=20=ED=95=A8=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../miso/domain/email/application/port/output/QueryEmailPort.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/kotlin/andreas311/miso/domain/email/application/port/output/QueryEmailPort.kt b/src/main/kotlin/andreas311/miso/domain/email/application/port/output/QueryEmailPort.kt index e6d488c6..595c0406 100644 --- a/src/main/kotlin/andreas311/miso/domain/email/application/port/output/QueryEmailPort.kt +++ b/src/main/kotlin/andreas311/miso/domain/email/application/port/output/QueryEmailPort.kt @@ -5,4 +5,5 @@ import andreas311.miso.domain.email.domain.Email interface QueryEmailPort { fun findByEmailOrNull(email: String): Email? fun existsByEmail(email: String): Boolean + fun findByRandomKeyOrNull(randomKey: String): Email? } \ No newline at end of file From ba0633b7fbac326d07837ee30f67cd24b2758179 Mon Sep 17 00:00:00 2001 From: uuuuuuuk Date: Fri, 15 Mar 2024 09:04:44 +0900 Subject: [PATCH 08/14] =?UTF-8?q?:memo:=20SignUpService=20=EC=97=90=20?= =?UTF-8?q?=EC=A4=84=20=EB=9D=84=EC=9B=80=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../miso/domain/auth/application/service/SignUpService.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/kotlin/andreas311/miso/domain/auth/application/service/SignUpService.kt b/src/main/kotlin/andreas311/miso/domain/auth/application/service/SignUpService.kt index 82ddd154..c6dd81f5 100644 --- a/src/main/kotlin/andreas311/miso/domain/auth/application/service/SignUpService.kt +++ b/src/main/kotlin/andreas311/miso/domain/auth/application/service/SignUpService.kt @@ -24,7 +24,6 @@ class SignUpService( private val passwordEncodePort: PasswordEncodePort ) : SignUpUseCase { override fun execute(signUpDto: SignUpDto) { - passwordEncodePort.isPasswordMatch(signUpDto.password, signUpDto.passwordCheck) if (!queryUserPort.existsByEmail(signUpDto.email)) { From b2272eaf846c4087ff82d592388994775ade130b Mon Sep 17 00:00:00 2001 From: uuuuuuuk Date: Fri, 15 Mar 2024 09:05:24 +0900 Subject: [PATCH 09/14] =?UTF-8?q?:sparkles:=20=EC=9D=B8=EC=A6=9D=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=9D=B8=EC=A6=9D=20api=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../port/input/RandomKeyConfirmUseCase.kt | 7 +++++++ .../service/RandomKeyConfirmService.kt | 21 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/main/kotlin/andreas311/miso/domain/email/application/port/input/RandomKeyConfirmUseCase.kt create mode 100644 src/main/kotlin/andreas311/miso/domain/email/application/service/RandomKeyConfirmService.kt diff --git a/src/main/kotlin/andreas311/miso/domain/email/application/port/input/RandomKeyConfirmUseCase.kt b/src/main/kotlin/andreas311/miso/domain/email/application/port/input/RandomKeyConfirmUseCase.kt new file mode 100644 index 00000000..b6059fc0 --- /dev/null +++ b/src/main/kotlin/andreas311/miso/domain/email/application/port/input/RandomKeyConfirmUseCase.kt @@ -0,0 +1,7 @@ +package andreas311.miso.domain.email.application.port.input + +import andreas311.miso.domain.email.application.port.input.dto.RandomKeyDto + +interface RandomKeyConfirmUseCase { + fun execute(randomKeyDto: RandomKeyDto) +} \ No newline at end of file diff --git a/src/main/kotlin/andreas311/miso/domain/email/application/service/RandomKeyConfirmService.kt b/src/main/kotlin/andreas311/miso/domain/email/application/service/RandomKeyConfirmService.kt new file mode 100644 index 00000000..1b46885a --- /dev/null +++ b/src/main/kotlin/andreas311/miso/domain/email/application/service/RandomKeyConfirmService.kt @@ -0,0 +1,21 @@ +package andreas311.miso.domain.email.application.service + +import andreas311.miso.common.annotation.RollbackService +import andreas311.miso.domain.email.application.exception.EmailKeyInvalidException +import andreas311.miso.domain.email.application.port.input.RandomKeyConfirmUseCase +import andreas311.miso.domain.email.application.port.input.dto.RandomKeyDto +import andreas311.miso.domain.email.application.port.output.CommandEmailPort +import andreas311.miso.domain.email.application.port.output.QueryEmailPort + +@RollbackService +class RandomKeyConfirmService( + private val commandEmailPort: CommandEmailPort, + private val queryEmailPort: QueryEmailPort +): RandomKeyConfirmUseCase { + override fun execute(randomKeyDto: RandomKeyDto) { + val email = queryEmailPort.findByRandomKeyOrNull(randomKeyDto.randomKey) + ?: throw EmailKeyInvalidException() + + commandEmailPort.saveEmail(email.updateAuthentication(true)) + } +} \ No newline at end of file From 0a19842612d3ebdf68ed1f86318c1bf084c2d567 Mon Sep 17 00:00:00 2001 From: uuuuuuuk Date: Fri, 15 Mar 2024 09:06:04 +0900 Subject: [PATCH 10/14] =?UTF-8?q?:sparkles:=20EmailAdapter=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=B0=8F=20=EC=9D=B8=EC=A6=9D=EB=B2=88=ED=98=B8=20?= =?UTF-8?q?=EC=9D=B8=EC=A6=9D=20api=20=EA=B4=80=EB=A0=A8=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../email/adapter/input/EmailAdapter.kt | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/kotlin/andreas311/miso/domain/email/adapter/input/EmailAdapter.kt diff --git a/src/main/kotlin/andreas311/miso/domain/email/adapter/input/EmailAdapter.kt b/src/main/kotlin/andreas311/miso/domain/email/adapter/input/EmailAdapter.kt new file mode 100644 index 00000000..f12ce76b --- /dev/null +++ b/src/main/kotlin/andreas311/miso/domain/email/adapter/input/EmailAdapter.kt @@ -0,0 +1,22 @@ +package andreas311.miso.domain.email.adapter.input + +import andreas311.miso.common.annotation.RequestController +import andreas311.miso.domain.email.adapter.input.data.request.RandomKeyRequest +import andreas311.miso.domain.email.adapter.input.mapper.EmailDataMapper +import andreas311.miso.domain.email.application.port.input.RandomKeyConfirmUseCase +import org.springframework.http.HttpStatus +import org.springframework.http.ResponseEntity +import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.RequestBody +import javax.validation.Valid + +@RequestController("/email") +class EmailAdapter( + private val emailDataMapper: EmailDataMapper, + private val randomKeyConfirmUseCase: RandomKeyConfirmUseCase +) { + @PostMapping + fun emailCheck(@RequestBody @Valid randomKeyRequest: RandomKeyRequest): ResponseEntity = + randomKeyConfirmUseCase.execute(emailDataMapper toDto randomKeyRequest) + .let { ResponseEntity.status(HttpStatus.OK).build() } +} \ No newline at end of file From 7b655be07a24e7831a766c7315aa7830390c715a Mon Sep 17 00:00:00 2001 From: uuuuuuuk Date: Fri, 15 Mar 2024 09:06:16 +0900 Subject: [PATCH 11/14] =?UTF-8?q?:memo:=20EmailDataMapper=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../email/adapter/input/mapper/EmailDataMapper.kt | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/main/kotlin/andreas311/miso/domain/email/adapter/input/mapper/EmailDataMapper.kt diff --git a/src/main/kotlin/andreas311/miso/domain/email/adapter/input/mapper/EmailDataMapper.kt b/src/main/kotlin/andreas311/miso/domain/email/adapter/input/mapper/EmailDataMapper.kt new file mode 100644 index 00000000..3fc9ce60 --- /dev/null +++ b/src/main/kotlin/andreas311/miso/domain/email/adapter/input/mapper/EmailDataMapper.kt @@ -0,0 +1,13 @@ +package andreas311.miso.domain.email.adapter.input.mapper + +import andreas311.miso.domain.email.adapter.input.data.request.RandomKeyRequest +import andreas311.miso.domain.email.application.port.input.dto.RandomKeyDto +import org.springframework.stereotype.Component + +@Component +class EmailDataMapper { + infix fun toDto(randomKeyRequest: RandomKeyRequest): RandomKeyDto = + RandomKeyDto( + randomKey = randomKeyRequest.randomKey + ) +} \ No newline at end of file From caa6fc7caba39b7061e400fc1d4288fe60e5b628 Mon Sep 17 00:00:00 2001 From: uuuuuuuk Date: Fri, 15 Mar 2024 09:06:22 +0900 Subject: [PATCH 12/14] =?UTF-8?q?:memo:=20EmailKeyInvalidException=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../email/application/exception/EmailKeyInvalidException.kt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/main/kotlin/andreas311/miso/domain/email/application/exception/EmailKeyInvalidException.kt diff --git a/src/main/kotlin/andreas311/miso/domain/email/application/exception/EmailKeyInvalidException.kt b/src/main/kotlin/andreas311/miso/domain/email/application/exception/EmailKeyInvalidException.kt new file mode 100644 index 00000000..013863a2 --- /dev/null +++ b/src/main/kotlin/andreas311/miso/domain/email/application/exception/EmailKeyInvalidException.kt @@ -0,0 +1,6 @@ +package andreas311.miso.domain.email.application.exception + +import andreas311.miso.global.error.ErrorCode +import andreas311.miso.global.error.exception.MisoException + +class EmailKeyInvalidException : MisoException(ErrorCode.EMAIL_KEY_IS_INVALID) \ No newline at end of file From a28fbbfe9cd968a0baa6a21f9ee38155e67bbdff Mon Sep 17 00:00:00 2001 From: uuuuuuuk Date: Fri, 15 Mar 2024 09:06:27 +0900 Subject: [PATCH 13/14] =?UTF-8?q?:memo:=20RandomKeyDto=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/email/application/port/input/dto/RandomKeyDto.kt | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/kotlin/andreas311/miso/domain/email/application/port/input/dto/RandomKeyDto.kt diff --git a/src/main/kotlin/andreas311/miso/domain/email/application/port/input/dto/RandomKeyDto.kt b/src/main/kotlin/andreas311/miso/domain/email/application/port/input/dto/RandomKeyDto.kt new file mode 100644 index 00000000..7a711d49 --- /dev/null +++ b/src/main/kotlin/andreas311/miso/domain/email/application/port/input/dto/RandomKeyDto.kt @@ -0,0 +1,5 @@ +package andreas311.miso.domain.email.application.port.input.dto + +data class RandomKeyDto( + val randomKey: String +) From 102aa1ee5580276a7b4247868bf7b3b853745998 Mon Sep 17 00:00:00 2001 From: uuuuuuuk Date: Fri, 15 Mar 2024 09:06:34 +0900 Subject: [PATCH 14/14] =?UTF-8?q?:memo:=20RandomKeyRequest=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../email/adapter/input/data/request/RandomKeyRequest.kt | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/kotlin/andreas311/miso/domain/email/adapter/input/data/request/RandomKeyRequest.kt diff --git a/src/main/kotlin/andreas311/miso/domain/email/adapter/input/data/request/RandomKeyRequest.kt b/src/main/kotlin/andreas311/miso/domain/email/adapter/input/data/request/RandomKeyRequest.kt new file mode 100644 index 00000000..6ac21a99 --- /dev/null +++ b/src/main/kotlin/andreas311/miso/domain/email/adapter/input/data/request/RandomKeyRequest.kt @@ -0,0 +1,8 @@ +package andreas311.miso.domain.email.adapter.input.data.request + +import javax.validation.constraints.NotNull + +data class RandomKeyRequest( + @field:NotNull + val randomKey: String +)