Skip to content

Commit

Permalink
issue/187 ✨ [FEAT] 내 문의 상세조회 API 구현 (#196)
Browse files Browse the repository at this point in the history
* ✨ 전체 유저 중 닉네임으로 검색 API

* ✨ 유저 닉네임으로 검색(전체, 팔로우/팔로잉 중에서) API 구현

* Feat : 내 문의 상세조회 API 추가

---------

Co-authored-by: HyoBN <qls0786@naver.com>
  • Loading branch information
CYY1007 and HyoBN authored Oct 14, 2023
1 parent 5aca03e commit af71e09
Show file tree
Hide file tree
Showing 14 changed files with 235 additions and 158 deletions.
102 changes: 71 additions & 31 deletions src/main/java/zipdabang/server/apiPayload/code/CommonStatus.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import lombok.Getter;
import org.springframework.http.HttpStatus;


@Getter
@AllArgsConstructor
public enum CommonStatus implements BaseCode {
Expand All @@ -21,6 +22,11 @@ public enum CommonStatus implements BaseCode {
NICKNAME_MEMBER_NOT_EXIST(HttpStatus.OK, 2058, "해당 키워드를 포함한 닉네임을 가진 유저가 없습니다."),


// recipe response

RECIPE_NOT_FOUND(HttpStatus.OK, 2100, "조회된 레시피 목록이 없습니다"),
COMMENT_NOT_FOUND(HttpStatus.OK, 2101, "조회된 댓글 목록이 없습니다"),
TEMP_RECIPE_NOT_FOUND(HttpStatus.OK, 2102, "조회된 임시저장 레시피 목록이 없습니다"),

// market response

Expand All @@ -30,76 +36,110 @@ public enum CommonStatus implements BaseCode {

// error Codes

JWT_FORBIDDEN(HttpStatus.FORBIDDEN, 4000, "이미 로그아웃 된 토큰입니다."),
//FORBIDDEN
JWT_FORBIDDEN(HttpStatus.OK, 4000, "이미 로그아웃 된 토큰입니다."),
//FORBIDDEN
FORBIDDEN(HttpStatus.OK, 4001, "접근 권한이 없습니다."),
FORBIDDEN(HttpStatus.FORBIDDEN, 4001, "접근 권한이 없습니다."),
//BAD_REQUEST
BAD_REQUEST(HttpStatus.OK,4002 ,"잘못된 요청 입니다."),
BAD_REQUEST(HttpStatus.BAD_REQUEST,4002 ,"잘못된 요청 입니다."),
//UNAUTHORIZED
UNAUTHORIZED(HttpStatus.OK, 4003, "UnAuthorized"),
UNAUTHORIZED(HttpStatus.UNAUTHORIZED, 4003, "UnAuthorized"),
//UNAUTHORIZED
JWT_BAD_REQUEST(HttpStatus.OK, 4004,"잘못된 JWT 서명입니다."),
JWT_BAD_REQUEST(HttpStatus.UNAUTHORIZED, 4004,"잘못된 JWT 서명입니다."),
//UNAUTHORIZED
JWT_ACCESS_TOKEN_EXPIRED(HttpStatus.OK, 4005,"액세스 토큰이 만료되었습니다."),
JWT_ACCESS_TOKEN_EXPIRED(HttpStatus.UNAUTHORIZED, 4005,"액세스 토큰이 만료되었습니다."),
//UNAUTHORIZED
JWT_REFRESH_TOKEN_EXPIRED(HttpStatus.OK, 4006,"리프레시 토큰이 만료되었습니다. 다시 로그인하시기 바랍니다."),
JWT_REFRESH_TOKEN_EXPIRED(HttpStatus.UNAUTHORIZED, 4006,"리프레시 토큰이 만료되었습니다. 다시 로그인하시기 바랍니다."),
//UNAUTHORIZED
JWT_UNSUPPORTED_TOKEN(HttpStatus.OK, 4007,"지원하지 않는 JWT 토큰입니다."),
JWT_UNSUPPORTED_TOKEN(HttpStatus.UNAUTHORIZED, 4007,"지원하지 않는 JWT 토큰입니다."),
//UNAUTHORIZED
JWT_TOKEN_NOT_FOUND(HttpStatus.OK, 4008,"유효한 JWT 토큰이 없습니다."),
JWT_TOKEN_NOT_FOUND(HttpStatus.UNAUTHORIZED, 4008,"유효한 JWT 토큰이 없습니다."),
//BAD_REQUEST
FEIGN_CLIENT_ERROR_400(HttpStatus.OK, 4009, "feign에서 400번대 에러가 발생했습니다."),
FEIGN_CLIENT_ERROR_400(HttpStatus.BAD_REQUEST, 4009, "feign에서 400번대 에러가 발생했습니다."),
//NOT_FOUND
NOTIFICATION_NOT_FOUND(HttpStatus.OK, 4010, "공지를 찾을 수 없습니다."),
NOTIFICATION_NOT_FOUND(HttpStatus.NOT_FOUND, 4010, "공지를 찾을 수 없습니다."),


// member error

//BAD_REQUEST
REFRESH_TOKEN_NOT_FOUND(HttpStatus.OK, 4050,"refresh token이 필요합니다."),
REFRESH_TOKEN_NOT_FOUND(HttpStatus.BAD_REQUEST, 4050,"refresh token이 필요합니다."),
//BAD_REQUEST
LOGOUT_FAIL(HttpStatus.OK, 4051, "fcmToken, serialNumber 주세요"),
LOGOUT_FAIL(HttpStatus.BAD_REQUEST, 4051, "fcmToken, serialNumber 주세요"),
//UNAUTHORIZED
MEMBER_NOT_FOUND(HttpStatus.OK, 4052,"해당 사용자가 존재하지 않습니다"),
MEMBER_NOT_FOUND(HttpStatus.UNAUTHORIZED, 4052,"해당 사용자가 존재하지 않습니다"),
//BAD_REQUEST
NO_CATEGORY_EXIST(HttpStatus.OK, 4053, "선호하는 음료 카테고리가 잘못 되었습니다."),
NO_CATEGORY_EXIST(HttpStatus.BAD_REQUEST, 4053, "선호하는 음료 카테고리가 잘못 되었습니다."),
//BAD_REQUEST
UNDER_PAGE_INDEX_ERROR(HttpStatus.OK, 4054, "페이지 번호는 1 이상이여야 합니다."),
UNDER_PAGE_INDEX_ERROR(HttpStatus.BAD_REQUEST, 4054, "페이지 번호는 1 이상이여야 합니다."),
//BAD_REQUEST
OVER_PAGE_INDEX_ERROR(HttpStatus.OK, 4055, "페이지 번호가 페이징 범위를 초과했습니다."),
OVER_PAGE_INDEX_ERROR(HttpStatus.BAD_REQUEST, 4055, "페이지 번호가 페이징 범위를 초과했습니다."),
//BAD_REQUEST
PHONE_AUTH_NOT_FOUND(HttpStatus.OK, 4056, "인증 번호 요청이 필요합니다."),
PHONE_AUTH_NOT_FOUND(HttpStatus.BAD_REQUEST, 4056, "인증 번호 요청이 필요합니다."),
//BAD_REQUEST
PHONE_AUTH_ERROR(HttpStatus.OK, 4057, "잘못된 인증 번호 입니다."),
PHONE_AUTH_ERROR(HttpStatus.BAD_REQUEST, 4057, "잘못된 인증 번호 입니다."),
//BAD_REQUEST
PHONE_AUTH_TIMEOUT(HttpStatus.OK, 4058, "인증 시간이 초과되었습니다."),
PHONE_AUTH_TIMEOUT(HttpStatus.BAD_REQUEST, 4058, "인증 시간이 초과되었습니다."),

//FORBIDDEN
TEMP_MEMBER_FORBIDDEN(HttpStatus.OK, 4059, "해당 기능은 로그인을 해야 합니다."),
TEMP_MEMBER_FORBIDDEN(HttpStatus.FORBIDDEN, 4059, "해당 기능은 로그인을 해야 합니다."),
//BAD_REQUEST
NO_REPORT_EXIST(HttpStatus.OK, 4060, "해당 id를 가진 신고 목록이 없습니다. 잘못 보내줬어요"),
NO_REPORT_EXIST(HttpStatus.BAD_REQUEST, 4060, "해당 id를 가진 신고 목록이 없습니다. 잘못 보내줬어요"),

//BAD_REQUEST
DEREGISTER_FAIL(HttpStatus.OK, 4061, "탈퇴할 수 없는 유저입니다. 탈퇴 불가 사유가 존재합니다."),
DEREGISTER_FAIL(HttpStatus.BAD_REQUEST, 4061, "탈퇴할 수 없는 유저입니다. 탈퇴 불가 사유가 존재합니다."),

ALREADY_BLOCKED_MEMBER(HttpStatus.OK, 4062, "이미 차단된 사용자입니다."),
BLOCK_SELF(HttpStatus.OK, 4063, "자신을 차단할 수 없습니다."),
ALREADY_BLOCKED_MEMBER(HttpStatus.BAD_REQUEST, 4062, "이미 차단된 사용자입니다."),
BLOCK_SELF(HttpStatus.BAD_REQUEST, 4063, "자신을 차단할 수 없습니다."),

// BAD_REQUEST
TARGET_MEMBER_NOT_FOUND(HttpStatus.OK, 4064,"대상 사용자가 없습니다.."),
TARGET_MEMBER_NOT_FOUND(HttpStatus.BAD_REQUEST, 4064,"대상 사용자가 없습니다.."),

//FORBIDDEN
SELF_FOLLOW_FORBIDDEN(HttpStatus.OK, 4065, "스스로 팔로우는 안됩니다."),
SELF_FOLLOW_FORBIDDEN(HttpStatus.FORBIDDEN, 4065, "스스로 팔로우는 안됩니다."),

BLOCKED_MEMBER(HttpStatus.BAD_GATEWAY, 4066, "내가 차단한 사용자입니다."),

INQUERY_NOT_FOUND(HttpStatus.NOT_FOUND, 4067, "문의가 없습니다."),

BLOCKED_MEMBER(HttpStatus.OK, 4066, "내가 차단한 사용자입니다."),
NOT_MY_INQUERY(HttpStatus.BAD_REQUEST, 4068, "로그인 한 사용자의 문의가 아닙니다."),


// recipe error

//BAD_REQUEST
NULL_RECIPE_ERROR(HttpStatus.BAD_REQUEST, 4100, "레시피 작성시 누락된 내용이 있습니다."),
//BAD_REQUEST
NO_RECIPE_EXIST(HttpStatus.BAD_REQUEST, 4101, "해당 레시피가 존재하지 않습니다."),
//BAD_REQUEST
BLOCKED_USER_RECIPE(HttpStatus.BAD_REQUEST, 4102, "차단한 사용자의 레시피입니다."),
//BAD_REQUEST
WRITTEN_BY_TYPE_ERROR(HttpStatus.BAD_REQUEST, 4103, "레시피 작성자 타입이 잘못되었습니다. official, barista, common중 하나로 보내주세요."),
//BAD_REQUEST
ORDER_BY_TYPE_ERROR(HttpStatus.BAD_REQUEST, 4104, "조회 방식 타입이 잘못되었습니다. likes, views, latest중 하나로 보내주세요."),
//BAD_REQUEST
NO_RECIPE_CATEGORY_EXIST(HttpStatus.BAD_REQUEST, 4105, "해당 id를 가진 레시피 카테고리가 없습니다. 잘못 보내줬어요"),
//BAD_REQUEST
NOT_RECIPE_OWNER(HttpStatus.BAD_REQUEST, 4106, "본인이 작성한 레시피가 아닙니다. 변경할 수 없습니다"),
//BAD_REQUEST
NO_COMMENT_EXIST(HttpStatus.BAD_REQUEST, 4107, "해당 댓글이 존재하지 않습니다."),
//BAD_REQUEST
NOT_COMMENT_OWNER(HttpStatus.BAD_REQUEST, 4108, "본인이 작성한 댓글이 아닙니다. 변경할 수 없습니다"),
//BAD_REQUEST
RECIPE_OWNER(HttpStatus.BAD_REQUEST, 4109, "본인의 레시피입니다. 좋아요/스크랩/신고/차단할 수 없습니다"),
//BAD_REQUEST
COMMENT_OWNER(HttpStatus.BAD_REQUEST, 4110, "본인의 댓글입니다. 좋아요/스크랩/신고/차단할 수 없습니다"),
//BAD_REQUEST
NO_TEMP_RECIPE_EXIST(HttpStatus.BAD_REQUEST, 4111, "해당 임시저장 Id가 존재하지 않습니다."),
NOT_MATCH_RECIPE(HttpStatus.BAD_REQUEST, 4112, "해당 댓글은 넘겨준 레시피 Id에 존재하지 않습니다. 레시피 Id를 올바르게 보내주세요"),


// market error


//INTERNAL_SERVER_ERROR
INTERNAL_ERROR(HttpStatus.OK, 5000, "Internal server Error"),
INTERNAL_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, 5000, "Internal server Error"),
//INTERNAL_SERVER_ERROR
FEIGN_CLIENT_ERROR_500(HttpStatus.OK, 5001, "Inter server Error in feign client");
FEIGN_CLIENT_ERROR_500(HttpStatus.INTERNAL_SERVER_ERROR, 5001, "Inter server Error in feign client");

private final HttpStatus httpStatus;
private final Integer code;
Expand Down
65 changes: 0 additions & 65 deletions src/main/java/zipdabang/server/apiPayload/code/RecipeStatus.java

This file was deleted.

12 changes: 12 additions & 0 deletions src/main/java/zipdabang/server/converter/MemberConverter.java
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,18 @@ public static MemberResponseDto.PushAlarmListDto toPushAlarmListDto(Page<PushAla
.currentPageElements(pushAlarmDtoList.size())
.build();
}

public static MemberResponseDto.InquerySpecDto toInquerySpecDto(Inquery inquery){
List<String> imageList = inquery.getInqueryImageList().stream()
.map(InqueryImage::getImageUrl).collect(Collectors.toList());

return MemberResponseDto.InquerySpecDto.builder()
.title(inquery.getTitle())
.body(inquery.getBody())
.receiveEmail(inquery.getReceiveEmail())
.imageList(imageList)
.build();
}
}


9 changes: 4 additions & 5 deletions src/main/java/zipdabang/server/converter/RecipeConverter.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
//import zipdabang.server.aws.s3.AmazonS3Manager;
import zipdabang.server.apiPayload.code.RecipeStatus;
import zipdabang.server.apiPayload.code.CommonStatus;
import zipdabang.server.aws.s3.AmazonS3Manager;
import zipdabang.server.apiPayload.exception.handler.RecipeException;
import zipdabang.server.domain.Report;
Expand All @@ -21,7 +21,6 @@
import javax.annotation.PostConstruct;
import java.io.IOException;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import java.util.regex.Matcher;
Expand Down Expand Up @@ -254,7 +253,7 @@ public static List<Step> toStep(RecipeRequestDto.CreateRecipeDto request, Recipe
return request.getSteps().stream()
.map(step-> {
if (step.getDescription() == null)
throw new RecipeException(RecipeStatus.NULL_RECIPE_ERROR);
throw new RecipeException(CommonStatus.NULL_RECIPE_ERROR);
try {
return toStepDto(step, recipe, stepImages);
} catch (IOException e) {
Expand Down Expand Up @@ -474,7 +473,7 @@ public static Recipe toRecipe(RecipeRequestDto.CreateRecipeDto request, Multipar
if(thumbnail != null)
imageUrl = uploadThumbnail(thumbnail);
else
throw new RecipeException(RecipeStatus.NULL_RECIPE_ERROR);
throw new RecipeException(CommonStatus.NULL_RECIPE_ERROR);
recipe.setThumbnail(imageUrl);

return recipe;
Expand Down Expand Up @@ -535,7 +534,7 @@ private static Step toStepDto(RecipeRequestDto.StepDto step, Recipe recipe, List
if(stepImages != null)
imageUrl = uploadStepImage(stepImage);
else
throw new RecipeException(RecipeStatus.NULL_RECIPE_ERROR);
throw new RecipeException(CommonStatus.NULL_RECIPE_ERROR);
createdStep.setImage(imageUrl);

return createdStep;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import zipdabang.server.domain.member.Inquery;
import zipdabang.server.domain.member.Member;

import java.util.Optional;

public interface InqueryRepository extends JpaRepository<Inquery, Long> {

Page<Inquery> findByMember(Member member, PageRequest pageRequest);
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/zipdabang/server/service/MemberService.java
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,8 @@ public interface MemberService {
public Page<Member> findByNicknameContains(Integer page, String nickname);
public Page<Member> findFollowerByNicknameContains(Integer page, Long targetId, String nickname);
public Page<Member> findFollowingByNicknameContains(Integer page, Long targetId, String nickname);

Optional<Inquery> findInqueryById(Long inqueryId);

Inquery findMyInqueryById(Member member,Long inqueryId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,7 @@
import javax.annotation.PostConstruct;
import java.io.IOException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -568,4 +565,20 @@ public Page<Member> findFollowingByNicknameContains(Integer page, Long targetId,
return searchByNicknameMembers;
}


@Override
public Optional<Inquery> findInqueryById(Long inqueryId) {
return inqueryRepository.findById(inqueryId);
}

@Override
public Inquery findMyInqueryById(Member member,Long inqueryId) {

Inquery inquery = inqueryRepository.findById(inqueryId).get();

if(!Objects.equals(inquery.getMember().getMemberId(), member.getMemberId()))
throw new MemberException(CommonStatus.NOT_MY_INQUERY);

return inquery;
}
}
Loading

0 comments on commit af71e09

Please sign in to comment.