Skip to content

Commit

Permalink
Feat(#54): 사용자가 온보딩 때 선택한 지역이 아닌 커뮤니티 지역에서는 글을 작성할 수 없다.
Browse files Browse the repository at this point in the history
  • Loading branch information
versatile0010 committed Nov 17, 2023
1 parent 6f3a4f0 commit 7099a10
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.numberone.backend.domain.notificationregion.entity.NotificationRegion;
import com.numberone.backend.domain.notificationregion.repository.NotificationRegionRepository;
import com.numberone.backend.domain.token.util.SecurityContextProvider;
import com.numberone.backend.exception.conflict.UnauthorizedLocationException;
import com.numberone.backend.exception.notfound.NotFoundArticleException;
import com.numberone.backend.exception.notfound.NotFoundMemberException;
import com.numberone.backend.support.fcm.service.FcmMessageProvider;
Expand Down Expand Up @@ -110,19 +111,32 @@ public UploadArticleResponse uploadArticle(UploadArticleRequest request) {
// 4. 작성자 주소 설정
Double latitude = request.getLatitude();
Double longitude = request.getLongitude();
String address = "";
if (latitude != null && longitude != null && request.isRegionAgreementCheck()) {
// 주소가 null 이 아닌 경우에만 api 요청하여 update
String address = locationProvider.pos2address(request.getLatitude(), request.getLongitude());
address = locationProvider.pos2address(request.getLatitude(), request.getLongitude());
article.updateAddress(address);
if(!address.isEmpty()){
String[] regionInfo = address.split(" ");
article.updateAddressDetail(regionInfo);
}
}

if (!address.isEmpty()) {
String[] regionInfo = address.split(" ");
article.updateAddressDetail(regionInfo);
validateLocation(owner, address);
}

return UploadArticleResponse.of(article, imageUrls, thumbNailImageUrl);
}

public void validateLocation(Member member, String realLocation) {
List<String> regionLv2List = member.getNotificationRegions()
.stream().map(NotificationRegion::getLv2).toList();
String[] realRegions = realLocation.split(" ");

if (realRegions.length > 1 && !regionLv2List.contains(realRegions[1])) {
throw new UnauthorizedLocationException();
}
}

@Transactional
public DeleteArticleResponse deleteArticle(Long articleId) {
Article article = articleRepository.findById(articleId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import com.numberone.backend.domain.notificationregion.entity.NotificationRegion;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface NotificationRegionRepository extends JpaRepository<NotificationRegion, Long> {
void deleteAllByMemberId(Long memberId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.numberone.backend.exception.conflict;

import static com.numberone.backend.exception.context.CustomExceptionContext.UNAUTHORIZED_LOCATION_ERROR;

public class UnauthorizedLocationException extends ConflictException {
public UnauthorizedLocationException() {
super(UNAUTHORIZED_LOCATION_ERROR);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ public enum CustomExceptionContext implements ExceptionContext {
S3_MULTIPART_MISSING("Multipart 파일이 null 이거나 없습니다.", 4001),

// DISASTER 관련 예외
INVALID_DISASTER_TYPE("존재하지 않는 재난 유형입니다.",5000),
NOT_FOUND_API("데이터 수집을 위한 API 요청이 실패했습니다.",5001),
NOT_FOUND_CRAWLING("데이터 수집을 위한 크롤링이 실패했습니다.",5002),
INVALID_DISASTER_TYPE("존재하지 않는 재난 유형입니다.", 5000),
NOT_FOUND_API("데이터 수집을 위한 API 요청이 실패했습니다.", 5001),
NOT_FOUND_CRAWLING("데이터 수집을 위한 크롤링이 실패했습니다.", 5002),
NOT_FOUND_DISASTER("존재하지 않는 재난상황입니다.", 5003),

// fcm 관련 예외
Expand All @@ -37,13 +37,14 @@ public enum CustomExceptionContext implements ExceptionContext {
//후원 페이지 관련 예외
NOT_FOUND_SUPPORT("존재하지 않는 후원 관계입니다.", 7000),
NOT_FOUND_SPONSOR("존재하지 않는 후원입니다.", 7001),
BAD_REQUEST_HEART("후원을 하기에는 사용자의 마음 갯수가 부족합니다.",7002),
BAD_REQUEST_HEART("후원을 하기에는 사용자의 마음 갯수가 부족합니다.", 7002),

// article 관련 예외
NOT_FOUND_ARTICLE("해당 게시글을 찾을 수 없습니다.", 8000),

// article image 관련 예외
NOT_FOUND_ARTICLE_IMAGE("해당 이미지를 찾을 수 없습니다.", 9000),
UNAUTHORIZED_LOCATION_ERROR("사용자가 해당 요청을 처리할 수 없는 지역에 위치하고 있습니다.", 9001),

// comment 관련 예외
NOT_FOUND_COMMENT("해당 댓글을 찾을 수 없습니다.", 10000),
Expand All @@ -54,8 +55,7 @@ public enum CustomExceptionContext implements ExceptionContext {

//conversation 관련 예외
NOT_FOUND_CONVERSATION("해당 대화를 찾을 수 없습니다.", 12000),
BAD_REQUEST_CONVERSATION_SORT("정렬 기준 값을 올바르게 전달해주세요. (popularity 또는 time)",12001)
;
BAD_REQUEST_CONVERSATION_SORT("정렬 기준 값을 올바르게 전달해주세요. (popularity 또는 time)", 12001);

private final String message;
private final int code;
Expand Down

0 comments on commit 7099a10

Please sign in to comment.