본문 바로가기

spring/[실습] 솔로프로젝트

스프링 마치고 하는 솔로프로젝트 - 게시판 추가하기 _1차 설계

 <질문 게시판> 

  • 답변 엔티티
  • 질문 엔티티
    • 질문
      • 질문ID Long
      • 질문등록 날짜 Date > Now로 자동생성
      • 질문 상태 (초기 상태 값은 QUESTION_REGISTERED) > ENUM 
        • QUESTION_REGISTERED- 질문 등록 상태 
        • QUESTION_ANSWERED - 답변 완료 상태
        • QUESTION_DELETED - 질문 삭제 상태
        • QUESTION_DEACTIVED - 질문 비활성화 상태: 회원 탈퇴 시, 질문 비활성화 상태
      • 질문 제목 String @NotBlank
      • 질문 내용 (DB에서는 TEXT) @NotBlank 
      • 공개여부 Enum 
        • PUBLIC - 공개글 상태 
        •  SECRET - 비밀글 상태

                
             
    • 질문 디티오
      • 등록 디티오 QuestionPostDTO
        • 제목
        • 내용
        • 공개여부
      •  수정 디티오  QuestionPatchDTO
        • 질문ID
        • 제목
        • 내용
        • 질문상태(답변여부나삭제비활성화 )
      • 질문 단건 리스폰스 디티오 QuestionResponseDTO
        • 질문Id
        • 멤버리스폰스디티오
        • 제목
        • 내용
        • 등록날짜
        • 상태
        • 공개여부
      • 질문들 리스트 - List<질문 단건 리스폰스 디티오>
      • AnswerResponseDTO 답변 보내는 디티오
      • AnswerDTO //사용자로부터 답변 받는 디티오 
      • QnAResponseDTO //질문과 답변을 함께 반환하는 용도
            //디티오는 엔티티를 몰라야함.
            //빈 공감이나 마찬가지 > 매퍼로 연결.

  • QnA 컨트롤러
    • QnA서비스
    • QnA매퍼
    • 생성자
    • postQuestion
    • answerAnswer
    • getQnA
    • getQnAList
    • deleteQuestion> 질문이 사라지면 답변도 사라짐
    • deleteAnswer
  • QnA 매퍼
  • QnA 서비스
    • 질문 등록

질문은 회원(고객)만 등록할 수 있다. > role : 회원인지 관리자인지  
- 질문 등록시 등록 날짜가 생성 되어야 한다.
- 질문은 질문의 상태 값이 필요하다
ㄴ QUESTION_REGISTERED- 질문 등록 상태 
ㄴ QUESTION_ANSWERED - 답변 완료 상태 
ㄴ QUESTION_DELETED - 질문 삭제 상태
ㄴ QUESTION_DEACTIVED - 질문 비활성화 상태: 회원 탈퇴 시, 질문 비활성화 상태
- 질문 등록 시, 초기 상태 값은 QUESTION_REGISTERED 이어야 한다.
- 질문 제목과 내용은 필수입력 사항이다.
- 질문은 비밀글과 공개글 둘 중에 하나로 설정되어야 한다.
ㄴ PUBLIC - 공개글 상태 
ㄴ SECRET - 비밀글 상태


질문 조회
 1건의 특정 질문은 회원(고객)과 관리자 모두 조회할 수 있다. 
- 비밀글 상태인 질문은 질문을 등록한 회원(고객)과 관리자만 조회할 수 있다. (ㅇ)
- 1건의 질문 조회 시, 해당 질문에 대한 답변이 존재한다면 답변도 함께 조회되어야 한다.(ㅇ)
- 이미 삭제 상태인 질문은 조회할 수 없다.(ㅇ) 

> 조회할때 검증해야할 것 :

 

0. 일치하는 질문이 있는지

isExistQuestion

 

1. 공개/비공개여부 {

>공개면

> 비공개면 질문의 겟멤버와 조회하는 멤버와 같은 멤버인지

> 일치하면 

     >답변있는지 

           > 없으면 질문만 리턴

> 불일치하면 익셉션 날리거나 안된다고 메세지 입력으로 리턴 }

1. 질문상태가 QUESTION_REGISTERED이거나 QUESTION_ANSWERED인지

  > 아니라면 불가능한 질문이라고 예외메세지 날림

2. 답변이 있는지

> 있으면 답변도 같이 리턴

> 없으면 질문만 리턴

 

불리언 isPublic

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.30
2024-07-18 일의 솔로 프로젝트 중간 점검 설계  (0) 2024.07.18
까먹으면 안되는 것 - 추가  (0) 2024.07.18
URI 메서드 어떻게 쓰는데  (0) 2024.07.18
2일차  (0) 2024.07.12