Skip to content

Commit

Permalink
9주차 Develop 반영 (#68)
Browse files Browse the repository at this point in the history
* feat: SimpleJpaXXXRepository 추가

* feat: JpaProductRepository 추가

* feat: JpaPaymentOrderRepository 추가

* feat: JpaPaymentEventRepository 추가

* feat: 멱등성 키 생성기 구현

* feat: 결제 준비 DTO 구현

* feat: 결제 주문 응답 DTO 구현

* feat: 결제 준비 기능 구현

* test: PaymentDatabaseHelper 추가

* test: JpaDatabaseCleanup 추가

* test: JpaPaymentDatabaseHelper 추가

* test: test 설정 파일 추가

* test: 결제 준비 기능 테스트 추가

- 결제 준비에 대한 정상 케이스
- 중복 결제 준비 요청에 대한 예외 발생 케이스

* feat: application.yml data.sql 수행 설정

* feat: data.sql 데이터 추가

* chore: build.gradle 스프링 시큐리티 의존성 제거

* feat: 결제 Repository 빈 등록

* feat: PaymentController 결제 준비 엔드포인트 구현

* feat: Api 응답 본문 구조 선언

* feat: 결제 주문 엔티티와 상품 연관관계 삭제

* feat: 결제 상태에 description 필드 추가

* feat: Entity 구현

* feat: Domain 구현

* feat: Mapper 구현

* feat: ProductRepository 추가

* feat: PaymentOrderRepository 추가

* feat: PaymentEventRepository 추가

* feat: SimpleJpaXXXRepository 추가

* feat: JpaProductRepository 추가

* feat: JpaPaymentOrderRepository 추가

* feat: JpaPaymentEventRepository 추가

* feat: 멱등성 키 생성기 구현

* feat: 결제 준비 DTO 구현

* feat: 결제 주문 응답 DTO 구현

* feat: 결제 준비 기능 구현

* test: PaymentDatabaseHelper 추가

* test: JpaDatabaseCleanup 추가

* test: JpaPaymentDatabaseHelper 추가

* test: test 설정 파일 추가

* test: 결제 준비 기능 테스트 추가

- 결제 준비에 대한 정상 케이스
- 중복 결제 준비 요청에 대한 예외 발생 케이스

* feat: application.yml data.sql 수행 설정

* feat: data.sql 데이터 추가

* feat: 결제 Repository 빈 등록

* feat: PaymentController 결제 준비 엔드포인트 구현

* feat: Api 응답 본문 구조 선언

* style: 파일 끝 빈 줄 추가

* feat: DTO record로 변경

* rename: package 이름 수정

memebr -> member

* style: 오타 수정

* rename: 오타 수정

* chore: spring security 의존성 제거

사용하지 않음

* style: 코드 린트 적용

* style: 코드 린트 적용

* feat: application-test.yml 누락된 설정 추가

* feat: 애플리케이션 컨텍스트 로드 테스트 test 프로파일 활성화

* test: 결제 준비 테스트 유지보수

DTO 가 record 타입으로 변경됨에 따른 수정

* feat: 주문 상세 정보 생성 dto 작성

* feat: OrderDetailServcie 생성

주문 상세 정보 생성 메서드만 작성
추후 RUD도 제작 예정

* feat: OrderDetailController 생성

우선적으로 주문 생성만 만들어둠

* fix: member패키지 오타 수정 적용 및 spot 엔티티 필드 명 변경 적용

* feat: swagger config 작성

* feat: swagger 의존성 추가

* style: spotless 적용

* chore: build.gradle 버전 변수 추출 및 spotless 설정 변경

spotless 들여쓰기가 공백 2자에서 4자로 적용되도록 수정

* feat: BaseEntity 추가

* feat: AuditorProvider 구현

* feat: 영속성 설정 클래스 추가

* feat: 애플리케이션 실행 클래스 @EnableJpaAuditing 제거

PersistenceConfig 에서 적용되어 중복 제거

* feat: 카카오 로그인 구현

* refactor: 인텔리제이 마지막 빈 줄 설정 옵션 적용

* refactor: 불필요한 어노테이션 제거

* refactor: RestClient Bean으로 등록 후 Autowired 적용

* refactor: 구체적인 버전은 따로 변수로 추출해서 한 곳에서 관리

* refactor: 불필요한 어노테이션 제거

Json 필드 이름과 KakaoAccount 객체의 필드 이름이 같음

* refactor: @requiredargsconstructor 적용

생성자 생략 가능

* refactor: 정적 팩토리 메서드 네이밍 방식 반영

* feat: swagger config 작성

* feat: swagger 의존성 추가

* feat: Soft delete를 위해 isDeleted 속성 추가

* refactor: isDeleted가 false인 것만 조회하도록 수정

* refactor: isDeleted가 false인 것만 조회하도록 수정

* refactor: isDeleted 추가

* refactor: BaseEntity 상속하도록 수정

* refactor: createdAt, updateAt 필드 추가

* feat: ENUM 타입의 category 추가

* refactor: category의 타입을 Category(ENUM 클래스)로 변경

* feat: ENUM 클래스의 converter에 필요한 CodedEnum 인터페이스 작성

* feat: ENUM 클래스의 converter 작성

* style: 코드 컨벤션 수정

* style: camel case로 변경

* refactor: setter로 변경하던 isDeleted를 delete와 restore 메서드로 변경

* refactor: dirty checking하므로 save가 필요 없어서 삭제

* fix: Converter 어노테이션 붙임

* feat: 결제 주문 엔티티와 상품 연관관계 삭제

* feat: 결제 상태에 description 필드 추가

* feat: Entity 구현

* feat: Domain 구현

* feat: Mapper 구현

* feat: ProductRepository 추가

* feat: PaymentOrderRepository 추가

* feat: PaymentEventRepository 추가

* feat: SimpleJpaXXXRepository 추가

* feat: JpaProductRepository 추가

* feat: JpaPaymentOrderRepository 추가

* feat: JpaPaymentEventRepository 추가

* feat: 멱등성 키 생성기 구현

* feat: 결제 준비 DTO 구현

* feat: 결제 주문 응답 DTO 구현

* feat: 결제 준비 기능 구현

* test: PaymentDatabaseHelper 추가

* test: JpaDatabaseCleanup 추가

* test: JpaPaymentDatabaseHelper 추가

* test: test 설정 파일 추가

* test: 결제 준비 기능 테스트 추가

- 결제 준비에 대한 정상 케이스
- 중복 결제 준비 요청에 대한 예외 발생 케이스

* feat: application.yml data.sql 수행 설정

* feat: data.sql 데이터 추가

* feat: 결제 Repository 빈 등록

* feat: PaymentController 결제 준비 엔드포인트 구현

* feat: Api 응답 본문 구조 선언

* style: 파일 끝 빈 줄 추가

* feat: DTO record로 변경

* rename: package 이름 수정

memebr -> member

* style: 오타 수정

* rename: 오타 수정

* style: 코드 린트 적용

* style: 코드 린트 적용

* feat: application-test.yml 누락된 설정 추가

* feat: 애플리케이션 컨텍스트 로드 테스트 test 프로파일 활성화

* test: 결제 준비 테스트 유지보수

DTO 가 record 타입으로 변경됨에 따른 수정

* fix: OrderDetail 엔티티 수정

팀원들과 회의 후 해당 엔티티 구조를 수정하였고, OrderParticipant는 필요가 없다고 판단

* remove: OrderParticipant 삭제

* remove: OrderParticipant 레포지토리 삭제

* refactor: OrderDetail 수정된 엔티티에 맞게 리팩토링

* fix: 충돌 해결

* feat: PaymentOrderRepository 결제 최종 금액 계산 구현

* refactor: JpaPaymentOrderRepository 조회 실패 시, 발생할 예외 구체화

IllegalArgumentException -> NoSuchElementException

* feat: 결제 유효성 검사 구현

* style: PaymentValidationServiceTest 오타 수정

* feat: Mapstruct 사용을 위한 의존성 추가

* feat: Controller 계층 DTO 작성

* feat: Mapstruct를 이용해 SpotMapper 생성

* refactor: 이름 수정

* feat: SimpleSpotRepository를 가지는 Repository 계층 생성

* refactor: Controller 계층의 Dto를 반환하도록 수정, Service 계층의 Dto를 인자로 넘기도록 수정

* refactor: servicedto 패키지로 이동, accessLevel 조정

* refactor: 매핑 방식 변경

* feat: Member의 PK를 참조하도록 수정

* refactor: 조회 메서드 readOnly로 변경

* style: spotless 적용

# Conflicts:
#	src/main/java/com/ordertogether/team14_be/memebr/persistence/entity/Member.java
#	src/main/java/com/ordertogether/team14_be/payment/domain/PaymentEvent.java
#	src/main/java/com/ordertogether/team14_be/payment/domain/PaymentOrder.java
#	src/main/java/com/ordertogether/team14_be/payment/domain/PaymentOrderStatus.java
#	src/main/java/com/ordertogether/team14_be/payment/domain/Product.java
#	src/main/java/com/ordertogether/team14_be/spot/controller/SpotController.java
#	src/main/java/com/ordertogether/team14_be/spot/dto/SpotDto.java
#	src/main/java/com/ordertogether/team14_be/spot/entity/Spot.java
#	src/main/java/com/ordertogether/team14_be/spot/repository/SpotRepository.java
#	src/main/java/com/ordertogether/team14_be/spot/service/SpotService.java

* feat: 카카오 로그인 구현

* refactor: @requiredargsconstructor 적용

생성자 생략 가능

* feat: PaymentOrder 와 PaymentEvent 연관관계 추가

* feat: 결제 상태에 description 필드 추가

* feat: Domain 구현

* rename: package 이름 수정

memebr -> member

* style: 전역 상수변수 같은 경우에는 변수명을 대문자로 사용

* refactor: jwt에 사용자 정보를 담지 않음

email 대신 사용자의 아이디(pk)를 담음

* refactor: 생성자 주입방식 하나로 통일, @Autowired 지양

* refactor: Enum의 이름을 그대로 반환하도록 수정

* feat: 반경 n미터 내 Spot 조회하기 작성

* feat: 반경 n미터 내 Spot들만 처리해서 반환하는 메서드 작성

* feat: 최대/최소 경도, 위도 내에 해당하는 Spot을 반환하는 메서드 작성

* feat: 최대/최소 경도, 위도 내에 해당하는 Spot을 반환하는 쿼리 작성

* feat: SpotModifyRequest와 SpotDto를 매핑하는 메서드 추가

* refactor: NotNull로 Null 방지

* feat: ErrorResponse 정의

* feat: ErrorCode 정의

* feat: id에 해당하는 Spot이 없는 경우 Exception 정의

* feat: SpotExceptionHandler 작성

* refactor: JwtUtil Spring Bean 제거

* refactor: util 클래스는 상속이 불가능하게 final 설정

* refactor: 토큰 재료를 일반적인 파라미터명으로 변경

* refactor: db 관련 작업 트랜잭션 추가

* refactor: EXPIRE_TIME은 �애플리케이션 설정(application.yaml)으로 변경

* refactor: 카카오 관련 요소 한 곳(KakaoProperties)에서 관리

* refactor: jwt를 사용자 아이디를 가지고 생성

* fix: 프로그램 수행 가능하도록 함

* 7주차 weekly 병합 (#56)

* fix: 프로그램 수행 가능하도록 함

* fix: 안 올라간 파일..

* feat: 토큰 해독 메서드 구현

* feat: 로그인 어노테이션 구현

* feat: 멤버 조회 수정 삭제 구현

* feat: 회원 추가정보 등록 후 회원가입

* fix: 로그인 에러 해결

* style: 안 쓰는 메서드 및 주석 제거, 파일 깔끔하게!

* refactor: 회원 수정 db 재저장

* test: 회원 API 테스트코드 작성

* feat: 결제 파트 누락된 파일 추가

* refactor: 트랜잭션 변경 및 readOnly 적용

* feat: 전역에러핸들러 작성

* refactor: 클라이언트는 멤버아이디를 모른다.. 토큰 사용..

* refactor: 매직리터럴대신 HttpHeaders.AUTHORIZATION 사용

---------

Co-authored-by: westzeroright <[email protected]>
Co-authored-by: westzeroright <[email protected]>

* feat: cors 설정

* refactor: Value를 private final로 설정하고 생성자 주입방식을 사용

* refactor: 중복된 메서드 modifyMemberInfo 제거

* refactor: 트랜잭션 추가

* refactor: 메서드명은 행위를 나타내도록 동사로 시작 loginKakaoUser

* refactor: esponseEntity, HttpStatus, redirect등을 Controller(Web 계층)로 옮김

* refactor: 사용하지 않은 메서드 및 파일 제거

* feat: 의존성 geohash 추가

* refactor: 반지름 삭제

* refactor: geoHash, deadlineTime 추가

* feat: geoHash를 통해 반경 n미터 spot 조회하는 기능 작성

* feat: geoHash 기준으로 Spot 찾기 추가

* refactor: geoHash, deadlineTime(마감시간) 추가

* refactor: deadlineTime(마감시간) 추가

* fix: 중복 메서드 제거

* refactor: 줄바꿈 변경

* feat: 의존성 geohash 추가

* refactor: 반지름 삭제

* refactor: geoHash, deadlineTime 추가

* feat: geoHash를 통해 반경 n미터 spot 조회하는 기능 작성

* feat: geoHash 기준으로 Spot 찾기 추가

* refactor: geoHash, deadlineTime(마감시간) 추가

* refactor: deadlineTime(마감시간) 추가

* refactor: 줄바꿈 변경

* feat: API 응답 형식 필드 final 키워드 추가

* feat: API 응답 형식 생성 메서드 추가

* feat: 더미 데이터에 회원 데이터 추가

* style: 결제 준비 서비스 검증 메서드 변수명 수정

* feat: PaymentEventEntity paymentKey 필드 @nullable 제거

결제 승인 요청 전까지 paymentKey 를 알 수 없음

* feat: 결제 승인 프로세스 예시 페이지 구현

* feat: 포인트 충전 기능 구현

* feat: 결제 주문 저장소 빈 등록 시, 주입될 repo 추가

* feat: PaymentEventRepository 결제 상태 변경 기능 구현

* feat: 결제 상태 변경 기능 구현

* test: PaymentDatabaseHelper 더미 데이터 생성 기능 추가

* feat: 결제 유효성 검사 기능 구현

* feat: TossPayments 응답 DTO 생성

- 결제 승인 응답
- 결제 실패 응답

* feat: TossPaymentsClient 구현

* feat: 결제 승인 DTO 구현

* feat: 결제 승인 기능 구현

* test: 테스트 코드 유지보수

- PaymentEvent 최초 저장 시, PaymentKey 값이 null 이되는 것을 반영

* fix: PaymentEventMapper 도메인 변환 시, paymentOrders 값이 채워지지 않던 버그 수정

* feat: PaymentViewController 추가

* feat: application.yml application-test.yml toss 설정 추가

* rename: PointUpdateService -> PointManagementService

* feat: 포인트 충전 기능 구현

* feat: 결제 승인 기능 구현

* rename: PointUpdateService -> PointManagementService

* feat: 카카오 로그인 구현

* feat: 포인트 충전 기능 구현

---------

Co-authored-by: 나제법 <[email protected]>
Co-authored-by: 나제법 <[email protected]>
Co-authored-by: ajy9851 <[email protected]>
Co-authored-by: westzeroright <[email protected]>
Co-authored-by: westzeroright <[email protected]>
Co-authored-by: ajy9851 <[email protected]>
  • Loading branch information
7 people authored Nov 1, 2024
1 parent 63a7a4f commit ed3eabd
Show file tree
Hide file tree
Showing 60 changed files with 1,766 additions and 134 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ dependencies {
implementation "io.jsonwebtoken:jjwt-api:${jjwt_version}"
implementation "org.springdoc:springdoc-openapi-starter-webmvc-ui:${swagger_version}"
implementation 'org.mapstruct:mapstruct:1.6.2'
implementation 'ch.hsr:geohash:1.4.0'

annotationProcessor 'org.mapstruct:mapstruct-processor:1.6.2'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class JwtUtil {
private final SecretKey key;
private final int expireTime;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,56 +1,29 @@
package com.ordertogether.team14_be.auth.application.service;

import com.ordertogether.team14_be.auth.JwtUtil;
import com.ordertogether.team14_be.auth.application.dto.KakaoUserInfo;
import com.ordertogether.team14_be.auth.presentation.KakaoClient;
import com.ordertogether.team14_be.common.web.response.ApiResponse;
import com.ordertogether.team14_be.member.application.service.MemberService;
import com.ordertogether.team14_be.member.persistence.entity.Member;
import java.net.URI;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;

@RequiredArgsConstructor
@Service
public class AuthService {

private final KakaoClient kakaoClient;
private final MemberService memberService;
private final JwtUtil jwtUtil;

@Value(("${FRONT_PAGE_SIGNUP}"))
String redirectPage;

public ResponseEntity<ApiResponse<String>> kakaoLogin(String authorizationCode) {
String kakaoToken = kakaoClient.getAccessToken(authorizationCode); // 인가코드로부터 카카오토큰 발급
KakaoUserInfo kakaoUserInfo = kakaoClient.getUserInfo((kakaoToken));
String userKakaoEmail = kakaoUserInfo.kakaoAccount().email(); // 와 사용자 카카오 이메일이야

Optional<Member> existMember = memberService.findMemberByEmail(userKakaoEmail);
if (existMember.isPresent()) {
String serviceToken =
jwtUtil.generateToken(memberService.getMemberId(userKakaoEmail)); // 서비스 토큰 줘야징
return ResponseEntity.ok((ApiResponse.with(HttpStatus.OK, "로그인 성공", serviceToken)));
} else {
return ResponseEntity.status(HttpStatus.FOUND)
.location(
URI.create(redirectPage + URLEncoder.encode(userKakaoEmail, StandardCharsets.UTF_8)))
.build();
}
public AuthService(MemberService memberService, JwtUtil jwtUtil) {
this.memberService = memberService;
this.jwtUtil = jwtUtil;
}

public ResponseEntity<ApiResponse<String>> register(
String email, String deliveryName, String phoneNumber) {
public String register(String email, String deliveryName, String phoneNumber) {
Member member = new Member(email, deliveryName, phoneNumber);
memberService.registerMember(member);
Long memberId = memberService.getMemberId(email);
String serviceToken = jwtUtil.generateToken(memberId);
return ResponseEntity.ok((ApiResponse.with(HttpStatus.OK, "회원가입 및 로그인 성공", serviceToken)));
return serviceToken;
}

public String getServiceToken(String email) {
return jwtUtil.generateToken(memberService.getMemberId(email));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.ordertogether.team14_be.auth.application.service;

import com.ordertogether.team14_be.auth.application.dto.KakaoUserInfo;
import com.ordertogether.team14_be.auth.presentation.KakaoClient;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@RequiredArgsConstructor
@Service
public class KakaoAuthService {
private final KakaoClient kakaoClient;

public String getKakaoUserEmail(String authorizationCode) {
String kakaoToken = kakaoClient.getAccessToken(authorizationCode);
KakaoUserInfo kakaoUserInfo = kakaoClient.getUserInfo((kakaoToken));
String userKakaoEmail = kakaoUserInfo.kakaoAccount().email();
return userKakaoEmail;
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
package com.ordertogether.team14_be.auth.presentation;

import com.ordertogether.team14_be.auth.application.service.AuthService;
import com.ordertogether.team14_be.auth.application.service.KakaoAuthService;
import com.ordertogether.team14_be.common.web.response.ApiResponse;
import com.ordertogether.team14_be.member.application.dto.MemberInfoRequest;
import lombok.RequiredArgsConstructor;
import com.ordertogether.team14_be.member.application.service.MemberService;
import com.ordertogether.team14_be.member.persistence.entity.Member;
import java.net.URI;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
Expand All @@ -13,16 +21,49 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RequiredArgsConstructor
@RestController
@RequestMapping("/api/v1/auth")
public class AuthController {

private final AuthService authService;
private final KakaoAuthService kakaoAuthService;
private final String redirectPage;
private final MemberService memberService;

public AuthController(
AuthService authService,
KakaoAuthService kakaoAuthService,
MemberService memberService,
@Value("${FRONT_PAGE_SIGNUP}") String redirectPage) {
this.authService = authService;
this.kakaoAuthService = kakaoAuthService;
this.memberService = memberService;
this.redirectPage = redirectPage;
}

@GetMapping("/login")
public ResponseEntity<ApiResponse<String>> getToken(@RequestHeader String authorizationCode) {
return authService.kakaoLogin(authorizationCode);
String userKakaoEmail = kakaoAuthService.getKakaoUserEmail(authorizationCode);
Optional<Member> existMember = memberService.findMemberByEmail(userKakaoEmail);
if (existMember.isPresent()) {
return ResponseEntity.ok(
ApiResponse.with(HttpStatus.OK, "로그인 성공", authService.getServiceToken(userKakaoEmail)));

} else {
return ResponseEntity.status(HttpStatus.FOUND)
.location(
URI.create(redirectPage + URLEncoder.encode(userKakaoEmail, StandardCharsets.UTF_8)))
.build();
}
}

@PostMapping("/signup")
public ResponseEntity<ApiResponse<String>> signUpMember(
@RequestParam String email, @RequestBody MemberInfoRequest memberInfoRequest) {
String serviceToken =
authService.register(
email, memberInfoRequest.deliveryName(), memberInfoRequest.phoneNumber());
return ResponseEntity.ok(ApiResponse.with(HttpStatus.OK, "로그인 성공", serviceToken));
}

@PostMapping("/signup")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,15 @@
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class ApiResponse<T> {

private Integer status;
private String message;
private T data;
private final Integer status;
private final String message;
private final T data;

public static <T> ApiResponse<T> with(HttpStatus httpStatus, String message, @Nullable T data) {
return new ApiResponse<>(httpStatus.value(), message, data);
}

public static <T> ApiResponse<T> with(HttpStatus httpStatus, String message) {
return new ApiResponse<>(httpStatus.value(), message, null);
}
}
19 changes: 19 additions & 0 deletions src/main/java/com/ordertogether/team14_be/config/CorsConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.ordertogether.team14_be.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry
.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("Authorization", "Content-Type")
.exposedHeaders("Custom-Header")
.maxAge(3600);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,12 @@ public AuditorAware<Long> auditorProvider() {

@Bean
public PaymentEventRepository paymentEventRepository(
SimpleJpaPaymentEventRepository simpleJpaPaymentEventRepository) {
return new JpaPaymentEventRepository(simpleJpaPaymentEventRepository);
SimpleJpaPaymentEventRepository simpleJpaPaymentEventRepository,
SimpleJpaPaymentOrderRepository simpleJpaPaymentOrderRepository,
SimpleJpaProductRepository simpleJpaProductRepository) {
return new JpaPaymentEventRepository(
simpleJpaPaymentEventRepository,
paymentOrderRepository(simpleJpaPaymentOrderRepository, simpleJpaProductRepository));
}

@Bean
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.ordertogether.team14_be.member.application.service;

import com.ordertogether.team14_be.auth.JwtUtil;
import com.ordertogether.team14_be.member.application.dto.MemberInfoResponse;
import com.ordertogether.team14_be.member.application.exception.NotFoundMember;
import com.ordertogether.team14_be.member.persistence.MemberRepository;
Expand Down Expand Up @@ -37,6 +36,25 @@ public MemberInfoResponse findMemberInfo(Long memberId) {
.build();
}

@Transactional(readOnly = true)
public Long getMemberId(String email) {
return memberRepository
.findByEmail(email)
.map(Member::getId)
.orElseThrow(() -> new NoSuchElementException("Member with email " + email + " not found"));
}

@Transactional(readOnly = true)
public MemberInfoResponse findMemberInfo(Long memberId) {
Member member = findMember(memberId);

return MemberInfoResponse.builder()
.deliveryName(member.getDeliveryName())
.phoneNumber(member.getPhoneNumber())
.point(member.getPoint())
.build();
}

@Transactional
public MemberInfoResponse modifyMember(Long memberId, String deliveryName, String phoneNumber) {
Member member = findMember(memberId);
Expand Down Expand Up @@ -65,12 +83,8 @@ public Optional<Member> findMemberByEmail(String email) {
return memberRepository.findByEmail(email);
}

@Transactional
public void registerMember(Member member) {
memberRepository.saveAndFlush(member);
}

public Long getMemberId(String email) {
Member member = memberRepository.findByEmail(email).get();
return member.getId();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,16 @@ public class Member {

protected Member() {}

public Member(
Long id, String email, int point, String phoneNumber, String deliveryName, String platform) {
this.id = id;
this.email = email;
this.point = point;
this.phoneNumber = phoneNumber;
this.deliveryName = deliveryName;
this.platform = platform;
}

public Member(String email, int point, String phoneNumber, String deliveryName, String platform) {
this.email = email;
this.point = point;
Expand Down Expand Up @@ -73,18 +83,8 @@ public void modifyMemberInfo(String deliveryName, String phoneNumber) {
this.phoneNumber = phoneNumber;
}

public void modifyMemberInfo(String deliveryName, String phoneNumber) {
this.deliveryName = deliveryName;
this.phoneNumber = phoneNumber;
}

public void modifyMemberInfo(String deliveryName, String phoneNumber) {
this.deliveryName = deliveryName;
this.phoneNumber = phoneNumber;
}

public void modifyMemberInfo(String deliveryName, String phoneNumber) {
this.deliveryName = deliveryName;
this.phoneNumber = phoneNumber;
public Integer increasePoint(int point) {
this.point += point;
return this.point;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.ordertogether.team14_be.memebr.application.service;

import com.ordertogether.team14_be.memebr.persistence.MemberRepository;
import com.ordertogether.team14_be.memebr.persistence.entity.Member;
import org.springframework.stereotype.Service;

@Service
public class MemberService {

private final MemberRepository memberRepository;

public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}

public void findOrCreateMember(String email) {
Member member =
memberRepository
.findByEmail(email)
.orElseGet(
() -> {
Member newMember = Member.createMember(email);
return memberRepository.saveAndFlush(newMember);
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.ordertogether.team14_be.memebr.persistence;

import com.ordertogether.team14_be.memebr.persistence.entity.Member;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {

Optional<Member> findByEmail(String email);
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,12 @@ public enum PaymentStatus {
FAIL("결제 실패");

private final String description;

public boolean isSuccess() {
return this == SUCCESS;
}

public boolean isFail() {
return this == FAIL;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ public class PaymentEventEntity extends BaseTimeEntity {
@Column(nullable = false)
private String orderName;

@Column(nullable = false)
private String paymentKey; // PSP 결제 식별자

@Builder.Default
Expand Down
Loading

0 comments on commit ed3eabd

Please sign in to comment.