From 738a5fddcd35bea8ab1118a100fb5b7a827a2220 Mon Sep 17 00:00:00 2001 From: can019 Date: Mon, 8 Sep 2025 15:19:04 +0900 Subject: [PATCH 1/2] feat: user register --- .../auth/controller/AuthController.java | 8 ++++-- .../icebang/domain/auth/dto/RegisterDto.java | 7 ++++- .../domain/auth/service/AuthService.java | 11 +++++++- .../domain/user/service/UserService.java | 2 +- .../gltkorea/icebang/mapper/AuthMapper.java | 6 +++- .../resources/mybatis/mapper/AuthMapper.xml | 28 ++++++++++++------- 6 files changed, 45 insertions(+), 17 deletions(-) diff --git a/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/controller/AuthController.java b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/controller/AuthController.java index b0e425e4..b92395c7 100644 --- a/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/controller/AuthController.java +++ b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/controller/AuthController.java @@ -7,6 +7,7 @@ import com.gltkorea.icebang.common.dto.ApiResponse; import com.gltkorea.icebang.domain.auth.dto.RegisterDto; +import com.gltkorea.icebang.domain.auth.service.AuthService; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -15,10 +16,11 @@ @RequestMapping("/v0/auth") @RequiredArgsConstructor public class AuthController { + private final AuthService authService; @PostMapping("/register") - public ApiResponse register(@Valid @RequestBody RegisterDto registerDto) { - - throw new RuntimeException("Not implemented"); + public ApiResponse register(@Valid @RequestBody RegisterDto registerDto) { + authService.registerUser(registerDto); + return ApiResponse.success(null); } } diff --git a/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/dto/RegisterDto.java b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/dto/RegisterDto.java index 68feaa42..1ff305aa 100644 --- a/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/dto/RegisterDto.java +++ b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/dto/RegisterDto.java @@ -17,14 +17,17 @@ @AllArgsConstructor @NoArgsConstructor public class RegisterDto { + @Null private BigInteger id; @NotBlank(message = "사용자명은 필수입니다") - private String userName; + private String name; @NotBlank(message = "이메일은 필수입니다") @Email(message = "올바른 이메일 형식이 아닙니다") private String email; + @Null private BigInteger userOrgId; + @NotNull(message = "조직 선택은 필수입니다") private BigInteger orgId; @@ -38,4 +41,6 @@ public class RegisterDto { private Set roleIds; @Null private String password; + + @Null private String status; } diff --git a/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/service/AuthService.java b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/service/AuthService.java index d5358649..2176ac06 100644 --- a/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/service/AuthService.java +++ b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/service/AuthService.java @@ -26,8 +26,17 @@ public void registerUser(RegisterDto registerDto) { String hashedPassword = passwordEncoder.encode(randomPassword); registerDto.setPassword(hashedPassword); + registerDto.setStatus("PENDING"); - // @TODO:: Auth mapper 호출하여 insert + authMapper.insertUser(registerDto); + + // 2. user_organizations insert → userOrgId 반환 + authMapper.insertUserOrganization(registerDto); + + // 3. user_roles insert (foreach) + if (registerDto.getRoleIds() != null && !registerDto.getRoleIds().isEmpty()) { + authMapper.insertUserRoles(registerDto); + } EmailRequest emailRequest = EmailRequest.builder() 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 10ec3000..fcf87ac9 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 @@ -19,7 +19,7 @@ public class UserService { public void registerUser(RegisterDto registerDto) { Users user = Users.builder() - .name(registerDto.getUserName()) + .name(registerDto.getName()) .email(registerDto.getEmail()) .password(registerDto.getPassword()) .status("PENDING") diff --git a/apps/user-service/src/main/java/com/gltkorea/icebang/mapper/AuthMapper.java b/apps/user-service/src/main/java/com/gltkorea/icebang/mapper/AuthMapper.java index 14851fc0..1de296b2 100644 --- a/apps/user-service/src/main/java/com/gltkorea/icebang/mapper/AuthMapper.java +++ b/apps/user-service/src/main/java/com/gltkorea/icebang/mapper/AuthMapper.java @@ -6,5 +6,9 @@ @Mapper public interface AuthMapper { - void registerUser(RegisterDto registerDto); + int insertUser(RegisterDto dto); // users insert + + int insertUserOrganization(RegisterDto dto); // user_organizations insert + + int insertUserRoles(RegisterDto dto); // user_roles insert (foreach) } diff --git a/apps/user-service/src/main/resources/mybatis/mapper/AuthMapper.xml b/apps/user-service/src/main/resources/mybatis/mapper/AuthMapper.xml index 4ce5afbb..b0546bda 100644 --- a/apps/user-service/src/main/resources/mybatis/mapper/AuthMapper.xml +++ b/apps/user-service/src/main/resources/mybatis/mapper/AuthMapper.xml @@ -3,19 +3,27 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - SELECT LAST_INSERT_ID() - + + + INSERT INTO users (name, email, password) - VALUES (#{name}, #{email}, #{password}) + VALUES (#{name}, #{email}, #{password}); + + + INSERT INTO user_organizations (user_id, organization_id, department_id, position_id, status) - VALUES (#{id}, #{organizationId}, #{departmentId}, #{positionId}, #{status}) + VALUES (#{id}, #{orgId}, #{deptId}, #{positionId}, #{status}); + + + INSERT INTO user_roles (user_organization_id, role_id) - SELECT uo.id, #{roleId} - FROM user_organizations uo - WHERE uo.user_id = #{id} + VALUES + + (#{userOrgId}, #{roleId}) + - \ No newline at end of file + + + From 0df4101a05bc4321d9ef97be66684ecdff4c16fc Mon Sep 17 00:00:00 2001 From: can019 Date: Mon, 8 Sep 2025 15:23:05 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=EC=9D=B4=EB=AF=B8=20=EC=A1=B4?= =?UTF-8?q?=EC=9E=AC=ED=95=98=EB=8A=94=20=EC=9D=B4=EB=A9=94=EC=9D=BC?= =?UTF-8?q?=EC=9D=B8=20=EA=B2=BD=EC=9A=B0=20exception=20=EB=B0=9C=EC=83=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../icebang/domain/auth/controller/AuthController.java | 7 +++---- .../icebang/domain/auth/service/AuthService.java | 3 +++ .../java/com/gltkorea/icebang/mapper/AuthMapper.java | 2 ++ .../src/main/resources/mybatis/mapper/AuthMapper.xml | 10 +++++++++- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/controller/AuthController.java b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/controller/AuthController.java index b92395c7..5da466f6 100644 --- a/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/controller/AuthController.java +++ b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/controller/AuthController.java @@ -1,9 +1,7 @@ package com.gltkorea.icebang.domain.auth.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 org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; import com.gltkorea.icebang.common.dto.ApiResponse; import com.gltkorea.icebang.domain.auth.dto.RegisterDto; @@ -19,6 +17,7 @@ public class AuthController { private final AuthService authService; @PostMapping("/register") + @ResponseStatus(HttpStatus.CREATED) public ApiResponse register(@Valid @RequestBody RegisterDto registerDto) { authService.registerUser(registerDto); return ApiResponse.success(null); diff --git a/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/service/AuthService.java b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/service/AuthService.java index 2176ac06..18010ed5 100644 --- a/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/service/AuthService.java +++ b/apps/user-service/src/main/java/com/gltkorea/icebang/domain/auth/service/AuthService.java @@ -22,6 +22,9 @@ public class AuthService { private final EmailService emailService; public void registerUser(RegisterDto registerDto) { + if (authMapper.existsByEmail(registerDto.getEmail())) { + throw new IllegalArgumentException("이미 가입된 이메일입니다."); + } String randomPassword = passwordGenerator.generate(); String hashedPassword = passwordEncoder.encode(randomPassword); diff --git a/apps/user-service/src/main/java/com/gltkorea/icebang/mapper/AuthMapper.java b/apps/user-service/src/main/java/com/gltkorea/icebang/mapper/AuthMapper.java index 1de296b2..09033730 100644 --- a/apps/user-service/src/main/java/com/gltkorea/icebang/mapper/AuthMapper.java +++ b/apps/user-service/src/main/java/com/gltkorea/icebang/mapper/AuthMapper.java @@ -6,6 +6,8 @@ @Mapper public interface AuthMapper { + boolean existsByEmail(String email); + int insertUser(RegisterDto dto); // users insert int insertUserOrganization(RegisterDto dto); // user_organizations insert diff --git a/apps/user-service/src/main/resources/mybatis/mapper/AuthMapper.xml b/apps/user-service/src/main/resources/mybatis/mapper/AuthMapper.xml index b0546bda..0c36cc21 100644 --- a/apps/user-service/src/main/resources/mybatis/mapper/AuthMapper.xml +++ b/apps/user-service/src/main/resources/mybatis/mapper/AuthMapper.xml @@ -4,6 +4,15 @@ + + + INSERT INTO users (name, email, password) @@ -25,5 +34,4 @@ -