add DTO && improve validation