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

[4팀 윤영서] [Chapter 2-2] 디자인 패턴과 함수형 프로그래밍 #33

Open
wants to merge 62 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
d2ec9e2
misc: prettier 및 린트설정
Jan 12, 2025
632b681
refactor: 전반적인 린트 적용
Jan 12, 2025
d019050
feat: calculateItemTotal 함수 구현
Jan 12, 2025
d21f6ac
feat: getMaxApplicableDiscount 함수 구현
Jan 12, 2025
17ca6fd
feat: calculateItemTotal 함수에 할인 적용 로직 추가
Jan 12, 2025
f968583
feat: calculateCartTotal 함수 구현
Jan 12, 2025
374af7f
feat: updateCartItemQuantity 구현
Jan 12, 2025
c1a05a3
feat: useCoupons 훅 구현
Jan 12, 2025
bea0d6f
feat: useProducts 훅 구현
Jan 12, 2025
cfe5dc0
feat: useCart 훅 구현
Jan 12, 2025
22e0e5a
chore: .eslintrc.cjs에서 TypeScript 파일 오버라이드 제거
Jan 13, 2025
ef96845
feat: useLocalStorage 훅 추가
Jan 13, 2025
38c5f00
test: useLocalStorage 훅에 대한 테스트 추가
Jan 13, 2025
f239c4f
feat: useLocalStorage 훅을 index.ts에 추가
Jan 13, 2025
5151089
feat: debounce 유틸리티 함수 추가
Jan 13, 2025
c1a2fc3
test: useLocalStorage 및 debounce 유틸리티 함수에 대한 테스트 추가
Jan 13, 2025
3234e72
refactor: useLocalStorage를 사용하여 장바구니 및 쿠폰 상태 관리 개선
Jan 14, 2025
4a3d9d9
test: 테스트 실행 전 localStorage 초기화 추가
Jan 14, 2025
978cf16
fix: useLocalStorage JSON 파싱 에러 처리 추가
Jan 15, 2025
101b72d
refactor: Header 컴포넌트 분리
Jan 16, 2025
fedfcc6
refactor: 초기 상품 및 쿠폰 데이터를 별도 파일로 분리
Jan 16, 2025
1d3f450
refactor: workflows로 폴더명 변경
Jan 16, 2025
0df0ca4
refactor: CartPage 및 AdminPage 경로 수정
Jan 16, 2025
f849c4c
refactor: Accordion 컴포넌트 분리
Jan 16, 2025
96dea5b
refactor: ProductForm 분리
Jan 16, 2025
5d709ed
refactor: ProductManagement 컴포넌트 분리
Jan 16, 2025
81d9af4
refactor: products에서 product로 변경
Jan 16, 2025
22a6a5d
refactor: CouponManagement 컴포넌트 분리
Jan 16, 2025
d7e2aef
refactor: useCoupon 및 useProduct 훅을 features 디렉토리로 이동
Jan 16, 2025
52b82d6
refactor: 테스트 파일에서 CartPage 및 AdminPage의 경로 수정 및 useCoupons, useProdu…
Jan 16, 2025
30aa6cf
refactor: useCoupon 및 useProduct 훅에서 경로 수정
Jan 16, 2025
25daaea
refactor: CartPage에서 분리
Jan 16, 2025
5e2ea12
refactor: ProductItem 컴포넌트 분리
Jan 16, 2025
9ce7240
refactor: CartItem 컴포넌트 분리
Jan 16, 2025
cdd3da7
refactor: CouponItem 컴포넌트 분리
Jan 16, 2025
3ad0376
feat: formatCouponDiscount 헬퍼 함수 구현
Jan 16, 2025
0ffd65d
refactor: AdminPage와 CartPage의 Props 인터페이스 이름 변경
Jan 16, 2025
5263dff
test: formatCouponDiscount 헬퍼 함수에 대한 단위 테스트 추가
Jan 16, 2025
1834dc8
refactor: 헬퍼 함수 파일 경로 변경 및 관련 임포트 수정
Jan 16, 2025
bd08547
feat: 쿠폰 유효성 검사 함수 추가
Jan 16, 2025
19ae0c0
test: validateCoupon 헬퍼 함수에 대한 단위 테스트 추가
Jan 16, 2025
06d40e0
test: 단위테스트를 given when then 형태로 개선
Jan 16, 2025
7727ada
refactor: CouponSelector에서 formatCouponDiscount 사용
Jan 16, 2025
cbc6a2b
refactor: Coupon 타입에 DiscountType 추가
Jan 16, 2025
fe90b30
refactor: CouponForm 분리
Jan 16, 2025
31dfc03
feat: useForm 훅 추가
Jan 16, 2025
2ac00e3
refactor: useForm 훅을 사용하여 CouponForm의 상태 관리 개선
Jan 16, 2025
18e3a5b
refactor: useForm 훅을 사용하여 ProductForm의 상태 관리 개선
Jan 16, 2025
3c12128
test: useForm 훅에 대한 단위 테스트 추가
Jan 16, 2025
22c5249
refactor: useCart 훅을 쿠폰 기능에 맞게 경로 수정
Jan 16, 2025
3e9527a
refactor: useCart 훅의 경로 수정
Jan 16, 2025
4fede68
feat: useSort 훅 추가
Jan 16, 2025
0c5c8db
feat: useProductSort 훅 추가
Jan 16, 2025
925179e
feat: 쿠폰 선택기 테스트 ID 추가 및 정렬 기능 구현
Jan 16, 2025
d389d91
test: useSort 훅에 대한 단위 테스트 추가
Jan 16, 2025
e39906a
feat: useAccordion 훅 구현
Jan 16, 2025
85764c5
refactor: cartModel을 helper로 이동
Jan 16, 2025
bec4b60
refactor: useCartStorage 훅으로 관심사 분리
Jan 16, 2025
20f8b14
refactor: calculateAppliedDiscount 및 getRemainingStock를 헬퍼로 분리
Jan 16, 2025
40722e3
feat: 통화 형식을 포맷하는 유틸리티 함수 추가 및 관련 컴포넌트 수정
Jan 16, 2025
c92ab1b
feat: formatCurrency 유틸리티 함수 구현 및 관련 테스트 추가
Jan 16, 2025
f5c211e
refactor: ProductManagement 컴포넌트에서 불필요한 상태 및 토글 함수 제거
Jan 16, 2025
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: 4 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules/
dist/
build/
.eslintrc.cjs
84 changes: 70 additions & 14 deletions .eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -1,18 +1,74 @@
module.exports = {
root: true,
env: { browser: true, es2020: true },
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:react-hooks/recommended',
],
ignorePatterns: ['dist', '.eslintrc.cjs'],
parser: '@typescript-eslint/parser',
plugins: ['react-refresh'],
env: {
browser: true,
es2021: true,
node: true,
},
extends: ['eslint:recommended'],
plugins: ['import', 'prettier', 'promise', 'security', 'simple-import-sort', 'sonarjs'],
parserOptions: {
ecmaVersion: 2021,
sourceType: 'module',
},
globals: {
cartStore: 'writable',
productStore: 'writable',
},
rules: {
'react-refresh/only-export-components': [
'warn',
{ allowConstantExport: true },
],
// JavaScript 규칙
curly: ['warn', 'all'],
eqeqeq: 'error',
'no-console': ['warn', { allow: ['warn', 'error'] }],
'no-multiple-empty-lines': ['warn', { max: 1 }],
'no-unused-vars': 'off',
'prefer-const': 'warn',
'no-implicit-coercion': 'error',
'no-redeclare': 'warn',
'no-shadow': 'off',
'no-var': 'error',

// Import 규칙
'import/newline-after-import': 'warn',
'import/no-duplicates': 'warn',
'import/order': ['off'],
'import/prefer-default-export': 'off',

// promise 관련 추가 규칙
'promise/always-return': 'error',
'promise/no-return-wrap': 'error',

// security 관련 규칙
'security/detect-non-literal-regexp': 'warn',
'security/detect-object-injection': 'warn',

// simple-import-sort 규칙
'simple-import-sort/exports': 'error',
'simple-import-sort/imports': 'error',

// sonarjs 규칙
'sonarjs/cognitive-complexity': ['error', 15],
'sonarjs/no-duplicate-string': 'warn',
},
}
overrides: [
{
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint'],
extends: ['plugin:@typescript-eslint/recommended'],
parserOptions: {
project: './tsconfig.json',
tsconfigRootDir: __dirname,
},
rules: {
'@typescript-eslint/no-unused-vars': ['warn', { args: 'none', ignoreRestSiblings: true }],
'@typescript-eslint/explicit-module-boundary-types': ['warn'],
'@typescript-eslint/no-explicit-any': 'warn',
'@typescript-eslint/consistent-type-imports': 'error',
'@typescript-eslint/member-ordering': 'warn',
'@typescript-eslint/no-inferrable-types': 'off',
'@typescript-eslint/no-unused-expressions': 'warn',
},
},
],
ignorePatterns: ['node_modules/', 'dist/', 'build/', '.eslintrc.js'],
};
File renamed without changes.
12 changes: 12 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"trailingComma": "all",
"tabWidth": 2,
"semi": true,
"singleQuote": true,
"printWidth": 120,
"bracketSpacing": true,
"jsxBracketSameLine": false,
"arrowParens": "always",
"endOfLine": "auto",
"useTabs": false
}
10 changes: 9 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,17 @@
"@typescript-eslint/parser": "^8.10.0",
"@vitejs/plugin-react-swc": "^3.7.1",
"@vitest/ui": "^2.1.3",
"eslint": "^9.12.0",
"eslint": "^8.57.1",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-promise": "^7.2.1",
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-refresh": "^0.4.12",
"eslint-plugin-security": "^3.0.1",
"eslint-plugin-simple-import-sort": "^12.1.1",
"eslint-plugin-sonarjs": "^3.0.1",
"jsdom": "^26.0.0",
"prettier": "^3.4.2",
"typescript": "^5.6.3",
"vite": "^5.4.9",
"vitest": "^2.1.3"
Expand Down
Loading
Loading