diff --git a/src/main/java/com/yello/server/domain/admin/controller/AdminController.java b/src/main/java/com/yello/server/domain/admin/controller/AdminController.java index 7c6bc4a0..54f81d07 100644 --- a/src/main/java/com/yello/server/domain/admin/controller/AdminController.java +++ b/src/main/java/com/yello/server/domain/admin/controller/AdminController.java @@ -1,17 +1,26 @@ package com.yello.server.domain.admin.controller; +import static com.yello.server.global.common.SuccessCode.CREATE_VOTE_SUCCESS; import static com.yello.server.global.common.SuccessCode.DELETE_COOLDOWN_ADMIN_SUCCESS; +import static com.yello.server.global.common.SuccessCode.DELETE_QUESTION_ADMIN_SUCCESS; import static com.yello.server.global.common.SuccessCode.DELETE_USER_ADMIN_SUCCESS; import static com.yello.server.global.common.SuccessCode.LOGIN_USER_ADMIN_SUCCESS; import static com.yello.server.global.common.SuccessCode.READ_COOLDOWN_ADMIN_SUCCESS; +import static com.yello.server.global.common.SuccessCode.READ_QUESTION_ADMIN_SUCCESS; +import static com.yello.server.global.common.SuccessCode.READ_QUESTION_DETAIL_ADMIN_SUCCESS; import static com.yello.server.global.common.SuccessCode.READ_USER_ADMIN_SUCCESS; import static com.yello.server.global.common.SuccessCode.READ_USER_DETAIL_ADMIN_SUCCESS; import static com.yello.server.global.common.SuccessCode.UPDATE_USER_DETAIL_ADMIN_SUCCESS; +import static com.yello.server.global.common.factory.PaginationFactory.createPageable; +import static com.yello.server.global.common.factory.PaginationFactory.createPageableLimitTen; import com.yello.server.domain.admin.dto.request.AdminLoginRequest; +import com.yello.server.domain.admin.dto.request.AdminQuestionVoteRequest; import com.yello.server.domain.admin.dto.request.AdminUserDetailRequest; import com.yello.server.domain.admin.dto.response.AdminCooldownResponse; import com.yello.server.domain.admin.dto.response.AdminLoginResponse; +import com.yello.server.domain.admin.dto.response.AdminQuestionDetailResponse; +import com.yello.server.domain.admin.dto.response.AdminQuestionResponse; import com.yello.server.domain.admin.dto.response.AdminUserDetailResponse; import com.yello.server.domain.admin.dto.response.AdminUserResponse; import com.yello.server.domain.admin.service.AdminService; @@ -19,7 +28,7 @@ import com.yello.server.global.common.annotation.AccessTokenUser; import com.yello.server.global.common.dto.BaseResponse; import com.yello.server.global.common.dto.EmptyObject; -import com.yello.server.global.common.factory.PaginationFactory; +import com.yello.server.infrastructure.firebase.service.NotificationService; import javax.annotation.Nullable; import lombok.RequiredArgsConstructor; import lombok.val; @@ -38,6 +47,7 @@ public class AdminController { private final AdminService adminService; + private final NotificationService notificationService; @PostMapping("/login") public BaseResponse postAdminLogin(@RequestBody AdminLoginRequest request) { @@ -50,8 +60,8 @@ public BaseResponse getUserAdmin(@AccessTokenUser User user, @Nullable @RequestParam String field, @Nullable @RequestParam String value) { val data = (field == null && value == null) - ? adminService.findUser(user.getId(), PaginationFactory.createPageableLimitTen(page)) - : adminService.findUserContaining(user.getId(), PaginationFactory.createPageableLimitTen(page), + ? adminService.findUser(user.getId(), createPageableLimitTen(page)) + : adminService.findUserContaining(user.getId(), createPageableLimitTen(page), field, value); return BaseResponse.success(READ_USER_ADMIN_SUCCESS, data); } @@ -79,8 +89,8 @@ public BaseResponse deleteUser(@AccessTokenUser User user, @RequestParam Long us public BaseResponse getCooldownAdmin(@AccessTokenUser User user, @RequestParam Integer page, @Nullable @RequestParam String yelloId) { val data = yelloId == null - ? adminService.findCooldown(user.getId(), PaginationFactory.createPageableLimitTen(page)) - : adminService.findCooldownContaining(user.getId(), PaginationFactory.createPageableLimitTen(page), + ? adminService.findCooldown(user.getId(), createPageableLimitTen(page)) + : adminService.findCooldownContaining(user.getId(), createPageableLimitTen(page), yelloId); return BaseResponse.success(READ_COOLDOWN_ADMIN_SUCCESS, data); } @@ -90,4 +100,33 @@ public BaseResponse deleteCooldown(@AccessTokenUser User user, @RequestParam Lon adminService.deleteCooldown(user.getId(), cooldownId); return BaseResponse.success(DELETE_COOLDOWN_ADMIN_SUCCESS); } + + @GetMapping("/question") + public BaseResponse getQuestionAdmin(@AccessTokenUser User user, + @RequestParam Integer page) { + val data = adminService.findQuestion(user.getId(), createPageable(page, 20)); + return BaseResponse.success(READ_QUESTION_ADMIN_SUCCESS, data); + } + + @GetMapping("/question/{id}") + public BaseResponse getQuestionDetailAdmin(@AccessTokenUser User user, + @PathVariable Long id) { + val data = adminService.findQuestionDetail(user.getId(), id); + return BaseResponse.success(READ_QUESTION_DETAIL_ADMIN_SUCCESS, data); + } + + @PostMapping("/question/{id}") + public BaseResponse postQuestionSendAdmin(@AccessTokenUser User user, + @PathVariable Long id, @RequestBody AdminQuestionVoteRequest request) { + val data = adminService.createVote(user.getId(), id, request); + data.forEach(notificationService::sendYelloNotification); + + return BaseResponse.success(CREATE_VOTE_SUCCESS, EmptyObject.builder().build()); + } + + @DeleteMapping("/question") + public BaseResponse deleteQuestion(@AccessTokenUser User user, @RequestParam Long questionId) { + adminService.deleteQuestion(user.getId(), questionId); + return BaseResponse.success(DELETE_QUESTION_ADMIN_SUCCESS); + } } diff --git a/src/main/java/com/yello/server/domain/admin/dto/request/AdminQuestionVoteContentVO.java b/src/main/java/com/yello/server/domain/admin/dto/request/AdminQuestionVoteContentVO.java new file mode 100644 index 00000000..b6904f4f --- /dev/null +++ b/src/main/java/com/yello/server/domain/admin/dto/request/AdminQuestionVoteContentVO.java @@ -0,0 +1,13 @@ +package com.yello.server.domain.admin.dto.request; + +import lombok.Builder; + +@Builder +public record AdminQuestionVoteContentVO( + Long senderId, + Long receiverId, + String keyword, + Integer colorIndex +) { + +} diff --git a/src/main/java/com/yello/server/domain/admin/dto/request/AdminQuestionVoteRequest.java b/src/main/java/com/yello/server/domain/admin/dto/request/AdminQuestionVoteRequest.java new file mode 100644 index 00000000..a8dbb0fd --- /dev/null +++ b/src/main/java/com/yello/server/domain/admin/dto/request/AdminQuestionVoteRequest.java @@ -0,0 +1,11 @@ +package com.yello.server.domain.admin.dto.request; + +import java.util.List; +import lombok.Builder; + +@Builder +public record AdminQuestionVoteRequest( + List voteContentList +) { + +} diff --git a/src/main/java/com/yello/server/domain/admin/dto/response/AdminQuestionContentVO.java b/src/main/java/com/yello/server/domain/admin/dto/response/AdminQuestionContentVO.java new file mode 100644 index 00000000..da3860e5 --- /dev/null +++ b/src/main/java/com/yello/server/domain/admin/dto/response/AdminQuestionContentVO.java @@ -0,0 +1,25 @@ +package com.yello.server.domain.admin.dto.response; + +import com.yello.server.domain.question.entity.Question; +import lombok.Builder; + +@Builder +public record AdminQuestionContentVO( + Long id, + String nameHead, + String nameFoot, + String keywordHead, + String keywordFoot +) { + + public static AdminQuestionContentVO of(Question question) { + + return AdminQuestionContentVO.builder() + .id(question.getId()) + .nameHead(question.getNameHead()) + .nameFoot(question.getNameFoot()) + .keywordHead(question.getKeywordHead()) + .keywordFoot(question.getKeywordFoot()) + .build(); + } +} diff --git a/src/main/java/com/yello/server/domain/admin/dto/response/AdminQuestionDetailResponse.java b/src/main/java/com/yello/server/domain/admin/dto/response/AdminQuestionDetailResponse.java new file mode 100644 index 00000000..81832b3a --- /dev/null +++ b/src/main/java/com/yello/server/domain/admin/dto/response/AdminQuestionDetailResponse.java @@ -0,0 +1,31 @@ +package com.yello.server.domain.admin.dto.response; + +import com.yello.server.domain.keyword.entity.Keyword; +import com.yello.server.domain.question.entity.Question; +import java.util.List; +import lombok.Builder; + +@Builder +public record AdminQuestionDetailResponse( + Long id, + String nameHead, + String nameFoot, + String keywordHead, + String keywordFoot, + List keywordList +) { + + public static AdminQuestionDetailResponse of(Question question) { + return AdminQuestionDetailResponse.builder() + .id(question.getId()) + .nameHead(question.getNameHead()) + .nameFoot(question.getNameFoot()) + .keywordHead(question.getKeywordHead()) + .keywordFoot(question.getKeywordFoot()) + .keywordList(question.getKeywordList() + .stream() + .map((Keyword::getKeywordName)) + .toList()) + .build(); + } +} diff --git a/src/main/java/com/yello/server/domain/admin/dto/response/AdminQuestionResponse.java b/src/main/java/com/yello/server/domain/admin/dto/response/AdminQuestionResponse.java new file mode 100644 index 00000000..9351eb28 --- /dev/null +++ b/src/main/java/com/yello/server/domain/admin/dto/response/AdminQuestionResponse.java @@ -0,0 +1,20 @@ +package com.yello.server.domain.admin.dto.response; + +import java.util.List; +import lombok.Builder; + +@Builder +public record AdminQuestionResponse( + Long pageCount, + Long totalCount, + List questionList +) { + + public static AdminQuestionResponse of(Long totalCount, List questionList) { + return AdminQuestionResponse.builder() + .pageCount(totalCount % 20 == 0 ? totalCount / 20 : totalCount / 20 + 1) + .totalCount(totalCount) + .questionList(questionList) + .build(); + } +} diff --git a/src/main/java/com/yello/server/domain/admin/dto/response/AdminUserContentVO.java b/src/main/java/com/yello/server/domain/admin/dto/response/AdminUserContentVO.java index 91ff4549..62d9fdda 100644 --- a/src/main/java/com/yello/server/domain/admin/dto/response/AdminUserContentVO.java +++ b/src/main/java/com/yello/server/domain/admin/dto/response/AdminUserContentVO.java @@ -12,6 +12,7 @@ public record AdminUserContentVO( String name, String yelloId, String group, + String imageUrl, String createdAt, String deletedAt ) { @@ -24,6 +25,7 @@ public static AdminUserContentVO of(User user) { .name(user.getName()) .yelloId(user.getYelloId()) .group(userGroup == null ? "" : userGroup.toString()) + .imageUrl(user.getProfileImage()) .createdAt(toDateFormattedString(user.getCreatedAt())) .deletedAt(toDateFormattedString(user.getDeletedAt())) .build(); diff --git a/src/main/java/com/yello/server/domain/admin/service/AdminService.java b/src/main/java/com/yello/server/domain/admin/service/AdminService.java index 9fa01c79..3e6e8db3 100644 --- a/src/main/java/com/yello/server/domain/admin/service/AdminService.java +++ b/src/main/java/com/yello/server/domain/admin/service/AdminService.java @@ -7,10 +7,14 @@ import static com.yello.server.global.common.ErrorCode.YELLOID_CONFLICT_USER_EXCEPTION; import com.yello.server.domain.admin.dto.request.AdminLoginRequest; +import com.yello.server.domain.admin.dto.request.AdminQuestionVoteRequest; import com.yello.server.domain.admin.dto.request.AdminUserDetailRequest; import com.yello.server.domain.admin.dto.response.AdminCooldownContentVO; import com.yello.server.domain.admin.dto.response.AdminCooldownResponse; import com.yello.server.domain.admin.dto.response.AdminLoginResponse; +import com.yello.server.domain.admin.dto.response.AdminQuestionContentVO; +import com.yello.server.domain.admin.dto.response.AdminQuestionDetailResponse; +import com.yello.server.domain.admin.dto.response.AdminQuestionResponse; import com.yello.server.domain.admin.dto.response.AdminUserContentVO; import com.yello.server.domain.admin.dto.response.AdminUserDetailResponse; import com.yello.server.domain.admin.dto.response.AdminUserResponse; @@ -20,15 +24,20 @@ import com.yello.server.domain.authorization.service.TokenProvider; import com.yello.server.domain.cooldown.entity.Cooldown; import com.yello.server.domain.cooldown.repository.CooldownRepository; +import com.yello.server.domain.question.entity.Question; +import com.yello.server.domain.question.repository.QuestionRepository; import com.yello.server.domain.user.entity.Gender; import com.yello.server.domain.user.entity.User; import com.yello.server.domain.user.exception.UserConflictException; import com.yello.server.domain.user.repository.UserRepository; import com.yello.server.domain.user.service.UserManager; +import com.yello.server.domain.vote.entity.Vote; +import com.yello.server.domain.vote.repository.VoteRepository; import com.yello.server.global.common.dto.EmptyObject; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Pageable; @@ -44,6 +53,8 @@ public class AdminService { private final UserManager userManager; private final TokenProvider tokenProvider; private final CooldownRepository cooldownRepository; + private final QuestionRepository questionRepository; + private final VoteRepository voteRepository; private final UserAdminRepository userAdminRepository; @Value("${admin.password}") @@ -123,7 +134,7 @@ public EmptyObject updateUserDetail(Long adminId, Long userId, AdminUserDetailRe userAdminRepository.getByUser(admin); // logic - final User user = userRepository.getById(userId); + final User user = userRepository.getByIdNotFiltered(userId); userRepository.findByUuidNotFiltered(request.uuid()) .ifPresent(action -> { @@ -154,7 +165,7 @@ public void deleteUser(Long adminId, Long userId) { // exception final User admin = userRepository.getById(adminId); userAdminRepository.getByUser(admin); - final User user = userRepository.getById(userId); + final User user = userRepository.getByIdNotFiltered(userId); // logic userRepository.delete(user); @@ -198,4 +209,70 @@ public void deleteCooldown(Long adminId, Long cooldownId) { // logic cooldownRepository.delete(cooldown); } + + public AdminQuestionResponse findQuestion(Long adminId, Pageable page) { + // exception + final User admin = userRepository.getById(adminId); + userAdminRepository.getByUser(admin); + + // logic + final Long totalCount = questionRepository.count(); + final List list = questionRepository.findAll(page).stream() + .map(AdminQuestionContentVO::of) + .toList(); + + return AdminQuestionResponse.of(totalCount, list); + } + + public AdminQuestionDetailResponse findQuestionDetail(Long adminId, Long questionId) { + // exception + final User admin = userRepository.getById(adminId); + userAdminRepository.getByUser(admin); + final Question question = questionRepository.getById(questionId); + + // logic + + return AdminQuestionDetailResponse.of(question); + } + + @Transactional + public List createVote(Long adminId, Long questionId, AdminQuestionVoteRequest request) { + // exception + final User admin = userRepository.getById(adminId); + userAdminRepository.getByUser(admin); + final Question question = questionRepository.getById(questionId); + + // logic + final List result = new ArrayList<>(); + request.voteContentList().forEach((voteContent -> { + final Optional sender = userRepository.findByIdNotFiltered(voteContent.senderId()); + final Optional receiver = userRepository.findByIdNotFiltered(voteContent.receiverId()); + + if (sender.isPresent() && receiver.isPresent()) { + final Vote vote = Vote.createVote( + voteContent.keyword(), + sender.get(), + receiver.get(), + question, + voteContent.colorIndex() + ); + + voteRepository.save(vote); + result.add(vote); + } + })); + + return result; + } + + @Transactional + public void deleteQuestion(Long adminId, Long questionId) { + // exception + final User admin = userRepository.getById(adminId); + userAdminRepository.getByUser(admin); + final Question question = questionRepository.getById(questionId); + + // logic + questionRepository.delete(question); + } } diff --git a/src/main/java/com/yello/server/domain/question/repository/QuestionRepository.java b/src/main/java/com/yello/server/domain/question/repository/QuestionRepository.java index 81802810..c1b12289 100644 --- a/src/main/java/com/yello/server/domain/question/repository/QuestionRepository.java +++ b/src/main/java/com/yello/server/domain/question/repository/QuestionRepository.java @@ -3,14 +3,24 @@ import com.yello.server.domain.question.entity.Question; import java.util.List; import java.util.Optional; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; public interface QuestionRepository { + Long count(); + List findAll(); - Question findById(Long id); + Page findAll(Pageable page); + + Question getById(Long id); + + Optional findById(Long id); Question save(Question question); Optional findByQuestionContent(String nameHead, String nameFoot, String keywordHead, String keywordFoot); + + void delete(Question question); } diff --git a/src/main/java/com/yello/server/domain/question/repository/QuestionRepositoryImpl.java b/src/main/java/com/yello/server/domain/question/repository/QuestionRepositoryImpl.java index c35a4760..1f3d5e85 100644 --- a/src/main/java/com/yello/server/domain/question/repository/QuestionRepositoryImpl.java +++ b/src/main/java/com/yello/server/domain/question/repository/QuestionRepositoryImpl.java @@ -7,6 +7,9 @@ import java.util.List; import java.util.Optional; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Repository; @Repository @@ -15,17 +18,35 @@ public class QuestionRepositoryImpl implements QuestionRepository { private final QuestionJpaRepository questionJpaRepository; + @Override + public Long count() { + return questionJpaRepository.count(); + } + @Override public List findAll() { return questionJpaRepository.findAll(); } @Override - public Question findById(Long id) { + public Page findAll(Pageable page) { + final List questionList = questionJpaRepository.findAll(page) + .stream() + .toList(); + return new PageImpl<>(questionList); + } + + @Override + public Question getById(Long id) { return questionJpaRepository.findById(id) .orElseThrow(() -> new QuestionException(NOT_FOUND_QUESTION_EXCEPTION)); } + @Override + public Optional findById(Long id) { + return questionJpaRepository.findById(id); + } + @Override public Question save(Question question) { return questionJpaRepository.save(question); @@ -36,4 +57,9 @@ public Optional findByQuestionContent(String nameHead, String nameFoot String keywordFoot) { return questionJpaRepository.findByQuestionContent(nameHead, nameFoot, keywordHead, keywordFoot); } + + @Override + public void delete(Question question) { + questionJpaRepository.delete(question); + } } diff --git a/src/main/java/com/yello/server/domain/user/repository/UserRepository.java b/src/main/java/com/yello/server/domain/user/repository/UserRepository.java index fbd37458..415edecf 100644 --- a/src/main/java/com/yello/server/domain/user/repository/UserRepository.java +++ b/src/main/java/com/yello/server/domain/user/repository/UserRepository.java @@ -12,6 +12,8 @@ public interface UserRepository { Optional findById(Long id); + Optional findByIdNotFiltered(Long id); + User getById(Long id); User getByIdNotFiltered(Long id); diff --git a/src/main/java/com/yello/server/domain/user/repository/UserRepositoryImpl.java b/src/main/java/com/yello/server/domain/user/repository/UserRepositoryImpl.java index 6543183d..2c2ee6f4 100644 --- a/src/main/java/com/yello/server/domain/user/repository/UserRepositoryImpl.java +++ b/src/main/java/com/yello/server/domain/user/repository/UserRepositoryImpl.java @@ -32,6 +32,11 @@ public Optional findById(Long id) { return userJpaRepository.findById(id); } + @Override + public Optional findByIdNotFiltered(Long id) { + return userJpaRepository.findByIdNotFiltered(id); + } + @Override public User getById(Long id) { return userJpaRepository.findById(id) diff --git a/src/main/java/com/yello/server/domain/vote/service/VoteManagerImpl.java b/src/main/java/com/yello/server/domain/vote/service/VoteManagerImpl.java index ab6c4978..d8884ce2 100644 --- a/src/main/java/com/yello/server/domain/vote/service/VoteManagerImpl.java +++ b/src/main/java/com/yello/server/domain/vote/service/VoteManagerImpl.java @@ -74,7 +74,7 @@ public List createVotes(Long senderId, List voteAnswers) { } User receiver = userRepository.getById(currentVote.friendId()); - Question question = questionRepository.findById(currentVote.questionId()); + Question question = questionRepository.getById(currentVote.questionId()); Vote newVote = Vote.createVote( currentVote.keywordName(), @@ -110,11 +110,11 @@ public List generateVoteQuestion(User user, List getShuffledFriends(User user) { List friendList = new ArrayList<>(friends); Collections.shuffle(friendList); - if (friends.size()==NO_FRIEND_COUNT) { + if (friends.size() == NO_FRIEND_COUNT) { throw new FriendException(LACK_USER_EXCEPTION); } diff --git a/src/main/java/com/yello/server/global/common/SuccessCode.java b/src/main/java/com/yello/server/global/common/SuccessCode.java index 9d64165f..99c72aed 100644 --- a/src/main/java/com/yello/server/global/common/SuccessCode.java +++ b/src/main/java/com/yello/server/global/common/SuccessCode.java @@ -42,6 +42,9 @@ public enum SuccessCode { DELETE_USER_ADMIN_SUCCESS(OK, "어드민 권환으로 유저 삭제에 성공하였습니다."), DELETE_COOLDOWN_ADMIN_SUCCESS(OK, "어드민 권환으로 쿨다운 삭제에 성공하였습니다."), POST_APPLE_NOTIFICATION_SUCCESS(OK, "apple 알림 처리에 성공하였습니다."), + READ_QUESTION_ADMIN_SUCCESS(OK, "어드민 페이지 질문 조회에 성공하였습니다."), + READ_QUESTION_DETAIL_ADMIN_SUCCESS(OK, "어드민 페이지 질문 상세 조회에 성공하였습니다."), + DELETE_QUESTION_ADMIN_SUCCESS(OK, "어드민 권환으로 질문지 삭제에 성공하였습니다."), /** * 201 CREATED diff --git a/src/main/java/com/yello/server/global/common/factory/PaginationFactory.java b/src/main/java/com/yello/server/global/common/factory/PaginationFactory.java index b2b26bae..11ebe5a5 100644 --- a/src/main/java/com/yello/server/global/common/factory/PaginationFactory.java +++ b/src/main/java/com/yello/server/global/common/factory/PaginationFactory.java @@ -21,12 +21,16 @@ public static Pageable createPageable(Integer page) { return PageRequest.of(page, PAGE_LIMIT); } - public static Pageable createPageableByNameSort(Integer page) { - return PageRequest.of(page, PAGE_LIMIT, Sort.by(Sort.Direction.ASC, "name")); + public static Pageable createPageable(Integer page, Integer limit) { + return PageRequest.of(page, limit); } public static Pageable createPageableLimitTen(Integer page) { - return PageRequest.of(page, PAGE_LIMIT_TEN); + return createPageable(page, PAGE_LIMIT_TEN); + } + + public static Pageable createPageableByNameSort(Integer page) { + return PageRequest.of(page, PAGE_LIMIT, Sort.by(Sort.Direction.ASC, "name")); } public static Page getPage(List list, Pageable pageable) { diff --git a/src/test/java/com/yello/server/domain/question/FakeQuestionRepository.java b/src/test/java/com/yello/server/domain/question/FakeQuestionRepository.java index da1ab169..1ca75d2e 100644 --- a/src/test/java/com/yello/server/domain/question/FakeQuestionRepository.java +++ b/src/test/java/com/yello/server/domain/question/FakeQuestionRepository.java @@ -12,6 +12,9 @@ import java.util.List; import java.util.Objects; import java.util.Optional; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.Pageable; public class FakeQuestionRepository implements QuestionRepository { @@ -20,6 +23,11 @@ public class FakeQuestionRepository implements QuestionRepository { private Long id = 0L; + @Override + public Long count() { + return (long) data.size(); + } + @Override public List findAll() { return data.stream() @@ -27,17 +35,33 @@ public List findAll() { } @Override - public Question findById(Long questionId) { + public Page findAll(Pageable pageable) { + final List questionList = data.stream() + .skip(pageable.getOffset()) + .limit(pageable.getPageSize()) + .toList(); + return new PageImpl<>(questionList); + } + + @Override + public Question getById(Long id) { return data.stream() - .filter(question -> question.getId().equals(questionId)) + .filter(question -> question.getId().equals(id)) .findFirst() .orElseThrow(() -> new QuestionNotFoundException(NOT_FOUND_QUESTION_EXCEPTION)); } + @Override + public Optional findById(Long questionId) { + return data.stream() + .filter(question -> question.getId().equals(questionId)) + .findFirst(); + } + @Override public Question save(Question question) { Question newQuestion = Question.builder() - .id(question.getId()==null ? id++ : question.getId()) + .id(question.getId() == null ? id++ : question.getId()) .nameHead(question.getNameHead()) .nameFoot(question.getNameFoot()) .keywordFoot(question.getKeywordFoot()) @@ -68,4 +92,9 @@ public Optional findByQuestionContent(String nameHead, String nameFoot && Objects.equals(question.getKeywordFoot(), keywordFoot)) .findFirst(); } + + @Override + public void delete(Question question) { + data.remove(question); + } } diff --git a/src/test/java/com/yello/server/domain/user/FakeUserRepository.java b/src/test/java/com/yello/server/domain/user/FakeUserRepository.java index b4893f49..33c7300e 100644 --- a/src/test/java/com/yello/server/domain/user/FakeUserRepository.java +++ b/src/test/java/com/yello/server/domain/user/FakeUserRepository.java @@ -55,6 +55,13 @@ public Optional findById(Long id) { .findFirst(); } + @Override + public Optional findByIdNotFiltered(Long id) { + return data.stream() + .filter(user -> user.getId().equals(id)) + .findFirst(); + } + @Override public User getById(Long id) { return data.stream() diff --git a/src/test/java/com/yello/server/domain/vote/FakeVoteManager.java b/src/test/java/com/yello/server/domain/vote/FakeVoteManager.java index e57e425c..44d9b53a 100644 --- a/src/test/java/com/yello/server/domain/vote/FakeVoteManager.java +++ b/src/test/java/com/yello/server/domain/vote/FakeVoteManager.java @@ -68,7 +68,7 @@ public List createVotes(Long senderId, List voteAnswers) { } User receiver = userRepository.getById(currentVote.friendId()); - Question question = questionRepository.findById(currentVote.questionId()); + Question question = questionRepository.getById(currentVote.questionId()); Vote newVote = Vote.createVote( currentVote.keywordName(), @@ -114,7 +114,7 @@ public int useNameHint(User sender, Vote vote) { throw new VoteForbiddenException(LACK_POINT_EXCEPTION); } - if (vote.getNameHint()!=NAME_HINT_DEFAULT) { + if (vote.getNameHint() != NAME_HINT_DEFAULT) { throw new VoteNotFoundException(INVALID_VOTE_EXCEPTION); } @@ -172,7 +172,7 @@ public List getShuffledFriends(User user) { List friendList = new ArrayList<>(friends); Collections.shuffle(friendList); - if (friends.size()==NO_FRIEND_COUNT) { + if (friends.size() == NO_FRIEND_COUNT) { throw new FriendException(LACK_USER_EXCEPTION); }