Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
084d7d5
chore: 파일 포매팅
gobad820 Aug 1, 2024
55d4da7
feat: 회원 이메일 예외 추가
gobad820 Aug 1, 2024
9dbf015
feat: DTO 데이터 제네릭 이용
gobad820 Aug 1, 2024
1f9007b
chore: 파일 패키지 이동
gobad820 Aug 1, 2024
8a387e3
fix: get urlTemplate RESTDocs로 임포팅 변경
gobad820 Aug 1, 2024
4f9dd7f
부산대 BE_김상해 6주차 과제 (0단계) (#51)
gobad820 Aug 1, 2024
882d50b
feat: 회원 이메일 예외 추가
gobad820 Aug 1, 2024
c79620c
부산대 BE_김상해 6주차 과제 (0단계) (#51)
gobad820 Aug 1, 2024
f658a70
feat: 회원 이메일 예외 추가
gobad820 Aug 1, 2024
59bce76
부산대 BE_김상해 6주차 과제 (0단계) (#51)
gobad820 Aug 1, 2024
55f79b7
feat: 회원 이메일 예외 추가
gobad820 Aug 1, 2024
75eecba
feat: 5주차 코드 가져오기
gobad820 Jul 29, 2024
32df32f
chore: 도메인형 디렉토리 구조로 변경
gobad820 Jul 31, 2024
d6fb999
chore: 파일 포매팅
gobad820 Aug 1, 2024
62f8f50
feat: 위시 리스트 조회 페이지네이션 추가
gobad820 Aug 1, 2024
2553a4f
feat: 위시리스트 페이지네이션 조회 추가
gobad820 Aug 1, 2024
04bcf06
feat: @ToString, @EqualsAndHashCode 어노테이션 추가
gobad820 Aug 1, 2024
caa6939
chore: 파일 패키지 이동
gobad820 Aug 1, 2024
d8dc3df
refactor: API 명세에 따라 변경된 매개변수 적용
gobad820 Aug 1, 2024
3f95b38
chore: 파일 패키지 이동
gobad820 Aug 1, 2024
30852dc
feat: @ToString, @EqualsAndHashCode 어노테이션 추가
gobad820 Aug 1, 2024
2544cc5
chore: 파일 패키지 이동
gobad820 Aug 1, 2024
32e5f0c
feat: API 명세에 따라 매핑, 매개 변수 변경
gobad820 Aug 1, 2024
6d04ebc
refactor: API 명세에 따라 변경된 매개변수 적용
gobad820 Aug 1, 2024
42ca13f
feat: 회원 이메일 예외 추가
gobad820 Aug 1, 2024
e0ca644
feat: DTO 데이터 제네릭 이용
gobad820 Aug 1, 2024
9759f99
feat: @ToString, @EqualsAndHashCode 어노테이션 추가
gobad820 Aug 1, 2024
28462af
chore: 파일 패키지 이동
gobad820 Aug 1, 2024
121c9ef
fix: get urlTemplate RESTDocs로 임포팅 변경
gobad820 Aug 1, 2024
7e77ab5
부산대 BE_김상해 6주차 과제 (0단계) (#51)
gobad820 Aug 1, 2024
29f9831
feat: 회원 이메일 예외 추가
gobad820 Aug 1, 2024
46c3179
부산대 BE_김상해 6주차 과제 (0단계) (#51)
gobad820 Aug 1, 2024
53ca8eb
feat: 회원 이메일 예외 추가
gobad820 Aug 1, 2024
054f219
부산대 BE_김상해 6주차 과제 (0단계) (#51)
gobad820 Aug 1, 2024
27f9d0e
feat: 회원 이메일 예외 추가
gobad820 Aug 1, 2024
ff7f9ba
chore: 머지 과정에서 중복 파일 삭제
gobad820 Aug 2, 2024
bfe7e06
chore: 머지 과정에서 중복 파일 삭제
gobad820 Aug 2, 2024
b3227c6
chore: 파일 포매팅
gobad820 Aug 2, 2024
6d096c6
feat: 포인트 멤버 필드 추가
gobad820 Aug 4, 2024
0016592
chore: 파일 포매팅
gobad820 Aug 4, 2024
316ef80
feat: 현금 영수증 여부, 휴대폰 번호 멤버 추가
gobad820 Aug 4, 2024
093bc45
feat: 주문 총금액, 현금영수증 멤버 추가
gobad820 Aug 4, 2024
d232594
feat: 포인트 적립, 5만원 이상 할인, 현금 영수증 기능 추가
gobad820 Aug 4, 2024
719a35c
chore: API 변경으로 인한 주소 변경
gobad820 Aug 4, 2024
c693992
feat: Member 포인트 필드 추가
gobad820 Aug 4, 2024
9cad4e8
feat: Order 현금 영수증, 총액 필드 추가
gobad820 Aug 4, 2024
c354ca6
feat: Order 현금 영수증, 총액 필드 추가
gobad820 Aug 4, 2024
9eb00ce
fix: deploy.sh 가 루트 디렉토리에서 바로 실행될 수 있도록 수정
gobad820 Aug 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
# spring-gift-point
# spring-gift-point

-[x] 5주차 코드 가져오기
2,166 changes: 2,166 additions & 0 deletions logs/app.log

Large diffs are not rendered by default.

Binary file added logs/app.log.2024-08-03.0.gz
Binary file not shown.
31 changes: 26 additions & 5 deletions scripts/deploy.sh
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,20 +1,41 @@
#!/bin/bash
BUILD_PATH=$(ls /../build/*.jar)

# 프로젝트 루트 디렉토리 설정
PROJECT_ROOT=$(pwd)

# JAR 파일 찾기
BUILD_PATH=$(find $PROJECT_ROOT -name '*.jar' | grep '/build/libs/')
if [ -z "$BUILD_PATH" ]; then
echo "Error: JAR file not found"
exit 1
fi
JAR_NAME=$(basename $BUILD_PATH)

# 현재 실행 중인 프로세스 확인
CURRENT_PID=$(pgrep -f $JAR_NAME)

if [ -z $CURRENT_PID ]
# 실행 중인 프로세스가 있으면 종료
if [ -z "$CURRENT_PID" ]
then
sleep 1
echo "No process running."
else
echo "Killing process $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi

DEPLOY_PATH=../
# 배포 경로 설정
DEPLOY_PATH=$PROJECT_ROOT/

# JAR 파일 복사
cp $BUILD_PATH $DEPLOY_PATH

# 배포 디렉토리로 이동
cd $DEPLOY_PATH

# JAR 파일 실행
DEPLOY_JAR=$DEPLOY_PATH$JAR_NAME
nohup java -jar $DEPLOY_JAR > /dev/null 2> /dev/null < /dev/null &
echo "Deploying $DEPLOY_JAR"
nohup java -jar $DEPLOY_JAR > /dev/null 2> /dev/null < /dev/null &

echo "Deployment completed"
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
<<<<<<<< HEAD:src/main/java/gift/kakaomember/controller/KakaoLoginController.java
package gift.kakaomember.controller;
========
package gift.member.kakaomember.controller;
>>>>>>>> 624afd6 (feat: 회원 이메일 예외 추가):src/main/java/gift/member/kakaomember/controller/KakaoLoginController.java

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import gift.dto.ApiResponse;
import gift.exception.IllegalEmailException;
<<<<<<<< HEAD:src/main/java/gift/kakaomember/controller/KakaoLoginController.java
import gift.member.dto.MemberResponse;
import gift.member.service.MemberService;
import gift.dto.HttpResult;
========
import gift.member.service.MemberService;
import gift.model.HttpResult;
>>>>>>>> 624afd6 (feat: 회원 이메일 예외 추가):src/main/java/gift/member/kakaomember/controller/KakaoLoginController.java
import jakarta.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Optional;
Expand Down Expand Up @@ -97,10 +106,16 @@ public ResponseEntity<MemberResponse> loginAsKakaoMember(HttpSession session)
);
}
} catch (Exception | IllegalEmailException e) {
<<<<<<<< HEAD:src/main/java/gift/kakaomember/controller/KakaoLoginController.java
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(
new MemberResponse(HttpResult.ERROR, "카카오 로그인 처리 중 오류 발생",
HttpStatus.INTERNAL_SERVER_ERROR, null)
);
========
return new ResponseEntity<>(
new ApiResponse(HttpResult.ERROR, "카카오 로그인 처리 중 오류 발생", HttpStatus.INTERNAL_SERVER_ERROR),
HttpStatus.INTERNAL_SERVER_ERROR);
>>>>>>>> 624afd6 (feat: 회원 이메일 예외 추가):src/main/java/gift/member/kakaomember/controller/KakaoLoginController.java
}
}

Expand Down
12 changes: 12 additions & 0 deletions src/main/java/gift/member/model/Member.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,14 @@ public class Member {
@OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true)
private final List<Wish> wishList = new ArrayList<>();

private int point;

public Member() {
}

public Member(String kakaoId) {
this.kakaoId = kakaoId;
this.point = 0;
}

public Member(String email, String password) throws IllegalEmailException {
Expand All @@ -62,6 +65,7 @@ public Member(String email, String password, String kakaoId) throws IllegalEmail
this.email = email;
this.password = password;
this.kakaoId = kakaoId;
this.point = 0;
}


Expand All @@ -88,4 +92,12 @@ public void setId(Long memberId) {
public void setKakaoId(String hashedKakaoId) {
this.kakaoId = hashedKakaoId;
}

public void addPoint(int point) {
this.point += point;
}

public void subPoint(int point) {
this.point -= point;
}
}
13 changes: 3 additions & 10 deletions src/main/java/gift/order/controller/OrderController.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,18 +52,10 @@ public ResponseEntity<OrderResponse> addOrder(
@RequestBody OrderRequest orderRequest) throws JsonProcessingException {

var accessToken = authHead.replace("Bearer ", "");

// // 멤버 정보 필요
// var memberDto = new MemberRequest(member.getEmail(),member.getPassword());

// orderResponse
// var orderResponse = new OrderResponse(orderRequest.getOptionId(),
// orderRequest.getQuantity(), orderRequest.getMessage());

var headers = getHttpHeadersForSelfMessage(accessToken);
// 주문 처리 -> 위시 리스트 삭제, 옵션 수량 감소
var order = orderService.addOrder(member, orderRequest);
System.out.println(member);

if (member.getKakaoId() == null) {
return ResponseEntity.ok(
new OrderResponse(HttpResult.OK, "주문 추가 성공", HttpStatus.OK, order));
Expand Down Expand Up @@ -107,7 +99,8 @@ public ResponseEntity<OrderResponse> getOrderListPage(
String property = sortParams[0];
Direction direction =
sortParams.length > 1 ? Direction.valueOf(sortParams[1]) : Direction.ASC;
Page<Order> orderListPage = orderService.getOrderListPage(member,page, size, property, direction);
Page<Order> orderListPage = orderService.getOrderListPage(member, page, size, property,
direction);
return ResponseEntity.ok(
new OrderResponse(HttpResult.OK, "주문 리스트 조회 성공", HttpStatus.OK, orderListPage));
}
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/gift/order/dto/OrderRequest.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package gift.order.dto;

import jakarta.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Data;

Expand All @@ -10,4 +11,8 @@ public class OrderRequest {
private Long optionId;
private int quantity;
private String message;
private boolean isCashReceipt;

@Pattern(regexp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$", message = "10 ~ 11 자리의 숫자만 입력 가능합니다.")
private String phoneNumber;
}
9 changes: 9 additions & 0 deletions src/main/java/gift/order/model/Order.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ public class Order {

private Long productId;

private int totalPrice;

private String cashReceipt;


@ManyToOne
@JoinColumn(name = "member_id")
Expand All @@ -43,11 +47,16 @@ public class Order {


public Order(Long productId,Long optionId, int quantity, String message,Member member) {
this(productId, optionId, quantity, message, member, 0,"");
}
public Order(Long productId,Long optionId, int quantity, String message,Member member, int totalPrice, String cashReceipt) {
this.productId = productId;
this.message = message;
this.optionId = optionId;
this.quantity = quantity;
this.member = member;
this.orderDateTime = LocalDateTime.now();
this.totalPrice = totalPrice;
this.cashReceipt = cashReceipt;
}
}
64 changes: 59 additions & 5 deletions src/main/java/gift/order/service/OrderService.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
package gift.order.service;

import gift.exception.IllegalProductException;
import gift.member.model.Member;
import gift.member.repository.MemberRepository;
import gift.option.model.Option;
import gift.option.repository.OptionRepository;
import gift.option.service.OptionService;
import gift.order.dto.OrderRequest;
import gift.order.model.Order;
import gift.order.repository.OrderRepository;
import gift.product.model.Product;
import gift.product.repository.ProductRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
Expand All @@ -24,13 +30,16 @@ public class OrderService {
private final OptionService optionService;
private final OptionRepository optionRepository;
private final OrderRepository orderRepository;
private final ProductRepository productRepository;

public OrderService(MemberRepository memberRepository, OptionService optionService,
OptionRepository optionRepository, OrderRepository orderRepository) {
OptionRepository optionRepository, OrderRepository orderRepository,
ProductRepository productRepository) {
this.memberRepository = memberRepository;
this.optionService = optionService;
this.optionRepository = optionRepository;
this.orderRepository = orderRepository;
this.productRepository = productRepository;
}


Expand All @@ -47,9 +56,6 @@ public Order addOrder(
Member member,
OrderRequest orderRequest
) {
// var member = memberRepository.findByEmail(memberRequest.getEmail())
// .orElseThrow(() -> new IllegalArgumentException("존재하지 않는 회원입니다"));

var selectedWish = member.getWishList().stream()
.filter(wish -> wish.getProduct().getId().equals(orderRequest.getProductId()))
.findFirst().orElse(null);
Expand All @@ -67,13 +73,61 @@ public Order addOrder(
} catch (Exception e) {
throw new IllegalArgumentException("옵션 수량 업데이트 중 오류가 발생했습니다: " + e.getMessage());
}
System.out.println("포인트");

// 포인트 적립
addPoint(member, orderRequest);
Logger logger = LoggerFactory.getLogger(OrderService.class);
logger.atInfo().log(member.toString());

// 5만원 이상이면 10% 할일
int totalPrice = getTotalPrice(orderRequest,
productRepository.findById(orderRequest.getProductId())
.orElseThrow(() -> new IllegalProductException("존재 하지 않는 상품입니다.")));
if (totalPrice > 50000) {
totalPrice = (int) (totalPrice * 0.9);
}

logger.atInfo().log(orderRequest.toString());
// 현금 영수증 사용 여부
if (orderRequest.isCashReceipt()) {
// 휴대폰 번호 여부 확인
if (orderRequest.getPhoneNumber() != null) {
logger.atInfo().log(orderRequest.getPhoneNumber());
Order order = new Order(orderRequest.getProductId(), orderRequest.getOptionId(),
orderRequest.getQuantity(), orderRequest.getMessage(), member, totalPrice,
orderRequest.getPhoneNumber());
return orderRepository.save(order);
}
}

return orderRepository.save(new Order(
orderRequest.getProductId(), orderRequest.getOptionId(), orderRequest.getQuantity(),
orderRequest.getMessage(),member
orderRequest.getMessage(), member, totalPrice, ""
));
}

public void addPoint(Member member, OrderRequest orderRequest) {
Product product = productRepository.findById(orderRequest.getProductId())
.orElseThrow(() -> new IllegalProductException("존재 하지 않는 상품입니다."));

int totalPrice = getTotalPrice(orderRequest, product);

int point = totalPrice / 100;
member.addPoint(point);
}

private int getTotalPrice(OrderRequest orderRequest, Product product) {
return product.getPrice() * orderRequest.getQuantity();
}

public void discountCharge(OrderRequest orderRequest) {
Product product = productRepository.findById(orderRequest.getProductId())
.orElseThrow(() -> new IllegalProductException("존재 하지 않는 상품입니다."));

}


public MultiValueMap<String, String> makeOrderMessage() {
// Create the template object as a JSON string
String templateObject =
Expand Down
Loading