<질문 게시판>
- 질문
- 질문 엔티티
- 질문ID Long
- 질문 클래스 질문 (일대일)
- 멤버클래스 멤버 (다대일) > 질문(다) : 멤버 (일)
- 질문등록 날짜 > Auditble(추상 클래스) 로 보냄
- 수정 날짜 > Auditble(추상 클래스) 로 보냄
- 질문 제목 String @NotBlank
- 질문 내용 (DB에서는 TEXT) @NotBlank
- 좋아요 > 리스트 (리스트 사이즈로 좋아요수)
- 조회수 > 리스트(리스트로 조회수)
- 공개여부 Enum
- PUBLIC - 공개글 상태
- SECRET - 비밀글 상태
- 질문 상태 (초기 상태 값은 QUESTION_REGISTERED) > ENUM
- QUESTION_REGISTERED- 질문 등록 상태
- QUESTION_ANSWERED - 답변 완료 상태
- QUESTION_DELETED - 질문 삭제 상태
- QUESTION_DEACTIVED - 질문 비활성화 상태: 회원 탈퇴 시, 질문 비활성화 상태
- 질문 디티오
- 등록 디티오 QuestionPostDTO
- 작성자(멤버 아이디)
- 제목 (공백이 아니어야함)
- 내용 (공백이 아니어야함)
- 수정 디티오 QuestionPatchDTO
- 질문ID
- 제목(공백이 아니어야함)
- 내용(공백이 아니어야함)
- 질문상태(답변여부나삭제비활성화)
- 공개여부
- 질문 단건 리스폰스 디티오 QuestionResponseDTO
- 질문Id
- 멤버아이디
- 제목
- 내용
- 등록날짜
- 수정 날짜
- 질문 상태(예) 답변됐는지)
- 공개여부
- 좋아요수
- 조회수
- 질문들 리스트 - List<질문 단건 리스폰스 디티오>
- AnswerResponseDTO 답변 보내는 디티오
- AnswerDTO //사용자로부터 답변 받는 디티오
- QnAResponseDTO //질문과 답변을 함께 반환하는 용도
//디티오는 엔티티를 몰라야함.
//빈 공감이나 마찬가지 > 매퍼로 연결.
- 등록 디티오 QuestionPostDTO
- 질문 엔티티
- QnA 컨트롤러
- QnA서비스
- QnA매퍼
- 생성자
- postQuestion > 디티오 받으면 매퍼 써서 엔티티로 바꾼다음에 서비스 써서 등록
- patchQuestion >
- getQuestion >
- getQnAList >
- deleteQuestion> 질문이 사라지면 답변도 사라짐
- deleteAnswer >
- Question 매퍼
- questionPostDTOToQuestion
- questionPatchDTOToQuestion
- questionToQuestionResponseDTO
- 빌더 씀 > 왜냐면 좋아요수랑 조회수를 int로 받아오고 싶어서 ( likes > 라이크 카운트 = likes.size로 몇개인지 매핑)
- questionsToResponseDTOs
- QnA 서비스
- 질문 등록 : 파라미터로 받은 질문의 멤버를 검증 > 질문 레포지토리에 담음
질문은 회원(고객)만 등록할 수 있다. > role : 회원인지 관리자인지
- 질문 등록시 등록 날짜가 생성 되어야 한다.
- 질문은 질문의 상태 값이 필요하다
ㄴ QUESTION_REGISTERED- 질문 등록 상태
ㄴ QUESTION_ANSWERED - 답변 완료 상태
ㄴ QUESTION_DELETED - 질문 삭제 상태
ㄴ QUESTION_DEACTIVED - 질문 비활성화 상태: 회원 탈퇴 시, 질문 비활성화 상태
- 질문 등록 시, 초기 상태 값은 QUESTION_REGISTERED 이어야 한다.
- 질문 제목과 내용은 필수입력 사항이다.
- 질문은 비밀글과 공개글 둘 중에 하나로 설정되어야 한다.
ㄴ PUBLIC - 공개글 상태
ㄴ SECRET - 비밀글 상태
질문 조회
1건의 특정 질문은 회원(고객)과 관리자 모두 조회할 수 있다.
- 비밀글 상태인 질문은 질문을 등록한 회원(고객)과 관리자만 조회할 수 있다. (ㅇ)
- 1건의 질문 조회 시, 해당 질문에 대한 답변이 존재한다면 답변도 함께 조회되어야 한다.(ㅇ)
- 이미 삭제 상태인 질문은 조회할 수 없다.(ㅇ)
> 조회할때 검증해야할 것 :
0. 일치하는 질문이 있는지
isExistQuestion
if (isPublic(퀘스쳔))
1. 공개/비공개여부 {
>공개면
> 비공개면 질문의 겟멤버와 조회하는 멤버와 같은 멤버인지
> 일치하면
>답변있는지
> 없으면 질문만 리턴
> 불일치하면 익셉션 날리거나 안된다고 메세지 입력으로 리턴 }
1. 질문상태가 QUESTION_REGISTERED이거나 QUESTION_ANSWERED인지
> 아니라면 불가능한 질문이라고 예외메세지 날림
2. 답변이 있는지
> 있으면 답변도 같이 리턴
> 없으면 질문만 리턴
불리언 isPublic > 퀘스쳔 들어오면 상태 판단 > t/f반환
isVerifiedMember
isExistAnswer
isExistQuestion
질문 삭제
1건의 질문은 회원(고객)만 삭제할 수 있다.
- 1건의 질문 삭제는 질문을 등록한 회원만 가능하다.
- 질문 삭제 시, 테이블에서 row 자체가 삭제되는 것이 아니라 질문 상태 값이(QUESTION_DELETE)으로 변경되어야 한다.
- 이미 삭제 상태인 질문은 삭제할 수 없다.
> 조회할때 검증해야할 것 :
1.질문이 존재하는지
2.질문의 상태 여부
> 지운상태면 지울 수 없다고 예외메세지 출력
>질문 QUESTION_REGISTERED || QUESTION_ANSWERED 일때 > QUESTION_DELETE로 변경
> 아니면 불가능한 질문이라고 예외메세지 날림
질문들(목록) 조회
- 여러 건의 질문 목록은 회원(고객)과 관리자 모두 조회할 수 있다.
- 삭제 상태가 아닌 질문만 조회할 수 있다.
- 여러 건의 질문 목록에서 각각의 질문에 답변이 존재한다면 답변도 함께 조회할 수 있어야 한다.
- 여러 건의 질문 목록은 페이지네이션 처리가 되어 일정 건수 만큼의 데이터만 조회할 수 있어야 한다.
- 여러 건의 질문 목록은 아래의 조건으로 정렬해서 조회할 수 있어야 한다.
ㄴ 최신글 순으로
ㄴ 오래된 글 순으로
ㄴ 좋아요가 많은 순으로(좋아요 구현 이후 적용)
ㄴ 좋아요가 적은 순으로(좋아요 구현 이후 적용)
ㄴ 조회수가 많은 순으로(조회수 구현 이후 적용)
ㄴ 조회수가 적은 순으로(조회수 구현 이후 적용)

대략 데이터테이블을 이렇게 짜봤다.
https://www.erdcloud.com/d/RQ65KZaKiZvunGqNn
1. 질문과 답변은 어차피 맵핑됨
> 질문이 사라지면 답변도 사라짐
> 질문의 상태 여부에 따라 답변에 접근할 수 있는지도 결정됨
>but, 질문에는 답변이 없을 수도 있음 -> 그러면 기본 값으로 "Answer is not exist"로 넣어줘야 하나
>>그렇다면 QnA로 따로 맵을 만들어 구현해야하는가
2. 컨트롤러와 서비스도 따로 구현해야할까?
>답변은 질문의 옵션같은 느낌 아닌가?
'spring > [실습] 솔로프로젝트' 카테고리의 다른 글
| 2024-07-30 (0) | 2024.07.31 |
|---|---|
| 2024-07-30 (0) | 2024.07.30 |
| 까먹으면 안되는 것 - 추가 (0) | 2024.07.18 |
| URI 메서드 어떻게 쓰는데 (0) | 2024.07.18 |
| 2일차 (0) | 2024.07.12 |