Skip to content

Commit

Permalink
[Feat] 게시글 추천 및 추천 취소 API
Browse files Browse the repository at this point in the history
  • Loading branch information
isExample committed Sep 25, 2023
1 parent 9c01086 commit 650d9dd
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@
import HeyPorori.transaction.config.BaseException;
import HeyPorori.transaction.config.BaseResponse;
import HeyPorori.transaction.config.BaseResponseStatus;
import HeyPorori.transaction.dto.CreatePostReq;
import HeyPorori.transaction.dto.PostDetailRes;
import HeyPorori.transaction.dto.PostsRes;
import HeyPorori.transaction.dto.PreSignedUrlRes;
import HeyPorori.transaction.dto.*;
import HeyPorori.transaction.service.AmazonS3Service;
import HeyPorori.transaction.service.TransactionService;
import HeyPorori.transaction.service.UserService;
Expand Down Expand Up @@ -81,4 +78,12 @@ public BaseResponse<String> deletePost(@RequestHeader("Authorization") String to
transactionService.deletePost(token, transactionId);
return new BaseResponse<>("게시글이 삭제되었습니다.");
}

@Operation(summary = "중고거래 게시글 추천 API", description = "중고거래 서비스의 거래 게시글을 추천하거나 추천 취소하기 위한 API입니다.")
@ApiResponse(responseCode = "200", description = "요청 성공", content = @Content(mediaType = "application/json", schema = @Schema(implementation = BaseResponse.class)))
@PostMapping("/recommend")
public BaseResponse<String> recommendPost(@RequestHeader("Authorization") String token, @RequestBody RecommendPostReq req) throws BaseException {
transactionService.recommendPost(token, req);
return new BaseResponse<>("게시글을 추천했습니다.");
}
}
19 changes: 18 additions & 1 deletion src/main/java/HeyPorori/transaction/domain/Recommend.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package HeyPorori.transaction.domain;

import HeyPorori.transaction.config.BaseTimeEntity;
import HeyPorori.transaction.dto.CreatePostReq;
import lombok.*;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;

import javax.persistence.*;

Expand All @@ -11,6 +14,8 @@
@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "recommend")
@DynamicInsert
@DynamicUpdate
public class Recommend extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand All @@ -28,8 +33,20 @@ public class Recommend extends BaseTimeEntity {
private String status;

@Builder
public Recommend(Transaction transactionId, Long userId){
public Recommend(Transaction transactionId, Long userId, String status){
this.transactionId = transactionId;
this.userId = userId;
this.status = status;
}

public static Recommend toEntity(Transaction transaction, Long userId){
return Recommend.builder()
.transactionId(transaction)
.userId(userId)
.build();
}

public void changeStatus(String status) {
this.status = status;
}
}
19 changes: 19 additions & 0 deletions src/main/java/HeyPorori/transaction/dto/RecommendPostReq.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package HeyPorori.transaction.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.util.List;
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class RecommendPostReq {
private Long transactionId;
@Pattern(regexp = "^(INACTIVE|ACTIVE)$", message = "유효하지 않은 상태입니다.")
private String toStatus;
@Pattern(regexp = "^(INACTIVE|ACTIVE)$", message = "유효하지 않은 상태입니다.")
private String fromStatus;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import javax.swing.text.html.Option;
import java.util.Optional;

@Repository
public interface RecommendRepository extends JpaRepository<Recommend, Long> {
boolean existsByTransactionIdAndUserId(Transaction transaction, Long userId);
Recommend findByTransactionIdAndUserIdAndStatus(Transaction transaction, Long userId, String status);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,9 @@
import HeyPorori.transaction.config.BaseException;
import HeyPorori.transaction.config.BaseResponseStatus;
import HeyPorori.transaction.domain.Category;
import HeyPorori.transaction.domain.Recommend;
import HeyPorori.transaction.domain.Transaction;
import HeyPorori.transaction.dto.CreatePostReq;
import HeyPorori.transaction.dto.PostDetailRes;
import HeyPorori.transaction.dto.PostsRes;
import HeyPorori.transaction.dto.UserInfoRes;
import HeyPorori.transaction.dto.*;
import HeyPorori.transaction.repository.RecommendRepository;
import HeyPorori.transaction.repository.TransactionRepository;
import lombok.RequiredArgsConstructor;
Expand All @@ -18,6 +16,7 @@
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

@Service
@Transactional
Expand Down Expand Up @@ -73,6 +72,23 @@ public void deletePost(String token, Long transactionId){
transactionRepository.save(txn);
}

public void recommendPost(String token, RecommendPostReq req){
Long userId = userService.getUserId(token);
Transaction txn = transactionRepository.findByTransactionIdAndStatus(req.getTransactionId(), "ACTIVE")
.orElseThrow(() -> new BaseException(BaseResponseStatus.POST_NOT_FOUND));
Recommend recommend = recommendRepository.findByTransactionIdAndUserIdAndStatus(txn, userId, req.getFromStatus());
if(recommend == null && req.getToStatus().equals("ACTIVE")){
Recommend newRecommend = Recommend.toEntity(txn, userId);
recommendRepository.save(newRecommend);
} else{
if(recommend != null && recommend.getStatus().equals(req.getFromStatus())){
recommend.changeStatus(req.getToStatus());
} else{
new IllegalArgumentException("추천 상태가 예상된 상태와 같지 않습니다.");
}
}
}

public String toFormattedDate(LocalDateTime baseDateTime){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd");
return baseDateTime.format(formatter);
Expand Down

0 comments on commit 650d9dd

Please sign in to comment.