diff --git a/apps/user-service/src/main/java/com/gltkorea/icebang/domain/user/controller/UserController.java b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/user/controller/UserController.java new file mode 100644 index 00000000..e6b07bce --- /dev/null +++ b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/user/controller/UserController.java @@ -0,0 +1,30 @@ +package com.gltkorea.icebang.domain.user.controller; + +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; + +import com.gltkorea.icebang.common.dto.ApiResponse; +import com.gltkorea.icebang.domain.user.dto.CheckEmailRequest; +import com.gltkorea.icebang.domain.user.dto.CheckEmailResponse; +import com.gltkorea.icebang.domain.user.service.UserService; + +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; + +@RestController +@RequestMapping("/v0/users") +@RequiredArgsConstructor +public class UserController { + private final UserService userService; + + @PostMapping("/check-email") + public ApiResponse checkEmailAvailable( + @Valid @RequestBody CheckEmailRequest request) { + Boolean available = !userService.isExistEmail(request); + String message = available.equals(Boolean.TRUE) ? "사용 가능한 이메일입니다." : "이미 가입된 이메일입니다."; + + return ApiResponse.success(CheckEmailResponse.builder().available(available).build(), message); + } +} diff --git a/apps/user-service/src/main/java/com/gltkorea/icebang/domain/user/dto/CheckEmailRequest.java b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/user/dto/CheckEmailRequest.java new file mode 100644 index 00000000..49208315 --- /dev/null +++ b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/user/dto/CheckEmailRequest.java @@ -0,0 +1,14 @@ +package com.gltkorea.icebang.domain.user.dto; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class CheckEmailRequest { + @NotBlank(message = "이메일은 필수입니다") + @Email(message = "올바른 이메일 형식이 아닙니다") + private String email; +} diff --git a/apps/user-service/src/main/java/com/gltkorea/icebang/domain/user/dto/CheckEmailResponse.java b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/user/dto/CheckEmailResponse.java new file mode 100644 index 00000000..8b92d187 --- /dev/null +++ b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/user/dto/CheckEmailResponse.java @@ -0,0 +1,10 @@ +package com.gltkorea.icebang.domain.user.dto; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class CheckEmailResponse { + private Boolean available; +} diff --git a/apps/user-service/src/main/java/com/gltkorea/icebang/domain/user/service/UserService.java b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/user/service/UserService.java index 02d038ff..10ec3000 100644 --- a/apps/user-service/src/main/java/com/gltkorea/icebang/domain/user/service/UserService.java +++ b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/user/service/UserService.java @@ -1,16 +1,20 @@ package com.gltkorea.icebang.domain.user.service; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import com.gltkorea.icebang.domain.auth.dto.RegisterDto; +import com.gltkorea.icebang.domain.user.dto.CheckEmailRequest; import com.gltkorea.icebang.entity.Users; +import com.gltkorea.icebang.mapper.UserMapper; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @Service @RequiredArgsConstructor public class UserService { - // private final UserMapper userMapper; + private final UserMapper userMapper; public void registerUser(RegisterDto registerDto) { Users user = @@ -21,4 +25,9 @@ public void registerUser(RegisterDto registerDto) { .status("PENDING") .build(); } + + @Transactional(readOnly = true) + public Boolean isExistEmail(@Valid CheckEmailRequest request) { + return userMapper.existsByEmail(request.getEmail()); + } } diff --git a/apps/user-service/src/main/java/com/gltkorea/icebang/mapper/UserMapper.java b/apps/user-service/src/main/java/com/gltkorea/icebang/mapper/UserMapper.java new file mode 100644 index 00000000..734fe8d5 --- /dev/null +++ b/apps/user-service/src/main/java/com/gltkorea/icebang/mapper/UserMapper.java @@ -0,0 +1,11 @@ +package com.gltkorea.icebang.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface UserMapper { + @Select("SELECT COUNT(1) > 0 FROM users WHERE email = #{email}") + boolean existsByEmail(@Param("email") String email); +}