Skip to content

Commit

Permalink
[Release] Sprint3의 결과를 배포한다. (#388)
Browse files Browse the repository at this point in the history
* [Feature, FE] 스프린트2 버퍼 적용 (#226)

* chore: 웹팩 설정 파일 환경에 따라 분리 처리

Co-authored-by: Youngmin Hong <[email protected]>

* chore: 웹팩 설정에 hash를 fullhash로 변경

Co-authored-by: Youngmin Hong <[email protected]>

* chore: 절대경로 누락 부분 적용

Co-authored-by: Youngmin Hong <[email protected]>

* chore: 환경에 따라서 github client id가 변경되도록 설정

Co-authored-by: Youngmin Hong <[email protected]>

* chore: favicon이 webpack으로 함께 bundle 되도록 설정

Co-authored-by: Youngmin Hong <[email protected]>

* feat: API 오류 처리 구현

Co-authored-by: Youngmin Hong <[email protected]>

* style: 추가정보 입력 클릭 시 버튼 스타일 방식 수정

Co-authored-by: Youngmin Hong <[email protected]>

* feat: 추가정보 입력 API 연결 구현

Co-authored-by: Youngmin Hong <[email protected]>

* chore: lintignore 파일의 eol 누락 적용

Co-authored-by: Youngmin Hong <[email protected]>

* [FE] 모킹 데이터에서 발생하는 에러를 수정 (#243)

* fix: 리뷰 카드에서 사용자 아이디가 보이지 않는 문제를 수정한다.

* fix: 모킹 데이터에서 발생하는 타입스크립트 에러를 수정한다.

* [Feature, BE] auth 설정 파일 서브모듈 적용  (#244)

[BE] auth 설정 파일 서브모듈 적용 (#215)

feat: auth 설정 파일 서브모듈 적용

Co-authored-by: Jihoon Oh <[email protected]>

* [BugFix] 인기 많은 상품 페이지에 존재하는 새로고침 오류 수정 (#252)

fix: 인기 많은 상품 페이지에 존재하는 새로고침 오류 수정

* [Feature, FE] 위시리스트 추가 버튼 구현 (#262)

[FE] 위시리스트 추가 버튼 컴포넌트 구현 (#261)

feat: WishButton 컴포넌트 구현

* [Feature/BE] h2 데이터베이스에 관련된 설정을 서브모듈로 분리 (#270)

* [BE] h2 설정 파일 서브모듈 적용 (#265)

* [BE] 서브모듈로 분리한 h2 설정 파일 ignore (#269)

feat: gitignore에 application-h2.yml 추가

* [Feature/BE] 제품에 카테고리를 추가 (#258)

* [BE] 키보드 관련 URI 및 클래스 이름을 제품 관련 내용으로 수정 (#220)

* refactor: Keyboard 관련 repository, service, controller, URL을 Product로 수정

* refactor: Keyboard 도메인 클래스 이름 변경 및 table 연결 정보 변경

* [BE] 상품을 카테고리로 목록 조회하는 기능을 구현 (#224)

* feat: ProductFixture 구현

* feat: Product 엔티티에 Category 추가 및 ProductRepository에 카테고리로 조회 기능 추가

* feat: 카테고리 기준으로 Product 목록 조회하는 Service 기능 추가

* feat: 카테고리 기준으로 Product 목록 조회하는 API 구현

* docs: Product 카테고리별 조회 API 문서화

* style: 코드 포맷팅

* refactor: final 키워드 제거

* feat: 카테고리가 잘못 입력됐을 경우 BAD REQUEST 응답하는 기능 구현

* [BE] 열거형을 분리하고 DTO에 카테고리 추가 (#256)

* refactor: keyboard 키워드 product 혹은 items로 수정

* feat: 카테고리 열거형 뷰와 분리

* feat: 제품 카테고리별 조회 컨트롤러 구현

* feat: 제품 목록 조회 service 구현

* docs: 상품 목록 조회, 인벤토리 목록 조회 API 문서 작성

* feat: 상품 목록 조회, 인벤토리 목록 조회 API 구현

* feat: 카테고리 사용자 정의 예외 처리

* test: 중복된 테스트 제거

* refactor: 필요하지 않은 상수 제거

* [BE] 제품 카테고리 속성 추가 피드백 반영 (#276)

* refactor: final 키워드 추가

* refactor: InventoryProduct Product JoinColumn 수정

* refactor: Category 세미콜론 추가 및 CategoryConstant 수정

* refactor: GlobalExceptionHandler 잘못된 메서드 이름 수정

* refactor: keyboardId productId로 수정

* refactor: 개행 추가

* refactor: Rest-docs keyboard 키워드 수정

* test: CategoryConstantTest 수정

* test: CustomPageableArgumentResolverTest uri 카멜케이스로 수정

* test: ProductControllerTest uri 카멜케이스로 수정

* refactor: ProductResponse 메서드 변경 반영

* test: ProductAcceptanceTest 단일 제품 조회 검증 수정

* refactor: CategoryConstant static import 적용

* [Feature/FE] Private Route 처리 및 카테고리 페이지 구현 (#272)

* [FE] Private Route 컴포넌트 구현 및 적용 (#250)

* feat: private route 컴포넌트 구현 및 회원/비회원 사용자 구분 적용

* feat: login 응답에 registerCompleted 필드 추가

* feat: 추가정보 입력 여부 검증 후 route 처리

로그인 여부의 즉시 반영을 위해서 flushSync를 사용하도록 설정함에 유의

* [FE] 카테고리 상단 메뉴 구현 (#253)

* feat: 카테고리 선택 메뉴바 구현

* feat: toggle 시에 애니메이션 적용

* [FE] 카테고리 별 상품 목록 조회 페이지 구현 및 API 설정 (#255)

* feat: 상품 카테고리별 페이지 구현 및 API 요청 수정

* refactor: 카테고리 링크 리팩토링

* refactor: get many 훅의 params 처리 방식 수정

* feat: 카테고리 페이지에 따라 제목 변경 UI 구현 (#271)

* refactor: flushSync를 제거하고 로그인 시 추가정보 페이지로 이동 구현

* refactor: protected Route의 일부 네이밍 변경

* [Feature/BE] 사용자 검색 기능 구현 (#267)

* [BE] 사용자와 인벤토리에 연관관계를 설정 (#222)

* refactor: InventoryProduct에 Member 직접 참조

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

* refactor: Member에 InventoryProduct 직접 참조

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

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

* [BE] 사용자 검색 기능 구현 (#266)

* feat: Querydsl 설정

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

* feat: 사용자 검색 기능 Repository method querydsl로 구현

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

* refactor: presentation에서 사용하는 Enum 분리

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

* refactor: null 체크에 대한 메서드 변경

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

* feat: 사용자 검색 기능 Service 구현

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

* feat: Enum 바인딩 Converter 구현

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

* test: 쿼리 바인딩 로그 설정

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

* feat: 사용자 검색 기능 API 구현

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

* docs: 사용자 검색 기능 API 문서화

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

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

* [BE] 회원 검색 기능 피드백 반영 (#277)

* chore: queryDsl gradle 설정 방법 변경

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

* refactor: Enum 기본 생성자 제거

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

* refactor: Member 관련 response Dto에 presentation Enum 활용

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

* refactor: LoginMemberResponse toMember 제거

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

* test: 의미있는 변수명으로 변경

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

* test: KeyboardFixtures static import 적용

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

* refactor: Presentation Enum name 변경 및 static import 적용

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

* test: MemberFixtures 메서드 이름 변경

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

* test: MemberControllerTest 불필요한 convert import 삭제

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

* refactor: MemberRepositoryCustom 메서드 이름 변경

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

* refactor: findFirst 대신 findAny 사용

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

* refactor: Presentation Enum에서 메서드 명 변경

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

* refactor: MemberPageResponse 기본 생성자의 접근 제어자 변경

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

* test: 적합한 테스트 메소드명으로 변경

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

* test: 적절한 변수명 사용

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

* test: containsOnly 적용

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

* refactor: 불필요한 개행 제거

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

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

* refactor: conflict 해결

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

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

* [BugFix] Spring REST Docs가 생기지 않는 버그 수정완료 (#284)

chore: Spring REST Docs gradle 설정 변경

* [Feature/FE] 검색 기능에 필요한 UI 컴포넌트를 구현 (#288)

* [FE] 검색바 컴포넌트 구현 (#254)

feat: 검색바 컴포넌트 UI 구현

* [FE] 검색 필터 컴포넌트 구현  (#259)

* feat: ChipFilter 컴포넌트 구현

* feat: SearchFilter 컴포넌트 구현

* [FE] 유저 프로필 카드 컴포넌트를 구현 (#287)

* refactor: Chip 컴포넌트를 재사용가능하도록 수정

* feat: ProfileCard UI 구현

* style: ProfileCard css 수정

* style: ProfileCard 크기 조정

* feat: ProfileCard Carousel 구현

* refactor: 불필요한 console.log를 제거한다.

* refactor: ProfileCard의 padding을 조정한다.

* refactor: 프로필 사진 영역에 box-shadow를 추가한다.

* refactor: InventoryItem에 좌우 padding을 추가

* refactor: Carousel에서 사용하는 좌표 차이 값을 상수로 표현

* [Bugfix] jar 파일 생성 시 RESTDocs가 포함되지 않는 오류 수정 (#289)

* chore: build.gralde task 순서 변경

* chore: build.gradle copy task 변경

* chore: copySubmodule 순서 변경

* chore: copySubmodule 실행 강제

* chore: copyDocument 위치를 변경

* chore: copyDocument 파일 위치 오류 수정

* chore: build.gradle에서 불필요한 named task 제거

* [Feature/FE] 사용자 통계 컴포넌트 UI 구현 (#295)

* [FE] 유저 통계 컴포넌트 구현 (#294)

feat: BarGraph 컴포넌트 UI 구현

* fix: 파일 경로 오류 수정

* [Feature/FE] API Loading 및 Error 처리 방식 통일, UI 구현 (#302)

* [FE] API 요청의 Loading 상태 방식을 통일, Loading UI 구현 (#290)

* refactor: useGetOne 훅에서 로딩 방식 통일 및 리팩토링

inventory context 제거 후 프로필 페이지 컴포넌트 구성 자체를 변경

* refactor: useGetMany 훅에서 로딩 방식 통일 및 리팩토링

* feat: 로딩 UI 라이브러리 설치 및 UI 컴포넌트 적용

* [FE] API 요청의 Error 처리 통일, Error UI 구현 (#299)

* feat: useGetMany에 대한 오류 처리 구현

* feat: useGetOne에 대한 오류 처리 구현

* feat: 나머지 API 훅에 대한 오류 처리 구현

* [FE] Loading 및 Error UI 스타일 수정 (#301)

* style: 로딩으로 인해서 발생하는 layout shift 최소화 및 로딩 중앙 배치

* fix: 무한 스크롤에서 오류 이미지 표시 관련 로직 수정

* refactor: 불필요한 fragment 제거

* fix: 리뷰 추가 로딩 시 로딩 바 위치 수정

* feat: 404 페이지 구현

* [Feature/BE] 특정 제품에 대한 사용자 통계 기능 구현 (#293)

* [BE] fake github api를 리팩토링 (#281)

test: GitHubProfileFixtures 생성 및 FakeGitHubApiController 리팩토링

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

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

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

* [BE] 제품에 대한 사용자 통계 기능을 구현 (#292)

* [BugFix] Spring REST Docs가 생기지 않는 버그 수정완료 (#284)

chore: Spring REST Docs gradle 설정 변경

* feat: 특정 제품의 사용자 연차의 총개수를 반환하는 Repository 메서드 구현

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* feat: 특정 제품의 사용자 직군의 총개수를 반환하는 Repository 메서드 구현

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* refactor: 특정 제품의 사용자 연차와 직군의 총개수를 반환하는 Repository 패키지 변경

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* refactor: KeyboardNotFoundException 이름 변경

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* feat: 제품 사용자 통계 조회 service 구현

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* feat: 제품 사용자 통계 조회 API 구현

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* docs: 제품 사용자 통계 조회 API 문서화

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* refactor: 특정 제품 사용자 통계 서비스 로직 리팩토링

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* docs: 특정 제품 사용자 통계 서비스 API 응답 값 수정

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* [Feature/FE] 검색 기능에 필요한 UI 컴포넌트를 구현 (#288)

* [FE] 검색바 컴포넌트 구현 (#254)

feat: 검색바 컴포넌트 UI 구현

* [FE] 검색 필터 컴포넌트 구현  (#259)

* feat: ChipFilter 컴포넌트 구현

* feat: SearchFilter 컴포넌트 구현

* [FE] 유저 프로필 카드 컴포넌트를 구현 (#287)

* refactor: Chip 컴포넌트를 재사용가능하도록 수정

* feat: ProfileCard UI 구현

* style: ProfileCard css 수정

* style: ProfileCard 크기 조정

* feat: ProfileCard Carousel 구현

* refactor: 불필요한 console.log를 제거한다.

* refactor: ProfileCard의 padding을 조정한다.

* refactor: 프로필 사진 영역에 box-shadow를 추가한다.

* refactor: InventoryItem에 좌우 padding을 추가

* refactor: Carousel에서 사용하는 좌표 차이 값을 상수로 표현

* [Bugfix] jar 파일 생성 시 RESTDocs가 포함되지 않는 오류 수정 (#289)

* chore: build.gralde task 순서 변경

* chore: build.gradle copy task 변경

* chore: copySubmodule 순서 변경

* chore: copySubmodule 실행 강제

* chore: copyDocument 위치를 변경

* chore: copyDocument 파일 위치 오류 수정

* chore: build.gradle에서 불필요한 named task 제거

* [BE] 사용자 통계 기능 피드백을 반영 (#313)

* refactor: MemberRepositoryCustomImpl 알맞은 메
서드 사용

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* refactor: Enum Raw 타입 interface 타입으로 변경

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* refactor: ProductService 메서드 순서 변경 및 불필요한 개행 제거

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* refactor: querydsl 구현 repository에서 Q-class static import 적용 및 메서드 체이닝 적용

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* refactor: controller status ok일 때 반환 값을 지정하는 방식 통일화

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

Co-authored-by: yangdongjue5510 <[email protected]>
Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: Youngmin Hong <[email protected]>
Co-authored-by: Jihoon Oh <[email protected]>

* [�Feature/BE] 예외 상황시 예외 코드를 반환 (#298)

* [BE] 예외 상황시 예외 코드를 반환 (#297)

* refactor: 예외 응답값에 예외 코드 추가

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* refactor: 예외 클래스 명 수정

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* [Feature/FE] 사용자 통계 컴포넌트 UI 구현 (#295)

* [FE] 유저 통계 컴포넌트 구현 (#294)

feat: BarGraph 컴포넌트 UI 구현

* fix: 파일 경로 오류 수정

* [Feature/FE] API Loading 및 Error 처리 방식 통일, UI 구현 (#302)

* [FE] API 요청의 Loading 상태 방식을 통일, Loading UI 구현 (#290)

* refactor: useGetOne 훅에서 로딩 방식 통일 및 리팩토링

inventory context 제거 후 프로필 페이지 컴포넌트 구성 자체를 변경

* refactor: useGetMany 훅에서 로딩 방식 통일 및 리팩토링

* feat: 로딩 UI 라이브러리 설치 및 UI 컴포넌트 적용

* [FE] API 요청의 Error 처리 통일, Error UI 구현 (#299)

* feat: useGetMany에 대한 오류 처리 구현

* feat: useGetOne에 대한 오류 처리 구현

* feat: 나머지 API 훅에 대한 오류 처리 구현

* [FE] Loading 및 Error UI 스타일 수정 (#301)

* style: 로딩으로 인해서 발생하는 layout shift 최소화 및 로딩 중앙 배치

* fix: 무한 스크롤에서 오류 이미지 표시 관련 로직 수정

* refactor: 불필요한 fragment 제거

* fix: 리뷰 추가 로딩 시 로딩 바 위치 수정

* feat: 404 페이지 구현

* [Feature/BE] 특정 제품에 대한 사용자 통계 기능 구현 (#293)

* [BE] fake github api를 리팩토링 (#281)

test: GitHubProfileFixtures 생성 및 FakeGitHubApiController 리팩토링

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

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

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

* [BE] 제품에 대한 사용자 통계 기능을 구현 (#292)

* [BugFix] Spring REST Docs가 생기지 않는 버그 수정완료 (#284)

chore: Spring REST Docs gradle 설정 변경

* feat: 특정 제품의 사용자 연차의 총개수를 반환하는 Repository 메서드 구현

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* feat: 특정 제품의 사용자 직군의 총개수를 반환하는 Repository 메서드 구현

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* refactor: 특정 제품의 사용자 연차와 직군의 총개수를 반환하는 Repository 패키지 변경

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* refactor: KeyboardNotFoundException 이름 변경

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* feat: 제품 사용자 통계 조회 service 구현

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* feat: 제품 사용자 통계 조회 API 구현

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* docs: 제품 사용자 통계 조회 API 문서화

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* refactor: 특정 제품 사용자 통계 서비스 로직 리팩토링

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* docs: 특정 제품 사용자 통계 서비스 API 응답 값 수정

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* [Feature/FE] 검색 기능에 필요한 UI 컴포넌트를 구현 (#288)

* [FE] 검색바 컴포넌트 구현 (#254)

feat: 검색바 컴포넌트 UI 구현

* [FE] 검색 필터 컴포넌트 구현  (#259)

* feat: ChipFilter 컴포넌트 구현

* feat: SearchFilter 컴포넌트 구현

* [FE] 유저 프로필 카드 컴포넌트를 구현 (#287)

* refactor: Chip 컴포넌트를 재사용가능하도록 수정

* feat: ProfileCard UI 구현

* style: ProfileCard css 수정

* style: ProfileCard 크기 조정

* feat: ProfileCard Carousel 구현

* refactor: 불필요한 console.log를 제거한다.

* refactor: ProfileCard의 padding을 조정한다.

* refactor: 프로필 사진 영역에 box-shadow를 추가한다.

* refactor: InventoryItem에 좌우 padding을 추가

* refactor: Carousel에서 사용하는 좌표 차이 값을 상수로 표현

* [Bugfix] jar 파일 생성 시 RESTDocs가 포함되지 않는 오류 수정 (#289)

* chore: build.gralde task 순서 변경

* chore: build.gradle copy task 변경

* chore: copySubmodule 순서 변경

* chore: copySubmodule 실행 강제

* chore: copyDocument 위치를 변경

* chore: copyDocument 파일 위치 오류 수정

* chore: build.gradle에서 불필요한 named task 제거

* [BE] 사용자 통계 기능 피드백을 반영 (#313)

* refactor: MemberRepositoryCustomImpl 알맞은 메
서드 사용

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* refactor: Enum Raw 타입 interface 타입으로 변경

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* refactor: ProductService 메서드 순서 변경 및 불필요한 개행 제거

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* refactor: querydsl 구현 repository에서 Q-class static import 적용 및 메서드 체이닝 적용

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* refactor: controller status ok일 때 반환 값을 지정하는 방식 통일화

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

Co-authored-by: yangdongjue5510 <[email protected]>
Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: Youngmin Hong <[email protected]>
Co-authored-by: Jihoon Oh <[email protected]>

* [BE] 예외 상황시 예외 코드 반환 피드백 반영 (#315)

* refactor: CustomException 생성자 매개변수 순서 수정 및 getter 어노테이션 사용, ErrorCode 잘못된 코드 수정

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* refactor: JobTypeConstant, CareerLevelConstant 패키지 수정

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>
Co-authored-by: Youngmin Hong <[email protected]>
Co-authored-by: Yo Wook Kim <[email protected]>
Co-authored-by: Jihoon Oh <[email protected]>

* [Feature/FE] 사용자 통계 기능 구현 (#310)

[FE] 사용자 통계 기능 구현 (#309)

* feat: 사용자 통계 기능 구현

* fix: BarGraph storybook 에러 수정

* [Feature/FE] 사용자 검색 기능 구현 (#321)

[FE] 사용자 검색 기능 구현 (#320)

* feat: 프로필 검색 페이지 UI 구현

* feat: 프로필 검색 기능 구현

* [Feature/FE] 모달 컴포넌트 구현 및 alert, confirm에 적용 (#308)

* [FE] 모달 UI 구현 (#305)

feat: 모달 UI 구현 및 스토리 작성

* [FE] 모달로 window.alert 및 window.confirm 대체 (#307)

* feat: modal 렌더링 컨텍스트 구현

* feat: 모달 스타일 수정

* chore: 이벤트 핸들러에서 promise 사용할 수 있도록 lint 설정 변경

* feat: useModal 훅 구현 및 적용

* [BugFix/BE] 페이지 조회 시 중복되는 아이템 조회되는 이슈 해결 (#318)

* refactor: 기본 정렬 기준 적용

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* [BE] 페이지 조회 시 중복되는 아이템 조회되는 이슈 피드백 반영완료 (#332)

test: 제품을 조회할 때, 정렬 조건으로 id에 대한 역순을 적용하더라도, 정렬이 되는지 확인하는 test 추가

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* [Feature/BE] GitHub Actions workflow에 테스트 리포트 추가 (#334)

* [BE] GitHub Actions workflow에 테스트 리포트 추가 (#333)

chore: GitHub Actions workflow에 테스트 리포트 추가

* [BE] backend workflow 파일 내부 경로 설정 통일 (#336)

chore: backend workflow 파일 내부 경로 설정 통일

* [Bugfix/BE] 테스트 리포트 파일 경로 수정 (#338)

chore: 테스트 리포트 파일 경로 수정

* [Feature/BE] 서브모듈 적용 방식을 프로필 include에서 import로 변경 (#346)

[BE] 서브모듈 적용 방식을 프로필 include에서 import로 변경 (#345)

chore: 서브모듈 적용 방식을 프로필 include에서 import로 변경

* [Bugfix/FE] 프론트엔드 버그 이슈 해결 (#347)

* fix: 대표장비 선택창 토글 수정 및 요청 처리 케이스 수정 (#197, #199)

* fix: API 명세에 맞게 추가정보 입력 키워드 수정

* fix: API 명세에 맞게 useInventory 훅의 응답 처리 키 값 수정(#273)

* fix: 토큰 오류 응답이 발생하는 경우 자동으로 로그아웃 하도록 수정 (#286)

* fix: 데이터 없는 경우 무한 로딩 수정 및 데이터 없음 컴포넌트 추가

* [Feature/FE] 테스트 전략을 수립하고 자동화 테스트 코드를 추가  (#349)

* chore: cypress 테스트 환경설정

Co-authored-by: Yo Wook Kim <[email protected]>

* chore: github action yml 파일 작성

* fix: 스토리북 에러 수정

* chore: chromatic 설치

* chore: cypress test 파일 생성

* chore: cypress 설정 마무리

* fix: 불필요한 jpg 파일 제거 및 코드 반영

* refactor: 테스트와 접근성을 위해서 태그 변경 및 속성 추가

* chore: cypress 환경에서는 msw가 실행되지 않도록 설정

* test: 홈 페이지에 대한 E2E 테스트 작성

* chore: 프론트엔드 CI 트리거 설정

* fix: 프론트 CI 파일 문법 오류 수정

* fix: cypress 타입 오류 해결

* test: 홈 페이지 테스트 리팩토링

* fix: 테스트에서 only 제거

* test: 카테고리, 상품 상세 페이지 E2E 테스트코드 작성

Co-authored-by: HyeonJi Yoo <[email protected]>
Co-authored-by: Dongjue Yang <[email protected]>

* fix: e2e 테스트 코드 에러 수정

* fix: 실패하는 테스트 코드를 수정

Co-authored-by: Yo Wook Kim <[email protected]>
Co-authored-by: HyeonJi Yoo <[email protected]>
Co-authored-by: Dongjue Yang <[email protected]>

* [Feature/BE] 같은 카테고리에 대해서는 대표장비를 1개만 등록할 수 있는 기능 수정 (#328)

* [BE] 같은 카테고리에 대해서는 대표장비를 1개만 등록할 수 있는 기능 수정 (#327)

* refactor: 대표장비 업데이트 로직 수정

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* feat: 같은 카테고리에 대해서는 대표장비를 1개만 등록할 수 있는 service 기능 구현

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* test: 같은 카테고리에 대해서는 대표장비를 1개만 등록할 수 있는 기능 test 추가

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* test: 소프트웨어 카테고리에 대해서는 대표장비를 등록할 수 없도록 하는 service 기능 구현

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* [BE] 같은 카테고리에 대해서는 대표장비를 1개만 등록할 수 있는 기능 피드백 반영 (#355)

* refactor: 소프트웨어 카테고리 미포함 검증 메소드명 변경

* refactor: 대표장비에 대한 카테고리 중복 예외 클래스명 변경

* refactor: 대표장비로 등록할 수 없는 카테고리에 대한 예외 클래스명 변경

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>
Co-authored-by: HyeonJi Yoo <[email protected]>

* [Feature/BE] 회원을 검색할 때 대표장비가 아닌 다른 제품들도 나오는 오류 수정 (#330)

* refactor: 대표장비 업데이트 로직 수정

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* [BE] 회원을 검색할 때 대표장비가 아닌 다른 제품들도 나오는 오류 수정 (#329)

refactor: 회원 검색 시 대표 장비와 함께 조회되도록 수정

* [BE] 회원 검색 시 대표장비만 조회되도록 수정 코드 리뷰 피드백 반영 (#356)

refactor: 코드 리뷰 피드백 반영

Co-authored-by: yh20studio(tiki) <[email protected]>
Co-authored-by: hamcheeseburger <[email protected]>

* [BugFix/BE] 대표장비 업데이트 로직 수정 (#326)

* refactor: 대표장비 업데이트 로직 수정

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* [BE] 회원을 검색할 때 대표장비가 아닌 다른 제품들도 나오는 오류 수정 (#329)

refactor: 회원 검색 시 대표 장비와 함께 조회되도록 수정

* [BE] 대표장비 업데이트 로직 수정 피드백을 반영 (#359)

* refactor: InventoryProductRepository 벌크 업데이트 하는 메서드 시그니처 변경

* test: InventoryProductRepository id 값을 지정하지않고 저장하도록 변경

* refactor: exception 메서드 시그니처 변경

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>
Co-authored-by: Dongjue Yang <[email protected]>

* [Feature/BE] 로깅 구현 (#351)

[BE] 로깅 구현 (#350)

* chore: log4j2 관련 의존성 추가

* feat: 프로필 별 log4j2 환경 설정 구현

* feat: 예외에 대한 로그 추가

* feat: API 요청 응답에 대한 로그 구현

* refactor: 프로필 별 yaml 파일 submodule import

* [BE] main, release, local 환경에 따라 다른 github oauth app과 데이터베이스에 연결하도록 설정 (#362)

[BE] main, release, local 환경에 따라 다른 github oauth app과 데이터베이스에 연결하도록 설정 (#361)

chore: main, release, local 환경에 따라 다른 github oauth app과 데이터베이스에 연결하도록 설정

* [Bugfix/BE] mysql 드라이버 설정 (#365)

[BE] mysql 드라이버 설정 (#364)

fix: mysql-connector-java 의존성 추가

* [Feature/FE] 통계 그래프 토글 버튼 수정 요청을 반영 (#358)

* [FE] 통계 그래프 토글 버튼 수정 요청을 반영 (#357)

style: BarGraph에 제목을 추가한다.

* [Feature/BE] 회원을 검색할 때 대표장비가 아닌 다른 제품들도 나오는 오류 수정 (#330)

* refactor: 대표장비 업데이트 로직 수정

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* [BE] 회원을 검색할 때 대표장비가 아닌 다른 제품들도 나오는 오류 수정 (#329)

refactor: 회원 검색 시 대표 장비와 함께 조회되도록 수정

* [BE] 회원 검색 시 대표장비만 조회되도록 수정 코드 리뷰 피드백 반영 (#356)

refactor: 코드 리뷰 피드백 반영

Co-authored-by: yh20studio(tiki) <[email protected]>
Co-authored-by: hamcheeseburger <[email protected]>

* [BugFix/BE] 대표장비 업데이트 로직 수정 (#326)

* refactor: 대표장비 업데이트 로직 수정

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>

* [BE] 회원을 검색할 때 대표장비가 아닌 다른 제품들도 나오는 오류 수정 (#329)

refactor: 회원 검색 시 대표 장비와 함께 조회되도록 수정

* [BE] 대표장비 업데이트 로직 수정 피드백을 반영 (#359)

* refactor: InventoryProductRepository 벌크 업데이트 하는 메서드 시그니처 변경

* test: InventoryProductRepository id 값을 지정하지않고 저장하도록 변경

* refactor: exception 메서드 시그니처 변경

Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>
Co-authored-by: Dongjue Yang <[email protected]>

* [Feature/BE] 로깅 구현 (#351)

[BE] 로깅 구현 (#350)

* chore: log4j2 관련 의존성 추가

* feat: 프로필 별 log4j2 환경 설정 구현

* feat: 예외에 대한 로그 추가

* feat: API 요청 응답에 대한 로그 구현

* refactor: 프로필 별 yaml 파일 submodule import

* fix: 통계 UI 관련 테스트 수정 및 무한 스크롤 테스트 수정

Co-authored-by: Dongjue Yang <[email protected]>
Co-authored-by: yh20studio(tiki) <[email protected]>
Co-authored-by: hamcheeseburger <[email protected]>
Co-authored-by: tiki <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>
Co-authored-by: Yo Wook Kim <[email protected]>

* chore: 빌드 시 필수 패키지만 설치할 수 있도록 패키지 설정 변경 (#367)

* [Feature/FE] 프로필 검색 기능 보완 (#373)

[FE] 프로필 검색 기능 보완 (#372)

feat: 프로필 검색 기능 보완

* [Feature/FE] 프로필 기능을 보완 (#376)

* [FE] 프로필 기능을 보완 (#375)

* fix: 프로필 페이지에서 chip이 보이도록 수정

* feat: 프로필 페이지 구현

Co-authored-by: Yo Wook Kim <[email protected]>

* feat: MSW 실행

Co-authored-by: Yo Wook Kim <[email protected]>

* fix: 스토리북 오류 수정

Co-authored-by: Yo Wook Kim <[email protected]>

* [Feature/FE] 다른 사람의 프로필 페이지 보기 기능 (#377)

feat: 다른 사람의 프로필 페이지 보기 기능

Co-authored-by: Yo Wook Kim <[email protected]>

Co-authored-by: Yo Wook Kim <[email protected]>

* [Feature/FE] 통계 그래프 색상 수정 (#378)

style: 통계 그래프 색상 수정

* [Feature/FE] package.json 정보 수정 (#379)

chore: package.json 정보 수정

* [BugFix/BE] 회원 정보를 조회할 때 id에 대한 역순으로 정렬이 안되는 오류 수정 (#369)

* [BE] 회원 정보를 조회할 때 id에 대한 역순으로 정렬이 안되는 오류 수정 (#368)

* fix: 회원정보 조회 시 기본 정렬 기준이 적용되도록 수정

* refactor: 접근제어자 수정

* refactor: 불필요한 개행 제거

* [Chore/FE] 빌드 환경별로 소셜 로그인 링크 분기 설정 (#380)

chore: 빌드 환경별로 소셜 로그인 링크 분기 설정

* [Bugfix/FE] 리뷰 작성 최대 길이 검증 수정 (#382)

fix: 리뷰 작성 최대 길이 검증 수정

* [Bugfix/FE] 사용자 통계 그래프 버그 수정 (#384)

fix: 통계 수치 반올림 처리

* [Bugfix/FE] 프로필 페이지에 섹션 제목 및 설명 추가 (#385)

style: 프로필 페이지에 섹션 제목 및 설명 추가

* [Bugfix] 원격 레포지토리의 submodule 버전이 최신화되지 않는 오류 수정 (#387)

chore: submodule gitignore 제거

Co-authored-by: Yo Wook Kim <[email protected]>
Co-authored-by: Youngmin Hong <[email protected]>
Co-authored-by: Youngmin Hong <[email protected]>
Co-authored-by: Youngyoon-1 <[email protected]>
Co-authored-by: Jihoon Oh <[email protected]>
Co-authored-by: Dongjue Yang <[email protected]>
Co-authored-by: tiki <[email protected]>
Co-authored-by: yangdongjue5510 <[email protected]>
Co-authored-by: HyeonJi Yoo <[email protected]>
Co-authored-by: Dongjue Yang <[email protected]>
Co-authored-by: yh20studio(tiki) <[email protected]>
  • Loading branch information
12 people authored Aug 4, 2022
1 parent b294497 commit 404ce94
Show file tree
Hide file tree
Showing 308 changed files with 9,945 additions and 3,221 deletions.
12 changes: 12 additions & 0 deletions .github/workflows/backend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,15 @@ jobs:

- name: gradle build
run: ./gradlew build

- name: publish unit test results
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
with:
files: backend/build/test-results/test/TEST-*.xml

- name: add comments to a pull request
uses: mikepenz/action-junit-report@v3
if: always()
with:
report_paths: backend/build/test-results/test/TEST-*.xml
44 changes: 44 additions & 0 deletions .github/workflows/frontend.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: frontend

on:
push:
branches:
- main
- release
paths:
- 'frontend/**'
pull_request:
branches:
- main
- release
paths:
- 'frontend/**'

defaults:
run:
working-directory: frontend

jobs:
cypress-run:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Cypress run
uses: cypress-io/github-action@v4
with:
start: npm run start
working-directory: frontend
chromatic-deployment:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Install dependencies
run: npm install
- name: Publish to Chromatic
uses: chromaui/action@v1
with:
projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
workingDir: frontend
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "backend/security"]
path = backend/security
url = https://github.com/woowacourse-f12/security.git
4 changes: 2 additions & 2 deletions backend/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,5 @@ out/
### VS Code ###
.vscode/

### auth ###
application-auth.yml
### submodules ###
submodules/
27 changes: 23 additions & 4 deletions backend/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ sourceCompatibility = '11'

configurations {
asciidoctorExtensions
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}

repositories {
Expand All @@ -22,8 +25,11 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
implementation 'com.lmax:disruptor:3.4.2'

runtimeOnly 'com.h2database:h2'
runtimeOnly 'mysql:mysql-connector-java'

compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
Expand All @@ -41,18 +47,32 @@ dependencies {
// rest-docs
asciidoctorExtensions 'org.springframework.restdocs:spring-restdocs-asciidoctor'
testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc'

implementation 'com.querydsl:querydsl-jpa'

annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
}

ext {
set('snippetsDir', file("build/generated-snippets"))
}

tasks.named('test') {
task copySubmodule(type: Copy) {
copy {
from 'security'
include "*.yml"
into 'src/main/resources/submodules'
}
}

test {
outputs.dir snippetsDir
useJUnitPlatform()
}

tasks.named('asciidoctor') {
asciidoctor {
configurations 'asciidoctorExtensions'
inputs.dir snippetsDir
sources {
Expand All @@ -64,9 +84,8 @@ tasks.named('asciidoctor') {

task copyDocument(type: Copy) {
dependsOn asciidoctor

from file("${asciidoctor.outputDir}")
into file("src/main/resources/static")
into file("build/resources/main/static")
}

bootJar {
Expand Down
1 change: 1 addition & 0 deletions backend/security
Submodule security added at 353aee
2 changes: 1 addition & 1 deletion backend/src/docs/asciidoc/index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@

include::auth.adoc[]
include::members.adoc[]
include::keyboards.adoc[]
include::products.adoc[]
include::reviews.adoc[]
include::inventoryProducts.adoc[]
16 changes: 0 additions & 16 deletions backend/src/docs/asciidoc/keyboards.adoc

This file was deleted.

4 changes: 4 additions & 0 deletions backend/src/docs/asciidoc/members.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,7 @@ operation::members-get-by-memberId[snippets='http-request,http-response']
=== 로그인된 상태로 나의 회원 정보 수정

operation::members-update[snippets='http-request,http-response']

=== 회원 검색

operation::members-search[snippets='http-request,http-response']
29 changes: 29 additions & 0 deletions backend/src/docs/asciidoc/products.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
[[Product]]
== Product API

=== 제품 단일 상품 조회

operation::products-get[snippets='http-request,http-response']

=== 제품 목록 페이지 조회

==== category 조건

- `keyboard` (키보드)
- `mouse` (마우스)
- `monitor` (모니터)
- `stand` (거치대)
- `software` (소프트웨어)
- 없을 경우 모든 제품 조회

==== sort 조건

- `rating,desc`(평점순)
- `reviewCount,desc`(리뷰 많은순)
- 없을 경우 등록 순서

operation::products-page-get[snippets='http-request,http-response']

=== 특정 제품의 사용자 통계를 조회

operation::products-member-statistics-get[snippets='http-request,http-response']
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package com.woowacourse.f12.application.inventoryproduct;

import static com.woowacourse.f12.domain.product.Category.SOFTWARE;

import com.woowacourse.f12.domain.inventoryproduct.InventoryProduct;
import com.woowacourse.f12.domain.inventoryproduct.InventoryProductRepository;
import com.woowacourse.f12.domain.member.Member;
import com.woowacourse.f12.domain.member.MemberRepository;
import com.woowacourse.f12.dto.request.inventoryproduct.ProfileProductRequest;
import com.woowacourse.f12.dto.response.inventoryproduct.InventoryProductsResponse;
import com.woowacourse.f12.exception.badrequest.InvalidProfileProductException;
import com.woowacourse.f12.exception.notfound.InventoryItemNotFoundException;
import com.woowacourse.f12.exception.internalserver.SqlUpdateException;
import com.woowacourse.f12.exception.badrequest.DuplicatedProfileProductCategoryException;
import com.woowacourse.f12.exception.badrequest.InvalidProfileProductCategoryException;
import com.woowacourse.f12.exception.internalserver.SqlUpdateException;
import com.woowacourse.f12.exception.badrequest.NotUpdatableException;
import com.woowacourse.f12.exception.notfound.MemberNotFoundException;
import java.util.List;
import java.util.Objects;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand All @@ -28,31 +33,50 @@ public InventoryProductService(final InventoryProductRepository inventoryProduct

@Transactional
public void updateProfileProducts(final Long memberId, final ProfileProductRequest profileProductRequest) {
validateMember(memberId);
validateInvalidProfileProductRequest(profileProductRequest);
updateProfileProduct(profileProductRequest);
final Member member = memberRepository.findById(memberId)
.orElseThrow(MemberNotFoundException::new);
final List<Long> selectedInventoryProductIds = profileProductRequest.getSelectedInventoryProductIds();
validateProfileProducts(selectedInventoryProductIds);
cancelProfileProducts(member);
registerProfileProducts(member, selectedInventoryProductIds);
}

private void validateInvalidProfileProductRequest(final ProfileProductRequest profileProductRequest) {
if (Objects.isNull(profileProductRequest.getSelectedInventoryProductId()) && Objects.isNull(
profileProductRequest.getUnselectedInventoryProductId())) {
throw new InvalidProfileProductException();
}
private void validateProfileProducts(final List<Long> selectedInventoryProductIds) {
final List<InventoryProduct> inventoryProducts = inventoryProductRepository.findAllById(
selectedInventoryProductIds);
validateNotContainsSoftware(inventoryProducts);
validateCategoryNotDuplicated(inventoryProducts);
}

private void updateProfileProduct(final ProfileProductRequest profileProductRequest) {
if (!Objects.isNull(profileProductRequest.getSelectedInventoryProductId())) {
updateProfileProduct(profileProductRequest.getSelectedInventoryProductId(), true);
private void validateNotContainsSoftware(final List<InventoryProduct> inventoryProducts) {
final boolean hasSoftware = inventoryProducts.stream()
.map(it -> it.getProduct().getCategory())
.anyMatch(it -> it.equals(SOFTWARE));
if (hasSoftware) {
throw new InvalidProfileProductCategoryException();
}
if (!Objects.isNull(profileProductRequest.getUnselectedInventoryProductId())) {
updateProfileProduct(profileProductRequest.getUnselectedInventoryProductId(), false);
}

private void validateCategoryNotDuplicated(final List<InventoryProduct> inventoryProducts) {
final long distinctCount = inventoryProducts.stream()
.map(it -> it.getProduct().getCategory())
.distinct()
.count();
if (distinctCount != inventoryProducts.size()) {
throw new DuplicatedProfileProductCategoryException();
}
}

private void updateProfileProduct(final Long inventoryItemId, final boolean selected) {
final InventoryProduct inventoryProduct = inventoryProductRepository.findById(inventoryItemId)
.orElseThrow(InventoryItemNotFoundException::new);
inventoryProduct.updateSelected(selected);
private void cancelProfileProducts(final Member member) {
inventoryProductRepository.updateBulkProfileProductByMember(member, false);
}

private void registerProfileProducts(final Member member, final List<Long> selectedInventoryProductIds) {
final int updatedCount = inventoryProductRepository.updateBulkProfileProductByMemberAndIds(member,
selectedInventoryProductIds, true);
if (updatedCount != selectedInventoryProductIds.size()) {
throw new NotUpdatableException();
}
}

public InventoryProductsResponse findByMemberId(final Long memberId) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
package com.woowacourse.f12.application.member;


import com.woowacourse.f12.domain.member.CareerLevel;
import com.woowacourse.f12.domain.member.JobType;
import com.woowacourse.f12.domain.member.Member;
import com.woowacourse.f12.domain.member.MemberRepository;
import com.woowacourse.f12.dto.request.member.MemberRequest;
import com.woowacourse.f12.dto.request.member.MemberSearchRequest;
import com.woowacourse.f12.dto.response.member.MemberPageResponse;
import com.woowacourse.f12.dto.response.member.MemberResponse;
import com.woowacourse.f12.exception.badrequest.InvalidProfileArgumentException;
import com.woowacourse.f12.exception.notfound.MemberNotFoundException;
import com.woowacourse.f12.presentation.member.CareerLevelConstant;
import com.woowacourse.f12.presentation.member.JobTypeConstant;
import java.util.Objects;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand All @@ -31,12 +40,36 @@ public MemberResponse findById(final Long memberId) {
@Transactional
public void updateMember(final Long memberId, final MemberRequest memberRequest) {
final Member member = findMember(memberId);
member.updateCareerLevel(memberRequest.getCareerLevel());
member.updateJobType(memberRequest.getJobType());
member.updateCareerLevel(memberRequest.getCareerLevel().toCareerLevel());
member.updateJobType(memberRequest.getJobType().toJobType());
}

private Member findMember(final Long memberId) {
return memberRepository.findById(memberId)
.orElseThrow(MemberNotFoundException::new);
}

public MemberPageResponse findByContains(final MemberSearchRequest memberSearchRequest, final Pageable pageable) {
final CareerLevel careerLevel = parseCareerLevel(memberSearchRequest);
final JobType jobType = parseJobType(memberSearchRequest);
final Slice<Member> slice = memberRepository.findBySearchConditions(memberSearchRequest.getQuery(), careerLevel,
jobType, pageable);
return MemberPageResponse.from(slice);
}

private JobType parseJobType(final MemberSearchRequest memberSearchRequest) {
final JobTypeConstant jobTypeConstant = memberSearchRequest.getJobType();
if (Objects.isNull(jobTypeConstant)) {
return null;
}
return jobTypeConstant.toJobType();
}

private CareerLevel parseCareerLevel(final MemberSearchRequest memberSearchRequest) {
final CareerLevelConstant careerLevelConstant = memberSearchRequest.getCareerLevel();
if (Objects.isNull(careerLevelConstant)) {
return null;
}
return careerLevelConstant.toCareerLevel();
}
}

This file was deleted.

Loading

0 comments on commit 404ce94

Please sign in to comment.