Skip to content

Commit

Permalink
Merge pull request #40 from prgrms-be-devcourse/feature/#36
Browse files Browse the repository at this point in the history
Docs: Swagger description 추가
  • Loading branch information
tnals2384 committed Sep 12, 2024
2 parents f82502d + 58bf556 commit 101a83f
Show file tree
Hide file tree
Showing 7 changed files with 92 additions and 39 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import grepp.coffee.backend.controller.member.request.CartUpdateRequest;
import grepp.coffee.backend.model.entity.cart.Cart;
import grepp.coffee.backend.model.service.member.CartService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -16,36 +18,39 @@
@RequiredArgsConstructor
@RequestMapping("/cart")
@RestController
@Tag(name = "장바구니 API")
public class CartController {

private final CartService cartService;

// 장바구니에 항목 추가
@PostMapping("/")
@Operation(summary = "장바구니 상품 등록", description = "장바구니에 상품을 등록하는 API")
public ResponseEntity<Void> addCart(@Valid @RequestBody CartRegisterRequest request) {
cartService.addCart(request);
return ResponseEntity.ok().build();
}

// 장바구니 목록 조회
@GetMapping("/{memberId}")
@Operation(summary = "장바구니 목록 조회", description = "장바구니 목록을 조회하는 API")

public ResponseEntity<List<Cart>> getCart(@PathVariable Long memberId) {
List<Cart> cartItems = cartService.getCart(memberId);
return ResponseEntity.ok(cartItems);
}

// 장바구니 수정

@PutMapping("/{cartId}")
@Operation(summary = "장바구니 상품 수정", description = "회원가입 API")
public ResponseEntity<Void> updateCart(@PathVariable Long cartId, @Valid @RequestBody CartUpdateRequest request) {
cartService.updateCart(cartId, request);
return ResponseEntity.ok().build();
}

// 장바구니 전체 항목 삭제

@DeleteMapping("/{cartId}")
@Operation(summary = "장바구니 전체 삭제", description = "장바구니에 있는 모든 상품을 삭제하는 API")
public ResponseEntity<Void> deleteCart(@PathVariable Long cartId) {
cartService.deleteCart(cartId);
return ResponseEntity.ok().build();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import grepp.coffee.backend.controller.member.request.MemberUpdateRequest;
import grepp.coffee.backend.model.entity.member.Member;
import grepp.coffee.backend.model.service.member.MemberService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import jakarta.validation.Valid;
Expand All @@ -21,45 +23,49 @@
@RequiredArgsConstructor
@RequestMapping("/account")
@RestController
@Tag(name = "회원 API")
public class MemberController {

private final MemberService memberService;

//회원 가입
@PostMapping("/signup")
@Operation(summary = "회원가입", description = "회원가입 API")
public ResponseEntity<Void> registerMember(@Valid @RequestBody MemberRegisterRequest request) {
memberService.registerMember(request);
return ResponseEntity.ok().build();
}

//로그인
@PostMapping("/login")
@Operation(summary = "로그인", description = "로그인 API")
public ResponseEntity<Member> login(HttpServletRequest httpServletRequest,
@Valid @RequestBody MemberLoginRequest request) {

Member member = memberService.login(request);

if(member == null) {
throw new OrderException(ExceptionMessage.MEMBER_LOGIN_FAIL);
throw new MemberException(ExceptionMessage.MEMBER_LOGIN_FAIL);
}

HttpSession session = httpServletRequest.getSession();
session.setAttribute("loginMember", member);
session.setAttribute("userRole", member.getRole());
session.setMaxInactiveInterval(60 * 10);
return ResponseEntity.ok().body(member);

}

//로그아웃

@PostMapping("/logout")
@Operation(summary = "로그아웃", description = "로그아웃 API")
public ResponseEntity<Void> logout(HttpSession session) {
session.invalidate();
return ResponseEntity.ok().build();
}

//마이페이지
@GetMapping("/mypage")
@Operation(summary = "회원정보 조회", description = "회원정보를 조회하는 API")
public ResponseEntity<Member> getMemberInfo(HttpSession session) {

// 세션에서 로그인된 회원 정보 가져오기
Expand All @@ -77,6 +83,7 @@ public ResponseEntity<Member> getMemberInfo(HttpSession session) {
}

@PutMapping("/mypage")
@Operation(summary = "회원정보 수정", description = "회원정보를 수정하는 API")
public ResponseEntity<Member> updateMemberInfo(HttpSession session,
@Valid @RequestBody MemberUpdateRequest request) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import grepp.coffee.backend.controller.order.request.OrderUpdateRequest;
import grepp.coffee.backend.model.entity.order.Order;
import grepp.coffee.backend.model.service.order.OrderService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -18,55 +20,66 @@
@RequiredArgsConstructor
@RequestMapping("/order")
@RestController
@Tag(name = "주문 API")
public class OrderController {


private final OrderService orderService;

// 사용자가 주문한 목록 조회 (memberId로 변경)

@GetMapping("/member/{memberId}")
@Operation(summary = "사용가자 주문한 주문 목록 조회", description = "사용자의 주문 목록을 조회하는 API")

public ResponseEntity<List<Order>> getUserOrders(@PathVariable Long memberId) {

return ResponseEntity.ok().body(orderService.getUserOrders(memberId));
}

// 주문 등록

@PostMapping("/")
@Operation(summary = "주문 등록", description = "주문을 등록하는 API")
public ResponseEntity<Void> registerOrder(@Valid @RequestBody OrderRegisterRequest request) {
orderService.registerOrder(request);
return ResponseEntity.ok().build();
}

// 장바구니에서 주문 등록
@PostMapping("/cart/{memberId}")
@Operation(summary = "장바구니의 상품들을 주문 등록", description = "장바구니에 있는 상품들을 주문하는 API")
ResponseEntity<Void> orderAllCartItems(@PathVariable Long memberId) {
orderService.registerOrderCartItems(memberId);
return ResponseEntity.ok().build();
}

// 주문 메뉴 수정하기

@PutMapping("/{orderId}")
@Operation(summary = "주문 상품 수정", description = "주문한 상품과 수량을 수정하는 API")

public ResponseEntity<Void> updateOrderMenu(@PathVariable Long orderId,
@Valid @RequestBody OrderUpdateRequest request) {
orderService.updateOrderMenu(orderId, request);
return ResponseEntity.ok().build();
}

// 주문 삭제

@DeleteMapping("/{orderId}")
@Operation(summary = "주문 정보 수정", description = "주문 정보 중 우편번호와 주소를 수정하는 API")
public ResponseEntity<Void> deleteOrder(@PathVariable Long orderId) {
orderService.deleteOrder(orderId);
return ResponseEntity.ok().build();
}

// 관리자가 모든 주문 목록 조회

@GetMapping("/admin")
@Operation(summary = "[관리자] 모든 주문 목록 조회", description = "관리자가 모든 주문 목록을 조회하는 API")
public ResponseEntity<List<Order>> getAdminOrders() {
return ResponseEntity.ok().body(orderService.getAdminOrders());
}

// 관리자의 배송 시작 일괄 처리
@PostMapping("/admin")
@Operation(summary = "[관리자] 배송 시작 일괄 처리", description = "관리자가 전날 오후 2시부터 금일 오후2시까지의 주문을 " +
"배송 처리하는 API")
public ResponseEntity<Void> startShipping() {
orderService.startShipping();
return ResponseEntity.ok().build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@


import grepp.coffee.backend.common.exception.ExceptionMessage;
import grepp.coffee.backend.common.exception.member.MemberException;
import grepp.coffee.backend.controller.product.request.ProductDetailResponse;
import grepp.coffee.backend.controller.product.request.ProductRegisterRequest;
import grepp.coffee.backend.controller.product.request.ProductUpdateRequest;
import grepp.coffee.backend.model.entity.member.Member;
import grepp.coffee.backend.model.entity.product.Product;
import grepp.coffee.backend.model.entity.product.constant.Category;
import grepp.coffee.backend.model.service.product.ProductService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import jakarta.validation.Valid;
Expand All @@ -25,18 +26,22 @@
@RequiredArgsConstructor
@RequestMapping("/product")
@RestController
@Tag(name = "제품 API")
public class ProductController {

private final ProductService productService;

// 상품 전체 조회

@GetMapping("")
@Operation(summary = "상품 목록 조회", description = "모든 상품의 목록을 조회하는 API")
public ResponseEntity<List<Product>> readProductList() {
return ResponseEntity.ok().body(productService.readProductList());
}

// 상품 상세 조회
@GetMapping("/{id}")
@Operation(summary = "상품 상세 조회", description = "상품의 상세를 조회하는 API")

public ResponseEntity<?> getProductDetails(@PathVariable("id") Long productId, HttpServletRequest request) {
HttpSession session = request.getSession(false);

Expand All @@ -48,55 +53,63 @@ public ResponseEntity<?> getProductDetails(@PathVariable("id") Long productId, H
return ResponseEntity.ok(productDetailDTO);
}

// 상품 등록
@PostMapping("/")
@Operation(summary = "[관리자] 상품 등록", description = "관리자가 상품을 등록하는 API")
public ResponseEntity<Void> registerProduct(@SessionAttribute(value = "loginMember", required = false) Member member,
@Valid @RequestBody ProductRegisterRequest request) {
productService.registerProduct(member, request);
return ResponseEntity.ok().build();
}

// 상품 수정
@PutMapping("/{productId}")
@Operation(summary = "[관리자] 상품 수정", description = "관리자가 상품을 수정하는 API")
public ResponseEntity<Void> updateProduct(@SessionAttribute(value = "loginMember", required = false) Member member,
@PathVariable(name = "productId") Long productId,
@Valid @RequestBody ProductUpdateRequest request) {
productService.updateProduct(member, productId, request);
return ResponseEntity.ok().build();
}

// 상품 삭제

@DeleteMapping("/{productId}")
@Operation(summary = "[관리자] 상품 삭제", description = "관리자가 상품을 삭제하는 API")
public ResponseEntity<Void> deleteProduct(@SessionAttribute(value = "loginMember", required = false) Member member,
@PathVariable(name = "productId") Long productId) {
productService.deleteProduct(member, productId);
return ResponseEntity.ok().build();
}

// 카테고리별 상품 조회

@GetMapping("/category/{category}")
@Operation(summary = "카테고리 별 상품 조회", description = "카테고리 별로 상품을 조회하는 API ")
public ResponseEntity<List<Product>> readProductsByCategory(@PathVariable Category category) {
return ResponseEntity.ok().body(productService.readProductsByCategory(category));
}

//상품 할인 적용

@PatchMapping("/{productId}")
@Operation(summary = "[관리자] 상품 개별 할인", description = "관리자가 개별 상품을 할인하는 API. " +
"parameter로 할인할 금액을 적어주세요.")
public ResponseEntity<Void> discountProduct(@SessionAttribute(value = "loginMember", required = false) Member member,
@PathVariable Long productId, @RequestParam("discount") int discount) {
productService.discountProduct(member, productId, discount);
return ResponseEntity.ok().build();
}

//카테고리별 상품 할인 적용

@PatchMapping("/category/{category}")
@Operation(summary = "[관리자] 카테고리 상품 할인", description = "관리자가 카테고리의 상품을 할인하는 API. " +
"parameter로 할인할 금액을 적어주세요.")
public ResponseEntity<Void> discountCategoryProduct(@SessionAttribute(value = "loginMember", required = false) Member member,
@PathVariable Category category, @RequestParam("discount") int discount) {
productService.discountCategoryProduct(member, category, discount);
return ResponseEntity.ok().build();
}

//인기 상품 목록 조회

@GetMapping("/pop")
@Operation(summary = "주문량 순 인기 상품 Top 10 조회", description = "인기 상품을 10개까지 조회하는 API. " +
"주문량 내림차순으로 조회됩니다.")
public ResponseEntity<List<Product>> readTop10Products() {
return ResponseEntity.ok().body(productService.readTop10Products());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import grepp.coffee.backend.model.entity.product.Product;
import grepp.coffee.backend.model.service.product.ProductService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
Expand All @@ -13,49 +15,60 @@
@RestController
@RequestMapping("/search")
@RequiredArgsConstructor
@Tag(name = "상품 목록 필터링 API")
public class ProductSearchController {

private final ProductService productService;

// 가격 기준으로 오름차순 정렬된 상품 검색
@GetMapping("/price/asc")
@Operation(summary = "정해진 가격 내에서 오름차순 정렬 상품 목록 조회", description = "가격 오름차순으로 상품 목록을 조회하는 API" +
"하한 가격과 상한 가격을 param으로 주세요.")
public List<Product> searchProductsByPriceAsc(
@RequestParam int minPrice,
@RequestParam int maxPrice) {
return productService.searchProductsByPriceAsc(minPrice, maxPrice);
}

// 가격 기준으로 내림차순 정렬된 상품 검색

@GetMapping("/price/desc")
@Operation(summary = "정해진 가격 내에서 내림차순 정렬 상품 목록 조회", description = "가격 내림차순으로 상품 목록을 조회하는 API" +
"하한 가격과 상한 가격을 param으로 주세요.")
public List<Product> searchProductsByPriceDesc(
@RequestParam int minPrice,
@RequestParam int maxPrice) {
return productService.searchProductsByPriceDesc(minPrice, maxPrice);
}

// 가격없이 정렬 기준에 따라서만 정렬 true -> 오름차순 || false -> 내림차순

@GetMapping("/price")
@Operation(summary = "가격을 기준으로 정렬하여 상품 목록 조회", description = "가격 오름차순, 내림차순으로 상품목록을 조회하는 API" +
"param값이 true면 오름차순, false면 내림차순입니다.")
public List<Product> searchProductsByPrice(
@RequestParam(defaultValue = "true") boolean ascending) {
return productService.searchProductsByPrice(ascending);
}

// 주문량에 따라 정렬 true -> 오름차순 || false -> 내림차순

@GetMapping("/order-count")
@Operation(summary = "주문량을 기준으로 정렬하여 상품 목록 조회", description = "주문량 오름차순, 내림차순으로 상품목록을 조회하는 API" +
"param값이 true면 오름차순, false면 내림차순입니다.")
public List<Product> searchProductsByOrderCount(
@RequestParam(defaultValue = "true") boolean ascending) {
return productService.searchProductsByOrderCount(ascending);
}

// 이름순으로 정렬 true -> 오름차순 || false -> 내림차순

@GetMapping("/name")
@Operation(summary = "이름을 기준으로 정렬하여 상품 목록 조회", description = "이름 오름차순, 내림차순으로 상품목록을 조회하는 API" +
"param값이 true면 오름차순, false면 내림차순입니다.")
public List<Product> searchProductsByName(
@RequestParam(defaultValue = "true") boolean ascending) {
return productService.searchProductsByName(ascending);
}

// 별점 평균 순으로 정렬 true -> 오름차순 || false -> 내림차순
@GetMapping("/rating")
@Operation(summary = "별점을 기준으로 정렬하여 상품 목록 조회", description = "별점 오름차순, 내림차순으로 상품목록을 조회하는 API" +
"param값이 true면 오름차순, false면 내림차순입니다.")
public List<Product> searchProductsByRating(
@RequestParam(defaultValue = "true") boolean ascending) {
return productService.searchProductsByRating(ascending);
Expand Down
Loading

0 comments on commit 101a83f

Please sign in to comment.