Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

issue/187 ✨ [FEAT] 내 문의 상세조회 API 구현 #196

Merged
merged 4 commits into from
Oct 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading