TIL

TIL - 2024/07/31

기석김 2024. 8. 5. 23:48

validation 적용을 하려고 한다 . @valid

 

적용 할 목록

 

이메일 필드에 이메일 형식 검증 추가
비밀번호 필드에 대소문자, 숫자, 특수문자(~!@#$%^&*) 포함 최소 8자 이상 검증 추가
스페이스 네임 필드에 최대 20자 미만 검증 추가
is_public 필드에 Y 또는 N 값 검증 추가
채널 이름 필드에 최대 50자 미만 검증 추가
채널 타입 필드에 T 또는 V 값 검증 추가

/**
 * ChannelController는 채널 관련 API 요청을 처리
 */
@RestController
@RequiredArgsConstructor
@RequestMapping("/spaces/{spaceId}/channels")
public class ChannelController {

    private final ChannelFacade channelFacade;

    @PostMapping
    public Mono<ResponseEntity<ChannelResponseDto>> createChannel(@PathVariable Long spaceId, @Valid @RequestBody ChannelRequestDto requestDto) {
        return channelFacade.createChannel(spaceId, requestDto)
            .map(ResponseEntity::ok);
    }

    @GetMapping
    public Flux<ChannelResponseDto> getChannels(@PathVariable Long spaceId) {
        return channelFacade.getChannels(spaceId);
    }

    @PutMapping("/{channelId}")
    public Mono<ResponseEntity<ChannelResponseDto>> updateChannel(@PathVariable Long channelId, @Valid @RequestBody ChannelRequestDto requestDto) {
        return channelFacade.updateChannel(channelId, requestDto)
            .map(ResponseEntity::ok);
    }

    @DeleteMapping("/{channelId}")
    public Mono<ResponseEntity<String>> deleteChannel(@PathVariable Long channelId) {
        return channelFacade.deleteChannel(channelId)
            .then(Mono.just(ResponseEntity.ok(ChannelSuccessCode.CHANNEL_DELETE.getMsg())));
    }
}

이 코드 보면 알듯이 @valid를 추가했다!

 

dto에 어노테이션 추가했다

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder

public class ChannelRequestDto {

    @NotBlank(message = "채널 이름은 필수 입력 항목입니다.")
    @Size(max = 50, message = "채널 이름은 50자 미만이어야 합니다.")
    private String channelName;

    @NotBlank(message = "채널 타입은 필수 입력 항목입니다.")
    @Pattern(regexp = "^[TV]$", message = "채널 타입은 T 또는 V이어야 합니다.")
    private String channelType;
}
@AllArgsConstructor
@Getter
public class UserRequestDto {

    private String nickname;

    @Email(message = "이메일 형식이 올바르지 않습니다.")
    @NotBlank(message = "이메일은 필수 입력 항목입니다.")
    private String email;

    @NotBlank(message = "비밀번호는 필수 입력 항목입니다.")
    @Pattern(
        regexp = "^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)(?=.*[~!@#$%^&*]).{8,}$",
        message = "비밀번호는 대소문자, 숫자, 특수문자(~!@#$%^&*)를 포함하여 8자 이상이어야 합니다."
    )
    private String password;

    private String intro;
}

아, 그리고 username을 nickname으로 변경도 해줬다.

@Getter
@AllArgsConstructor
@NoArgsConstructor
public class UpdateProfileRequestDto {
    private String nickname;
    private String intro;
}

 

다른 컨트롤러도 @valid를 추가해 주고, sql도 user name에서 nickname으로 변경했다.