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

충남대 BE_윤정훈 6주차 과제 (2단계 & 3단계) #216

Conversation

yunjunghun0116
Copy link

@yunjunghun0116 yunjunghun0116 commented Aug 1, 2024

과제 수행과정

  1. README.md 작성
  2. 새로 합류한 팀의 API 명세를 반영
  3. 프론트엔드와의 작업을 진행하기 위해 localhost:3000 origin을 허용(추후 프론트엔드 배포완료시 허용 origin을 추가할 예정,
    아마 https:배포된 주소:3000 추가하지 않을까 싶습니다.)
  4. CORS 가 정상적으로 적용되었는지 테스트코드를 작성

추가(3단계) 과제 수행과정

  1. 팀원들과 API 명세를 작성한다 ( 포인트 추가, 차감, 조회 )
  2. 차감 방식을 설정하고, 그에 맞게 포인트를 저장한다.
  3. 기존 OrderRequest 에 point 필드를 추가한다.
  4. 테스트코드를 작성한다.
  • 어쩌다보니 Files changed에 변경된 코드가 노출되지 않아서 이번에 다른 조에 합류하게 되어 기존 API 명세와 다르게 된 부분에 대해서 일부 Comment를 남겨두어 확인하시기 용이하시게 변경해두었습니다!
  • Swagger 보러가기

API 명세 일부 변경

  • 기존 충남대 3조의 FE분께서 하차하셔가지고 불가피하게 8/1(목)에 충남대 1조에 합류하여 일부 명세가 수정되었습니다.
  • 조회(Pageable사용) : List를 반환하도록 하였었는데 이를 PageResponse로 페이지정보까지 함께 반환하도록 하였습니다.
  • 도메인(Member) : Member의 name을 사용하지 않고 오직 email, password 만을 사용하기로 하였습니다.
  • 도메인(WishProduct) : quantity를 사용하지 않고 오직 누가(Member), 무엇을(Product) 에 대한 정보만을 저장하도록 하였습니다.

yunjunghun0116 and others added 30 commits July 29, 2024 11:47
동시성 테스트 추가
ci-cd 파일 추가
Schema-hidden=true 설정을 통해 응답에서 제외했다.
진행한 부분 체크작업 수행
사용하지 않는 예외코드 삭제
API 수정 사항 반영
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이와 같이 ProductPageResponse, WishProductPageResponse, GiftOrderPageResponse 를 지정하여 Page 단위로 조회를 요청하는 메서드에 대해서 페이지정보(현재 페이지, 총 페이지 수, 총 컨텐츠 수, 컨텐츠 등)를 담아 함께 반환하도록 하였습니다.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Repository에서는 List -> Page 를 반환하도록 변경하여 이를 Service계층에서는 페이지정보를 바탕으로 PageResponse를 만들어 반환하도록 하였습니다.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

기존에 존재했던 Member 의 name 필드가 사라졌습니다

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WishProduct의 quantity 필드가 사라졌습니다.
누가 무엇을 몇개나? 에서 누가 무엇을?
로 명세를 변경하였고, 그 이유는 quantity가 사용되지 않는 필드임을 확인하고 삭제하기로 하였습니다.

@yunjunghun0116 yunjunghun0116 changed the title 충남대 BE_윤정훈 6주차 과제 (2단계) 충남대 BE_윤정훈 6주차 과제 (2단계 & 3단계) Aug 2, 2024
Copy link

@asebn1 asebn1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

정훈님 안녕하세요~
3단계까지 빠르게 잘 구현해주셨네요 👍
열심히 달려가는 모습 멋있습니다!
고생많으셨습니다 :)
이번 단계 이만 머지할게요~

Comment on lines +37 to +48
#### 2단계

- [X] 배포 스크립트를 작성한다.
- [X] 클라이언트와 API 연동시 발생하는 CORS 문제에 대응한다.
- [X] 배포하여 클라이언트와 테스트를 진행한다.

#### 3단계

- [X] 포인트는 사용자별로 보유한다.
- [X] 포인트 차감 방법 : 주문 요청시 사용할 포인트도 함께 전달받아 차감한다.
- [X] 포인트를 충전할 수 있다.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 👍

Comment on lines +30 to +32
.allowedOrigins("http://localhost:3000", "localhost:3000")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

allowedMethods에 더 보충할 수 있을 것 같아요~

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

제 경우 content-type : application/json 이라서 POST 요청임에도 preflight 요청이 발생하는 것을 확인하였습니다.
이를 허용해주기 위해서 OPTIONS 메서드를 추가해주었습니다!

Comment on lines +16 to +37
@RestController
@RequestMapping("/api/points")
public class PointController implements PointApi {

private final PointService pointService;

public PointController(PointService pointService) {
this.pointService = pointService;
}

@PostMapping
public ResponseEntity<PointResponse> addPoint(@RequestAttribute("memberId") Long memberId, @Valid @RequestBody PointRequest pointRequest) {
var point = pointService.addPoint(memberId, pointRequest.point());
return ResponseEntity.ok(point);
}

@GetMapping
public ResponseEntity<PointResponse> getPoint(@RequestAttribute("memberId") Long memberId) {
var point = pointService.getPoint(memberId);
return ResponseEntity.ok(point);
}
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

잘 구현해주셨네요~

Comment on lines +33 to +39

public PointResponse getPoint(Long memberId) {
var member = memberRepository.findById(memberId)
.orElseThrow(() -> new NotFoundElementException(memberId + "를 가진 이용자가 존재하지 않습니다."));
return PointResponse.of(member.getPoint());
}
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

트랜잭션 readOnly를 적용할 수 있을 것 같아요

@asebn1 asebn1 merged commit 30eb525 into kakao-tech-campus-2nd-step2:yunjunghun0116 Aug 2, 2024
0 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants