Skip to content

Commit

Permalink
Merge pull request #243 from PawWithU/feat/242-boost-post-api
Browse files Browse the repository at this point in the history
[Feature] 공고 끌어올리기 API 구현
  • Loading branch information
kyeong-hyeok authored Dec 22, 2024
2 parents 5ecd82a + 9c3028c commit 6595429
Show file tree
Hide file tree
Showing 7 changed files with 99 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,16 @@ public ResponseEntity<PostIntermediaryGetOneResponse> getIntermediaryOnePost(@Au
return ResponseEntity.ok(onePost);
}

@Operation(summary = "공고 끌어올리기", description = "공고를 끌어올립니다.",
responses = {@ApiResponse(responseCode = "204", description = "공고 끌어올리기 성공")
, @ApiResponse(responseCode = "400"
, description = "M2, 해당 이동봉사 중개를 찾을 수 없습니다. \t\n P2, 해당 공고를 찾을 수 없습니다."
, content = @Content(schema = @Schema(implementation = ErrorResponse.class)))
})
@PatchMapping(value = "/intermediaries/posts/{postId}/boost")
public ResponseEntity<Void> boostPost(@AuthenticationPrincipal UserDetails loginUser,
@PathVariable Long postId) {
postService.boostPost(loginUser.getUsername(), postId);
return ResponseEntity.noContent().build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDate;
import java.time.LocalDateTime;

public record PostCreateRequest(@NotBlank(message = "출발 지역은 필수 입력 값입니다.")
String departureLoc,
Expand Down Expand Up @@ -45,6 +46,7 @@ public static Post postToEntity(PostCreateRequest request, Dog dog, Intermediary
.status(PostStatus.RECRUITING)
.dog(dog)
.intermediary(intermediary)
.boostDate(LocalDateTime.now())
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import lombok.*;

import java.time.LocalDate;
import java.time.LocalDateTime;

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
Expand Down Expand Up @@ -42,9 +43,10 @@ public class Post extends BaseTimeEntity {
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "dog_id", nullable = false)
private Dog dog; // 강아지 id
private LocalDateTime boostDate; // 끌어올리기 날짜

@Builder
public Post(PostStatus status, String departureLoc, String arrivalLoc, LocalDate startDate, LocalDate endDate, String pickUpTime, Boolean isKennel, String content, Intermediary intermediary, Dog dog) {
public Post(PostStatus status, String departureLoc, String arrivalLoc, LocalDate startDate, LocalDate endDate, String pickUpTime, Boolean isKennel, String content, Intermediary intermediary, Dog dog, LocalDateTime boostDate) {
this.status = status;
this.departureLoc = departureLoc;
this.arrivalLoc = arrivalLoc;
Expand All @@ -55,6 +57,7 @@ public Post(PostStatus status, String departureLoc, String arrivalLoc, LocalDate
this.content = content;
this.intermediary = intermediary;
this.dog = dog;
this.boostDate = boostDate;
}

public void updateMainImage(PostImage mainImage) {
Expand All @@ -78,4 +81,6 @@ public void updatePost(String departureLoc, String arrivalLoc, LocalDate startDa
public void updateDeletedIntermediary(Intermediary deletedIntermediary) {
this.intermediary = deletedIntermediary;
}

public void updateBoostDate() { this.boostDate = LocalDateTime.now(); }
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -177,4 +178,17 @@ public PostIntermediaryGetOneResponse getIntermediaryOnePost(String email, Long
PostIntermediaryGetOneResponse response = PostIntermediaryGetOneResponse.of(onePost, onePostImages);
return response;
}

public void boostPost(String email, Long postId) {
// 이동봉사 중개
Intermediary intermediary = intermediaryRepository.findByEmail(email).orElseThrow(() -> new BadRequestException(INTERMEDIARY_NOT_FOUND));
// 공고
Post post = postRepository.findByIdAndIntermediaryIdAndStatus(postId, intermediary.getId(), PostStatus.RECRUITING).orElseThrow(() -> new BadRequestException(POST_NOT_FOUND));
LocalDateTime now = LocalDateTime.now();
// 공고 끌어올린 시점에서 48시간이 지나지 않았다면 exception
if (now.isBefore(post.getBoostDate().plusHours(48))) {
throw new BadRequestException(INVALID_BOOST_REQUEST);
}
post.updateBoostDate();
}
}
4 changes: 3 additions & 1 deletion src/main/java/com/pawwithu/connectdog/error/ErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@ public enum ErrorCode {
DOG_STATUS_NOT_FOUND("D1", "해당 근황을 찾을 수 없습니다."),

NOTIFICATION_SEND_ERROR("N1", "알림 전송을 실패했습니다."),
NOTIFICATION_NOT_FOUND("N2", "해당 알림을 찾을 수 없습니다.");
NOTIFICATION_NOT_FOUND("N2", "해당 알림을 찾을 수 없습니다."),

INVALID_BOOST_REQUEST("B1", "잘못된 끌어올리기 요청입니다.");


private final String code;
Expand Down
Loading

0 comments on commit 6595429

Please sign in to comment.