diff --git a/src/main/java/com/yam/app/account/application/AccountFacade.java b/src/main/java/com/yam/app/account/application/AccountFacade.java index 2dd2ab8..d0347f7 100644 --- a/src/main/java/com/yam/app/account/application/AccountFacade.java +++ b/src/main/java/com/yam/app/account/application/AccountFacade.java @@ -29,4 +29,8 @@ public class AccountFacade { publisher.publishEvent(new RegisterAccountEvent(entity)); return translator.toResponse(entity); } + + public boolean verify(String token, String email) { + return false; + } } diff --git a/src/main/java/com/yam/app/account/domain/AccountRepository.java b/src/main/java/com/yam/app/account/domain/AccountRepository.java index 2b24467..30a48b3 100644 --- a/src/main/java/com/yam/app/account/domain/AccountRepository.java +++ b/src/main/java/com/yam/app/account/domain/AccountRepository.java @@ -7,4 +7,7 @@ public interface AccountRepository { boolean existsByNickname(String nickname); Account save(Account entity); + + Account update(Account entity); + } diff --git a/src/main/java/com/yam/app/account/infrastructure/MybatisAccountRepository.java b/src/main/java/com/yam/app/account/infrastructure/MybatisAccountRepository.java index 4b7d09f..8382348 100644 --- a/src/main/java/com/yam/app/account/infrastructure/MybatisAccountRepository.java +++ b/src/main/java/com/yam/app/account/infrastructure/MybatisAccountRepository.java @@ -22,6 +22,16 @@ public final class MybatisAccountRepository implements AccountRepository, Accoun return result != 0; } + @Override + public Account update(Account entity) { + int result = template.update(COMMAND_NAMESPACE + "update", entity); + if (result != 1) { + throw new RuntimeException( + String.format("There was a problem updating the object : %s", entity)); + } + return findByEmail(entity.getEmail()); + } + @Override public boolean existsByNickname(String nickname) { int result = template.selectOne(COMMAND_NAMESPACE + "existsByNickname", nickname); diff --git a/src/main/java/com/yam/app/account/presentation/AccountCommandApi.java b/src/main/java/com/yam/app/account/presentation/AccountCommandApi.java new file mode 100644 index 0000000..93e6a37 --- /dev/null +++ b/src/main/java/com/yam/app/account/presentation/AccountCommandApi.java @@ -0,0 +1,53 @@ +package com.yam.app.account.presentation; + +import com.yam.app.account.application.AccountFacade; +import java.net.URI; +import javax.validation.Valid; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping( + produces = MediaType.APPLICATION_JSON_VALUE, + consumes = MediaType.APPLICATION_JSON_VALUE +) +public final class AccountCommandApi { + + private final AccountFacade accountFacade; + + public AccountCommandApi(AccountFacade accountFacade) { + this.accountFacade = accountFacade; + } + + @PostMapping("/api/accounts") + public ResponseEntity register( + @RequestBody @Valid RegisterAccountRequest request) { + return ResponseEntity.ok(accountFacade.register(request)); + } + + /** + * 회원가입 이메일 검증 컨트롤러 + * 임시로 "http://localhost:3000/login"로 리다이렉트 되도록 설정. + */ + @GetMapping("/api/accounts/authorize") + public ResponseEntity verify( + @RequestParam String token, + @RequestParam String email) throws Exception { + var result = accountFacade.verify(token, email); + if (!result) { + return ResponseEntity.badRequest().build(); + } + var uri = new URI("http://localhost:3000/login"); + var header = new HttpHeaders(); + header.setLocation(uri); + return new ResponseEntity<>(header, HttpStatus.SEE_OTHER); + } +} diff --git a/src/main/java/com/yam/app/account/presentation/RegisterAccountApi.java b/src/main/java/com/yam/app/account/presentation/RegisterAccountApi.java deleted file mode 100644 index 2a5468a..0000000 --- a/src/main/java/com/yam/app/account/presentation/RegisterAccountApi.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.yam.app.account.presentation; - -import com.yam.app.account.application.AccountFacade; -import javax.validation.Valid; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping( - produces = MediaType.APPLICATION_JSON_VALUE, - consumes = MediaType.APPLICATION_JSON_VALUE -) -public final class RegisterAccountApi { - - private final AccountFacade accountFacade; - - public RegisterAccountApi(AccountFacade accountFacade) { - this.accountFacade = accountFacade; - } - - @PostMapping("/api/accounts") - public ResponseEntity register( - @RequestBody @Valid RegisterAccountRequest request) { - return ResponseEntity.ok(accountFacade.register(request)); - } -} diff --git a/src/main/resources/mapper/xml/AccountCommandMapper.xml b/src/main/resources/mapper/xml/AccountCommandMapper.xml index 6a683f5..a6bb04c 100644 --- a/src/main/resources/mapper/xml/AccountCommandMapper.xml +++ b/src/main/resources/mapper/xml/AccountCommandMapper.xml @@ -2,6 +2,18 @@ + + UPDATE ACCOUNT + SET email = #{email}, + email_check_token = #{emailCheckToken}, + email_check_token_generated_at = #{emailCheckTokenGeneratedAt}, + email_verified = #{emailVerified}, + nickname = #{nickname}, + password = #{password}, + withdraw = #{withdraw} + WHERE id = #{id} + LIMIT 1 +