1. 질문들 리스트 조회 기능
구현 항목
- 질문들 리스트 DTO:
- 질문의 기본 정보(예: 질문 ID, 제목, 작성자, 공개 여부)를 포함한 DTO를 생성.
- 이 DTO는 목록 조회 시 클라이언트로 전달될 데이터 구조.
public class QuestionListDto { private Long questionId; private String title; private String createdBy; private String visibility; // PUBLIC or SECRET } - 매퍼:
- Question 엔티티를 QuestionListDto로 변환하는 매퍼 구현.
- List<Question> → List<QuestionListDto>로 변환하는 메서드 필요.
@Component public class QuestionMapper { public QuestionListDto toDto(Question question) { return new QuestionListDto( question.getId(), question.getTitle(), question.getCreatedBy(), question.getVisibility() ); } public List<QuestionListDto> toDtoList(List<Question> questions) { return questions.stream() .map(this::toDto) .collect(Collectors.toList()); } } - 서비스:
- 매퍼를 활용하여 데이터베이스에서 가져온 질문 리스트를 DTO로 변환하고 반환.
@Service public class QuestionService { private final QuestionRepository questionRepository; private final QuestionMapper questionMapper; public List<QuestionListDto> getQuestions() { List<Question> questions = questionRepository.findAll(); return questionMapper.toDtoList(questions); } }
2. 질문 조회 시 답변 포함 여부
검토 사항
- 질문을 조회했을 때 질문과 관련된 답변을 함께 반환하는지 확인해야 함.
- 질문과 답변의 관계:
- Question → List<Answer> 관계를 맺고 있다면, 질문 조회 시 답변을 함께 가져올 수 있음.
구현 방식
- 옵션 1: QuestionResponseDto에 답변을 포함.
- 질문과 함께 모든 답변 데이터를 제공.
- 옵션 2: QuestionResponseDto에 답변 ID만 포함.
- 답변 ID만 포함하고, 답변 상세 정보는 별도 API로 조회.
3. 질문 등록 시 공개 여부 설정
구현 항목
- 공개 여부 설정:
- 질문 등록 시 visibility 필드를 받아, PUBLIC 또는 SECRET 설정.
public class QuestionPostDto { private String title; private String content; private String visibility; // "PUBLIC" or "SECRET" } - 등록 시 검증:
- 질문 작성자가 본인의 질문을 SECRET으로 설정했을 경우:
- 관리자만 해당 질문을 볼 수 있도록 권한 확인.
- 서비스 로직:
@Service public class QuestionService { public void createQuestion(QuestionPostDto dto, Member member) { if ("SECRET".equals(dto.getVisibility()) && !member.isAdmin()) { throw new AccessDeniedException("SECRET 질문은 관리자만 등록할 수 있습니다."); } Question question = new Question( dto.getTitle(), dto.getContent(), member, dto.getVisibility() ); questionRepository.save(question); } }
- 질문 작성자가 본인의 질문을 SECRET으로 설정했을 경우:
4. 남은 추가 구현 사항
- 답변 삭제 처리:
- 질문이 삭제되면 해당 질문과 연관된 답변도 함께 삭제되거나 비활성화.
- 질문 검색 기능:
- 제목 또는 작성자 기준으로 질문을 검색.
- 공개 여부와 상태 값(삭제/등록/비활성화)에 따라 검색 조건 필터링.
- 질문 목록의 페이지네이션:
- 질문이 많아질 경우, 페이지네이션을 구현하여 클라이언트 성능 최적화.
- 테스트 케이스 작성:
- 질문 등록, 조회, 수정, 삭제에 대한 단위 테스트와 통합 테스트.
'spring > [실습] 솔로프로젝트' 카테고리의 다른 글
| 2024-07-30 (0) | 2024.07.30 |
|---|---|
| 2024-07-18 일의 솔로 프로젝트 중간 점검 설계 (0) | 2024.07.18 |
| URI 메서드 어떻게 쓰는데 (0) | 2024.07.18 |
| 2일차 (0) | 2024.07.12 |
| 스프링 마치고 하는 솔로프로젝트 - 게시판 추가하기 _1차 설계 (0) | 2024.07.10 |