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

Week10 merge #141

Merged
merged 68 commits into from
Nov 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
23f5ee6
feat: 토큰 재발급 인증 인가 추가 #81
jjt4515 Nov 7, 2024
b3c28df
chore: 회원가입 로직 member 폴더로 위치 변경 #81
jjt4515 Nov 7, 2024
9001e53
refactor: 멤버 서비스 내 isFarmer, isCustomer 메서드 삭제 #81
jjt4515 Nov 7, 2024
afbac6f
feat: 이미지 타입에 멤버 프로필 추가 및 멤버 조회 로직 관리자, 멤버 권한 별로 분리 #81
jjt4515 Nov 8, 2024
fb0e7b0
feat: 멤버 Security 적용 #81
jjt4515 Nov 8, 2024
d012610
feat: 이미지 타입에 멤버 프로필 추가 및 이미지 Security 적용 #81
jjt4515 Nov 8, 2024
85d68d7
feat: S3 Security 적용 #81
jjt4515 Nov 8, 2024
7795f80
fix: conflict 해결#81
jjt4515 Nov 8, 2024
01d0275
build : 빌드 수정
Nov 8, 2024
a6b85ad
feat : exception 및 포트원 실패 reason handler 추가
Nov 8, 2024
eb0287f
refactoring : 기존 order/refund refactoring
Nov 8, 2024
4bfa69f
refactoring : order/payment/aftersales(환불,교환,취소) entity 수정
Nov 8, 2024
fdc8644
refactoring : order/payment/aftersales(환불,교환,취소) entity enum type
Nov 8, 2024
dced612
feat : farm/product 연관관계/메서드 추가
Nov 8, 2024
4e0141a
feat : 멤버 필드 이름 변경
Nov 8, 2024
1e6f1ce
feat : exception handler 추가
Nov 8, 2024
bf3f90e
feat : order/payment dto 추가
Nov 8, 2024
e82e79b
feat : order controller/service/repository 변경
Nov 8, 2024
1377ff2
feat : security config 수정
Nov 8, 2024
51df13c
feat : payment controller/service 수정
Nov 8, 2024
3e6be73
feat : after sales(결제 전 취소, 환불, 교환) controller/ service/entity 추가
Nov 8, 2024
968afd7
feat : farm order details(미정)
Nov 8, 2024
9a28d50
Merge remote-tracking branch 'refs/remotes/origin/week10' into featur…
Nov 8, 2024
129db4d
Merge pull request #109 from kakao-tech-campus-2nd-step3/feature/ISSU…
jjt4515 Nov 8, 2024
cdb3930
feat: Reservation에 price 추가 (#108)
stopmin Nov 8, 2024
c33eca4
[CICD] tf-prod.json 파일 추가 (#115)
stopmin Nov 8, 2024
9872fe3
[CI] 테스트 실패 시 GitHub 봇 댓글 알림 기능 추가 (#117)
stopmin Nov 8, 2024
a01f27f
feat : 기존 controller 삭제
Nov 8, 2024
d12704e
[TEST] Farm 테스트 코드 작성 (#112)
stopmin Nov 9, 2024
44442b6
refactor: 토큰 재발급 액세스 토큰 추출 로직 수정 #124
jjt4515 Nov 9, 2024
0c67619
refactor: 회원 본인 조회 권한에 관리자도 추가 #124
jjt4515 Nov 9, 2024
abddbd9
refactor: 멤버 권한 농부로 전환 로직 권한을 CUSTOMER로 수정 #124
jjt4515 Nov 9, 2024
f5d3a9e
refactor: 이미지 제한 갯수 상수 처리 #124
jjt4515 Nov 9, 2024
f664297
refactor: 이미지 서비스에서 멤버 프로필 서비스를 의존 #124
jjt4515 Nov 9, 2024
bb5d8c2
fix: Bean 못 찾는 문제 해결 #124
jjt4515 Nov 9, 2024
99deee9
refactor: reissueToken 서비스 로직 인자 수정 #124
jjt4515 Nov 9, 2024
d8a987d
fix: 오류 일단 해결 #124
jjt4515 Nov 9, 2024
f7b3540
feat: 고객, 농부 프로필 엔티티 생성 #82
jjt4515 Nov 9, 2024
26cfd3b
refactor: 회원가입 시 name도 받도록 #82
jjt4515 Nov 9, 2024
e50d930
feat: Role별 Profile 분리 #82
jjt4515 Nov 9, 2024
5e2dcc2
fix: findByEmailAndDeletedAtIsNull로 수정 #82
jjt4515 Nov 9, 2024
0ad5160
refactor: 회원 전체 조회 -> 전체 요약 조회로 변경 #82
jjt4515 Nov 9, 2024
49b90b2
refactor: MemberProfileResponse 인터페이스로 변경 #82
jjt4515 Nov 9, 2024
f92ef30
store생성하기 (#104)
canyos Nov 9, 2024
5d90acf
ReviewResponse에서 getName부분 수정 #129
jjt4515 Nov 9, 2024
8110a47
fix: 충돌 해결 #129
jjt4515 Nov 9, 2024
f5a8537
fix: 충돌 해결 #129
jjt4515 Nov 9, 2024
e7e62ec
fix: 순환 참조 문제 해결 #129
jjt4515 Nov 9, 2024
ef21148
feat : product cancel(배송 전 취소) 구현
Nov 10, 2024
4e8322e
Merge pull request #130 from kakao-tech-campus-2nd-step3/fix/ISSUE-129
jjt4515 Nov 11, 2024
1d355f6
refactoring : 추상 클래스 삭제 및 enum type 변경
Nov 11, 2024
c29b510
feat : order/payment/after sales 변경
Nov 11, 2024
59d2daa
feat : error 추가 및 ExceptionAdvice추가
Nov 11, 2024
5b4736e
refactoring : controller 변경
Nov 11, 2024
e93cdb9
feat : iamport config와 paymentUtil 분리
Nov 11, 2024
f2ac7d4
refactoring : payment service 나눔
Nov 11, 2024
521e2f0
feat : cancelService interface 구현
Nov 11, 2024
838b4a3
feat : after service를 위한 dto
Nov 11, 2024
93820a4
feat : after sales service를 구현
Nov 11, 2024
c8e5c36
feat : 상품 등록 dto 및 after sales repository 구현
Nov 11, 2024
746104b
feat : farm order service 및 인터페이스 구현
Nov 11, 2024
058071e
refactoring : product order repository와 service 구현
Nov 11, 2024
d5e02c0
Merge remote-tracking branch 'refs/remotes/origin/week10' into featur…
Nov 11, 2024
ca5ca17
conflict 해결
Nov 11, 2024
74a05a8
conflict 해결
Nov 11, 2024
c57c2d7
Merge pull request #110 from kakao-tech-campus-2nd-step3/feature/ISSU…
amm0124 Nov 11, 2024
e44e0f4
Merge remote-tracking branch 'refs/remotes/origin/week10' into featur…
Nov 11, 2024
0362e8c
Merge pull request #139 from kakao-tech-campus-2nd-step3/feature/ISSU…
amm0124 Nov 11, 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
48 changes: 48 additions & 0 deletions .github/workflows/ci-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Run Tests on PR

on:
pull_request:
types: [ opened, synchronize, reopened ]

permissions:
contents: write
pull-requests: write
checks: write

jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up JDK 21
uses: actions/setup-java@v3
with:
java-version: '21'
distribution: 'adopt'

- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-

- name: Grant execute permission for gradlew
run: chmod +x ./gradlew

- name: Run tests
run: ./gradlew test
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: 테스트 결과를 PR에 코멘트로 등록합니다
uses: EnricoMi/publish-unit-test-result-action@v1
if: always()
with:
files: '**/build/test-results/test/TEST-*.xml'
github_token: ${{ secrets.GITHUB_TOKEN }}
seconds_between_github_reads: 5
seconds_between_github_writes: 5
6 changes: 3 additions & 3 deletions .github/workflows/deploy-ecs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ env:
ECR_REPOSITORY: poomasi-server
ECS_SERVICE: poomasi-server
ECS_CLUSTER: poomasi
ECS_TASK_DEFINITION: tf-staging.json
ECS_TASK_DEFINITION: tf-prod.json
CONTAINER_NAME: spring
PROGRESS_SLACK_CHANNEL: C080DMAE7MX
permissions:
Expand Down Expand Up @@ -64,10 +64,10 @@ jobs:
- name: Checkout
uses: actions/checkout@v4

- name: Set up JDK 22
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
java-version: '22'
java-version: '21'
distribution: 'adopt'

- name: Grant execute permission for gradlew
Expand Down
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ plugins {
id 'java'
id 'org.springframework.boot' version '3.3.1'
id 'io.spring.dependency-management' version '1.1.5'
id 'com.apollographql.apollo3' version '4.0.0-beta.7'

}

group = 'camp.nextstep.edu'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,6 @@
@Configuration
public class SecurityBeanGenerator {

private final TokenStorageService tokenStorageService;
private final MemberService memberService;
private final TokenBlacklistService tokenBlacklistService;

@Bean
@Description("AuthenticationProvider를 위한 Spring bean")
Expand All @@ -37,11 +34,5 @@ MvcRequestMatcher.Builder mvc(HandlerMappingIntrospector introspector) {
return new MvcRequestMatcher.Builder(introspector);
}

@Bean
JwtUtil jwtUtil(){
return new JwtUtil(tokenBlacklistService,
tokenStorageService,
memberService);
}

}
4 changes: 2 additions & 2 deletions src/main/java/poomasi/domain/auth/config/SecurityConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ public class SecurityConfig {
private final CustomSuccessHandler customSuccessHandler;
private final UserDetailsServiceImpl userDetailsService;


@Autowired
private OAuth2UserDetailServiceImpl oAuth2UserDetailServiceImpl;

Expand Down Expand Up @@ -74,10 +73,11 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti

// 기본 경로 및 테스트 경로
http.authorizeHttpRequests((authorize) -> authorize
.requestMatchers(HttpMethod.GET, "/api/farm/**").permitAll()
.requestMatchers(HttpMethod.POST, "/api/farm/**").permitAll()
.requestMatchers(HttpMethod.GET, "/api/product/**").permitAll()
.requestMatchers(HttpMethod.GET, "/api/review/**").permitAll()
.requestMatchers(HttpMethod.GET, "/health").permitAll()
.requestMatchers(HttpMethod.GET, "/api/image/**").permitAll()
.requestMatchers("/api/sign-up", "/api/login", "api/reissue", "api/payment/**", "api/order/**", "api/reservation/**", "/api/v1/farmer/reservations").permitAll()
.requestMatchers("/api/need-auth/**").authenticated()
.anyRequest().
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import poomasi.domain.auth.security.oauth2.dto.response.OAuth2Response;
import poomasi.domain.member.entity.LoginType;
import poomasi.domain.member.entity.Member;
import poomasi.domain.member.entity.MemberProfile;
import poomasi.domain.member._profile.entity.MemberProfile;
import poomasi.domain.member.entity.Role;
import poomasi.domain.member.repository.MemberRepository;

Expand Down Expand Up @@ -52,7 +52,7 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2Authentic


//일단 없으면 가입시키는 쪽으로 구현ㄴ
Member member = memberRepository.findByEmail(email).orElse(null);
Member member = memberRepository.findByEmailAndDeletedAtIsNull(email).orElse(null);
if(member == null) {
member = Member.builder()
.email(email)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public UserDetailsServiceImpl(MemberRepository memberRepository) {

@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
Member member = memberRepository.findByEmail(email)
Member member = memberRepository.findByEmailAndDeletedAtIsNull(email)
.orElseThrow(() -> new BusinessException(BusinessError.MEMBER_NOT_FOUND));
return new UserDetailsImpl(member);
}
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package poomasi.domain.auth.token.refreshtoken.service;

import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,29 @@
package poomasi.domain.auth.token.reissue.controller;


import org.springframework.beans.factory.annotation.Autowired;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;
import poomasi.domain.auth.token.reissue.dto.ReissueRequest;
import poomasi.domain.auth.token.reissue.dto.ReissueResponse;
import poomasi.domain.auth.token.reissue.service.ReissueTokenService;

@RestController
@RequiredArgsConstructor
public class ReissueTokenController {

@Autowired
private ReissueTokenService reissueTokenService;
private final ReissueTokenService reissueTokenService;

@PostMapping("/api/reissue")
public ResponseEntity<ReissueResponse> reissue(@RequestHeader(HttpHeaders.AUTHORIZATION) String authorizationHeader,
@RequestBody ReissueRequest reissueRequest){

@GetMapping("/api/reissue")
public ResponseEntity<ReissueResponse> reissue(@RequestBody ReissueRequest reissueRequest){
return ResponseEntity.ok(reissueTokenService.reissueToken(reissueRequest));
String accessToken = authorizationHeader.replace("Bearer ", "");

return ResponseEntity.ok(reissueTokenService.reissueToken(accessToken, reissueRequest));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,15 @@ public class ReissueTokenService {
private final RefreshTokenService refreshTokenService;

// 토큰 재발급
public ReissueResponse reissueToken(ReissueRequest reissueRequest) {
public ReissueResponse reissueToken(String accessToken, ReissueRequest reissueRequest) {
Long memberId = jwtUtil.getIdFromToken(accessToken);

String refreshToken = reissueRequest.refreshToken();
Long memberId = jwtUtil.getIdFromToken(refreshToken);
Long requestMemberId = jwtUtil.getIdFromToken(refreshToken);

if (!requestMemberId.equals(memberId)) {
throw new BusinessException(REFRESH_TOKEN_NOT_VALID);
}

checkRefreshToken(refreshToken, memberId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public record FarmRegisterRequest(
Double longitude,
String phoneNumber,
String description,
Long experiencePrice,
int experiencePrice,
Integer maxCapacity,
Integer maxReservation
) {
Expand Down
18 changes: 9 additions & 9 deletions src/main/java/poomasi/domain/farm/dto/FarmResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@
import poomasi.domain.farm.entity.Farm;


public record FarmResponse( // FIXME: 사용자 정보 추가 및 설명/전화번호 추가
Long id,
String name,
String address,
String addressDetail,
Double latitude,
Double longitude,
String description,
Long experiencePrice
public record FarmResponse(
Long id,
String name,
String address,
String addressDetail,
Double latitude,
Double longitude,
String description,
int experiencePrice
) {
public static FarmResponse fromEntity(Farm farm) {
return new FarmResponse(
Expand Down
13 changes: 9 additions & 4 deletions src/main/java/poomasi/domain/farm/entity/Farm.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import java.time.LocalDateTime;

import poomasi.domain.order.entity._farm.OrderedFarm;
import poomasi.domain.review.entity.Review;

@Entity
Expand Down Expand Up @@ -56,7 +57,7 @@ public class Farm {
private FarmStatus status = FarmStatus.OPEN;

@Comment("체험 비용")
private Long experiencePrice;
private int experiencePrice;

@Comment("팀 최대 인원")
private Integer maxCapacity;
Expand All @@ -77,10 +78,14 @@ public class Farm {

@OneToMany(cascade = CascadeType.REMOVE, orphanRemoval = true)
@JoinColumn(name = "entityId")
List<Review> reviewList = new ArrayList<>();
private List<Review> reviewList = new ArrayList<>();

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ordered_farm_id")
private OrderedFarm orderedFarm;

@Builder
public Farm(Long id, String name, Long ownerId, String address, String addressDetail, Double latitude, Double longitude, String description, Long experiencePrice, Integer maxCapacity, Integer maxReservation) {
public Farm(Long id, String name, Long ownerId, String address, String addressDetail, Double latitude, Double longitude, String description, int experiencePrice, Integer maxCapacity, Integer maxReservation) {
this.id = id;
this.name = name;
this.ownerId = ownerId;
Expand All @@ -104,7 +109,7 @@ public Farm updateFarm(FarmUpdateRequest farmUpdateRequest) {
return this;
}

public void updateExpPrice(Long expPrice) {
public void updateExpPrice(int expPrice) {
this.experiencePrice = expPrice;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ private Farm getFarmByFarmId(Long farmId) {
return farmRepository.findByIdAndDeletedAtIsNull(farmId).orElseThrow(() -> new BusinessException(FARM_NOT_FOUND));
}

public void updateFarmExpPrice(Long farmerId, Long farmId, Long expPrice) {
public void updateFarmExpPrice(Long farmerId, Long farmId, int expPrice) {
Farm farm = this.getFarmByFarmId(farmId);
if (!farm.getOwnerId().equals(farmerId)) {
throw new BusinessException(FARM_OWNER_MISMATCH);
Expand Down
Loading
Loading