Skip to content

Commit 14820ef

Browse files
authored
리뷰 관련 Mock Api 기능 구현 (#152)
1 parent 848ec08 commit 14820ef

File tree

9 files changed

+166
-0
lines changed

9 files changed

+166
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.backend.domain.review.controller;
2+
3+
import com.backend.domain.member.dto.MemberMyInfoResponseDto;
4+
import com.backend.domain.review.dto.ReviewEditResponseDto;
5+
import com.backend.domain.review.dto.ReviewResponseDto;
6+
import com.backend.domain.review.dto.ReviewWriteRequestDto;
7+
import com.backend.domain.review.dto.ReviewWriteResponseDto;
8+
import com.backend.domain.review.service.ReviewService;
9+
import com.backend.global.response.RsData;
10+
import io.swagger.v3.oas.annotations.Operation;
11+
import io.swagger.v3.oas.annotations.tags.Tag;
12+
import jakarta.validation.Valid;
13+
import lombok.RequiredArgsConstructor;
14+
import org.springframework.http.ResponseEntity;
15+
import org.springframework.security.core.Authentication;
16+
import org.springframework.stereotype.Controller;
17+
import org.springframework.web.bind.annotation.*;
18+
19+
import java.time.Instant;
20+
import java.time.LocalDateTime;
21+
import java.util.Date;
22+
23+
@Controller
24+
@RequestMapping("/api/v1")
25+
@RequiredArgsConstructor
26+
@Tag(name = "Member", description = "회원 관련 API")
27+
public class ApiV1ReviewController {
28+
private final ReviewService reviewService;
29+
30+
@Operation(summary = "리뷰 작성 API", description = "상품 리뷰 작성")
31+
@PostMapping("/reviews/products")
32+
public ResponseEntity<RsData<ReviewWriteResponseDto>> reviewCreate(Authentication authentication, @Valid @RequestPart ReviewWriteRequestDto reviewWriteRequestDto) {
33+
ReviewWriteResponseDto reviewWriteResponseDto = new ReviewWriteResponseDto(1L, "유저1", "상품1", "좋은 거래였어요!", true);
34+
return ResponseEntity.ok(new RsData<>("200", "리뷰 작성이 완료되었습니다.", reviewWriteResponseDto));
35+
}
36+
37+
@Operation(summary = "리뷰 조회 API", description = "상품 리뷰 조회")
38+
@GetMapping("/reviews/products/{id}")
39+
public ResponseEntity<RsData<ReviewResponseDto>> reviewInfo(Authentication authentication, @PathVariable Long id) {
40+
ReviewResponseDto reviewResponseDto = new ReviewResponseDto(1L, "유저1", 1L,
41+
"좋은 거래였어요!", true, LocalDateTime.from(Instant.now()), LocalDateTime.from(Instant.now()));
42+
return ResponseEntity.ok(new RsData<>("200", "리뷰 조회가 완료되었습니다.", reviewResponseDto));
43+
}
44+
45+
@Operation(summary = "리뷰 삭제 API", description = "상품 리뷰 삭제")
46+
@DeleteMapping("/reviews/products")
47+
public ResponseEntity<RsData<ReviewWriteResponseDto>> reviewDelete(Authentication authentication, @Valid @RequestPart ReviewWriteRequestDto reviewWriteRequestDto) {
48+
return ResponseEntity.ok(new RsData<>("200", "리뷰 삭제가 완료되었습니다.", null));
49+
}
50+
51+
@Operation(summary = "리뷰 수정 API", description = "상품 리뷰 수정")
52+
@PutMapping("/reviews/products")
53+
public ResponseEntity<RsData<ReviewEditResponseDto>> reviewModify(Authentication authentication, @Valid @RequestPart ReviewWriteRequestDto reviewWriteRequestDto) {
54+
ReviewEditResponseDto reviewEditResponseDto = new ReviewEditResponseDto(1L, "유저1", "상품1", "상품이 별로였어요!", false);
55+
return ResponseEntity.ok(new RsData<>("200", "리뷰 수정이 완료되었습니다.", reviewEditResponseDto));
56+
}
57+
58+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.backend.domain.review.dto;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.NotBlank;
5+
6+
public record ReviewEditRequestDto(
7+
@Schema(description = "상품 ID", example = "1")
8+
@NotBlank(message = "상품 ID는 필수 입력값 입니다.")
9+
Long productId,
10+
11+
@Schema(description = "내용", example = "좋은 거래였습니다")
12+
@NotBlank(message = "내용은 필수 입력값 입니다.")
13+
String comment,
14+
15+
@Schema(description = "만족", example = "만족, 불만족")
16+
@NotBlank(message = "만족값은 필수 입력값 입니다.")
17+
Boolean isSatisfied
18+
) {
19+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.backend.domain.review.dto;
2+
3+
public record ReviewEditResponseDto(
4+
Long reviewerId,
5+
String reviewerName,
6+
String ProductName,
7+
String comment,
8+
Boolean isSatisfied
9+
) {
10+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.backend.domain.review.dto;
2+
3+
import java.time.LocalDateTime;
4+
5+
public record ReviewResponseDto(
6+
Long reviewerId,
7+
String reviewerName,
8+
Long productId,
9+
String comment,
10+
Boolean isSatisfied,
11+
LocalDateTime createDate,
12+
LocalDateTime modifyDate
13+
) {
14+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.backend.domain.review.dto;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.NotBlank;
5+
6+
public record ReviewWriteRequestDto(
7+
@Schema(description = "상품 ID", example = "1")
8+
@NotBlank(message = "상품 ID는 필수 입력값 입니다.")
9+
Long productId,
10+
11+
@Schema(description = "내용", example = "좋은 거래였습니다")
12+
@NotBlank(message = "내용은 필수 입력값 입니다.")
13+
String comment,
14+
15+
@Schema(description = "만족", example = "만족, 불만족")
16+
@NotBlank(message = "만족값은 필수 입력값 입니다.")
17+
Boolean isSatisfied
18+
) {
19+
}
20+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.backend.domain.review.dto;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.NotBlank;
5+
6+
public record ReviewWriteResponseDto(
7+
Long reviewerId,
8+
String reviewerName,
9+
String ProductName,
10+
String comment,
11+
Boolean isSatisfied
12+
) {
13+
}

src/main/java/com/backend/domain/review/entity/Review.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
@Getter @Setter
1212
@NoArgsConstructor
1313
@AllArgsConstructor
14+
@Builder
1415
public class Review extends BaseEntity {
1516

1617
@Column(nullable = false, length = 255)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.backend.domain.review.repository;
2+
3+
import com.backend.domain.review.entity.Review;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
@Repository
8+
public interface ReviewRepository extends JpaRepository<Review, Long> {
9+
10+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.backend.domain.review.service;
2+
3+
4+
import com.backend.domain.review.dto.ReviewWriteRequestDto;
5+
import com.backend.domain.review.dto.ReviewWriteResponseDto;
6+
import com.backend.global.response.RsData;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.stereotype.Service;
9+
import org.springframework.transaction.annotation.Transactional;
10+
11+
@Service
12+
@RequiredArgsConstructor
13+
@Transactional
14+
public class ReviewService {
15+
16+
public RsData<ReviewWriteResponseDto> create(String name, ReviewWriteRequestDto reviewWriteRequestDto) {
17+
18+
19+
return new RsData<>("200-1", "리뷰 작성이 완료되었습니다", responseDto);
20+
}
21+
}

0 commit comments

Comments
 (0)