UserService

조현재·2023년 1월 28일
0

MSA

목록 보기
7/17

RequestVo 생성

@Data
public class RequestUser {

    @NotNull(message = "이메일은 빈칸이 안됩니다.")
    @Size(min = 2, message = "이메일은 두글자 이상 입력해주세요.")
    @Email
    private String email;

    @NotNull(message = "이름은 빈칸이 안됩니다.")
    @Size(min = 2, message = "이름은 두글자 이상 입력해주세요.")
    private String name;

    @NotNull(message = "비밀번호는 빈칸이 안됩니다.")
    @Size(min = 8, message = "비밀번호는 8글자 이상 입력해주세요.")
    private String pwd;

}

UserDto 생성

@Data
public class UserDto {
    private String email;
    private String name;
    private String pwd;
    private String userId;
    private Date createdAt;
    
    private String encryptedPwd;
}

ModelMapper추가
Dto > Entity로 혹은 Dto > Vo로 변환할 때 set이나 생성자를 통해서 해도 되지만 좀 더 간편하게 변경하기 위한 라이브러리

<dependency>
    <groupId>org.modelmapper</groupId>
    <artifactId>modelmapper</artifactId>
    <version>2.3.8</version>
</dependency>

UserService 생성

public interface UserService {
    UserDto createUser(UserDto userDto);
}
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService{

    private final UserRepository userRepository;

    @Override
    public ResponseUser createUser(UserDto userDto) {

        userDto.setUserId(UUID.randomUUID().toString());

        ModelMapper mapper = new ModelMapper();
        mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
        UserEntity userEntity = mapper.map(userDto, UserEntity.class);
        userEntity.setEncryptedPwd("encrypted_password");

        UserEntity save = userRepository.save(userEntity);
        ResponseUser responseUser = mapper.map(save, ResponseUser.class);

        return responseUser;
    }
}

UserEntity 생성

@Data
@Entity
@Table(name= "users")
public class UserEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, length = 50, unique = true)
    private String email;

    @Column(nullable = false, length = 50)
    private String name;

    @Column(nullable = false, unique = true)
    private String userId;

    @Column(nullable = false, unique = true)
    private String encryptedPwd;
}
public interface UserRepository extends CrudRepository<UserEntity, Long> {
}

스프링 데이터는 리포지토리를 간단히 정의할 수 있도록 CrudRepository 등의 몇 가지 기본 자바 인터페이스를 제공한다.

UserController 생성

@PostMapping("/users")
    public ResponseEntity<ResponseUser> createUser(@RequestBody RequestUser user){

        ModelMapper mapper = new ModelMapper();
        mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
        UserDto userDto = mapper.map(user, UserDto.class);
        ResponseUser responseUser = userService.createUser(userDto);

        return ResponseEntity.status(HttpStatus.CREATED).body(responseUser);
    }

생성되었을 때는 200코드보단 201코드를 보내주는 것이 더 올바른 방법이다.

profile
내일이 다른

0개의 댓글