MemberDto가 너무 복잡한 문제를 개선한다.
gusah009 opened this issue · comments
사전 수행 issue
없음.
이슈 내용
현재 MemberDto
코드의 상황입니다.
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonInclude(Include.NON_NULL)
public class MemberDto {
private Long id;
private String loginId;
private String emailAddress;
private String password;
private String realName;
private String nickName;
private String authCode;
private Date birthday;
private String studentId;
private Date registerDate;
private String followeeLoginId;
private Integer point;
private Integer level;
private String rank;
private String type;
private List<String> jobs;
private String thumbnailPath;
private Integer merit;
private Integer demerit;
private Float generation;
public MemberEntity toEntity() {
return MemberEntity.builder()
.loginId(loginId)
.password(password)
.realName(realName)
.nickName(nickName)
.emailAddress(emailAddress)
.studentId(studentId)
.build();
}
public void initWithEntity(MemberEntity memberEntity) {
// 민감한 정보 제외
this.id = memberEntity.getId();
this.loginId = null;//memberEntity.getLoginId();
this.password = null;//memberEntity.getPassword();
this.realName = null;//memberEntity.getRealName();
this.nickName = memberEntity.getNickName();
this.birthday = memberEntity.getBirthday();
this.emailAddress = memberEntity.getEmailAddress();
this.studentId = null;//memberEntity.getStudentId();
this.registerDate = memberEntity.getRegisterDate();
this.point = memberEntity.getPoint();
this.level = memberEntity.getLevel();
this.merit = memberEntity.getMerit();
this.demerit = memberEntity.getDemerit();
this.generation = memberEntity.getGeneration();
if (memberEntity.getThumbnail() != null) {
this.thumbnailPath = EnvironmentProperty.getThumbnailPath(
memberEntity.getThumbnail().getId());
}
if (memberEntity.getMemberRank() != null) {
this.rank = memberEntity.getMemberRank().getName();
}
if (memberEntity.getMemberType() != null) {
this.type = memberEntity.getMemberType().getName();
}
if (memberEntity.getMemberJobs() != null || memberEntity.getMemberJobs().isEmpty() == false) {
this.jobs = new ArrayList<>();
memberEntity.getMemberJobs()
.forEach(job ->
this.jobs.add(job.getMemberJobEntity().getName()));
}
}
public MemberDto(MemberEntity memberEntity) {
// 민감한 정보 포함
this.id = memberEntity.getId();
this.loginId = memberEntity.getLoginId();
this.password = null;//memberEntity.getPassword();
this.realName = memberEntity.getRealName();
this.nickName = memberEntity.getNickName();
this.birthday = memberEntity.getBirthday();
this.emailAddress = memberEntity.getEmailAddress();
this.studentId = memberEntity.getStudentId();
this.registerDate = memberEntity.getRegisterDate();
this.point = memberEntity.getPoint();
this.level = memberEntity.getLevel();
this.merit = memberEntity.getMerit();
this.demerit = memberEntity.getDemerit();
this.generation = memberEntity.getGeneration();
if (memberEntity.getThumbnail() != null) {
this.thumbnailPath = EnvironmentProperty.getThumbnailPath(
memberEntity.getThumbnail().getId());
}
if (memberEntity.getMemberRank() != null) {
this.rank = memberEntity.getMemberRank().getName();
}
if (memberEntity.getMemberType() != null) {
this.type = memberEntity.getMemberType().getName();
}
if (memberEntity.getMemberJobs() != null || memberEntity.getMemberJobs().isEmpty() == false) {
this.jobs = new ArrayList<>();
memberEntity.getMemberJobs()
.forEach(job ->
this.jobs.add(job.getMemberJobEntity().getName()));
}
}
}
불필요한 정보까지 클라이언트로 넘겨주고 있으며, Dto 코드 자체도 방대해서 알아보기 힘듭니다.
또, admin/MemberDto
와 user/MemberDto
, common/CommonMemberDto
등 비슷한 Dto가 많습니다.
많은 코드에서 사용하는 MemberDto
인 만큼 확실한 체계를 갖추고, 깔끔한 코드를 보여줘야 합니다.
따라서, 권한수준에 따라서 회원 정보를 얼마나 보여줄 지 상의하고 그에 맞게 MemberDto
를 수정해야 할 것 같습니다.
- 권한수준에 따라서 회원 정보를 얼마나 보여줄 지 상의하고, 그에 맞게
MemberDto
를 수정한다.- ❗️ 해당 작업 수행 과정에서 응답 데이터 형식이나 url이 변경된다면 반드시 프론트엔드에 알리고 함께 수정할 것!!