본문 바로가기

프로젝트

221110- spring 비밀글 구현하기

오늘은 드디어 백엔드 리팩토링을 끝마쳤다.  ElementCollection을 이용해 도메인 모델이 "소유" 하고 있는 객체들을 바꿔 주었다. 

product의 경우 이미지나 option같은 경우는 product도메인 모델이 이 친구들을 소유하고 있다고 판단을 하고 리팩토링을 전체적으로 하고 기존에 작성하기 어려웠던 컨트롤러 테스트도 모두 꼼꼼히 챙겨주었다. 

 

 

 

그리고 오늘은 저번 주 스프린트 목표였던 상품 문의 구현하기를 백엔드에서 부터 시작을 했다 .

 

상품 문의의 사용자 스토리

 

1. 고객은 상품 상세 페이지에서는 알 수 없거나 궁금한 사항에 대해서 상품에 대한 문의사항을 작성하고 관리자에게 답변 받을 수 있다.

2. 고객의 신상 정보가 노출되는 것을 막기 위해  고객은 상품 문의를 비밀글로 만들 수 있다.

 

 

상품 문의 객체가 가지고 있는 필드값들이다. 값 객체로 뺄만한 건 답변상태 정도가 있을 것 같은데 논리가 없어서 아직까지는 그냥 사용을 하고 있다.

 

 

상품문의의 요구사항

1.  상품문의를 비밀글로 작성하면 작성한 유저외에 다른 유저에게는 비밀글입니다 라고 제목이 표시되어야 하고 상세보기의 권한이 없다.

2.  비밀글로 작성하지 않은 상품문의는 모든 유저가 제목을 알 수 있고 상세보기도 가능하다.

 

첫번째 요구사항을 충족하느라 시간이 꽤나 시간이 걸렸다. 

서버에서 다른 사람의 비밀글은 상품 문의 DTO에서 제목을 그냥 비밀글입니다로 바꿔버려서 리턴을 하게 해주는 방법을 선택했다. 

 

 

이런식으로 특정 조건에 맞으면 일반 toSecretDto메소드를 통해 글의 내용을 바꿔주는 식으로 진행을 했다. 

 

 

상품에 달려있는 문의내역을 불러와야 하기 때문에 PathVariable을 통해 상품의 아이디를 가져오고 

RequestAttribute어노테이션을 통해서 컨트롤러의 로직이 실행되기전 user의 아이디를 알아낸다.

 

 

컨트롤러에 있는 서비스의 로직인데 어지러우니 테스트 코드를 통해 어떤 의미인지 설명을 하겠슴다.

 

 

상품에 대해서 3개의 문의가 있고 인데스의 0번째는 본인이 작성한 비밀글 ,  1번째는 다른 유저가 작성한 비밀글

3번째는 비밀글이 아닌 글이다. 

 

페이지네이션을 통해 한 페이지에 5개를 보여주고 생성순으로 내림차순으로 정렬을 해준다.  그리고 내용을 확인하면

 

내가 작성한 비밀글의 내용은 제목이 잘 출력이 되고

2번째 다른 사람이 작성한 비밀글의 제목은 "비밀글 입니다" 로 제목이 변경이 되었다.

3번째 상품 문의는 비공개 이기 때문에 제목을 확인할 수 있다. 

 

그렇다면 반대 케이스인 로그인을 하지 않았을 때의 케이스

 

accessToken을 decode한 값이 null일 경우에는 로그인을 하지 않았다는 뜻이다. 

이렇게 로그인을 하지 않은 유저가 보면 비밀글로 작성된 글의 제목은 모두 "비밀글 입니다" 로 출력이 된다. 

 

그대로 프론트에서 출력을 해주면 되는데 프론트엔드도 같이 리팩토링을 해야해서 프론트엔드는 만들지 못했지만 

 

서버에서 이렇게 정보를 넘겨주면 바로 화면에 뿌려주기만 하면 되는 간단한 작업이기 때문에 생략(사실 아직 못해서 그럼)