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..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,12 +1,11 @@ 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; +import com.gltkorea.icebang.domain.auth.service.AuthService; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -15,10 +14,12 @@ @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"); + @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/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..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,12 +22,24 @@ 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); 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..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,5 +6,11 @@ @Mapper public interface AuthMapper { - void registerUser(RegisterDto registerDto); + boolean existsByEmail(String email); + + 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..0c36cc21 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,35 @@ "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 + +