geek-custom-api-core 0.0.39 → 0.0.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.history/package_20260210022723.json +96 -0
- package/.history/package_20260213152745.json +96 -0
- package/.history/sql/{deposit_20260107014035.sql → deposit_20260210122921.sql} +1 -1
- package/.history/sql/{deposit_20260107014025.sql → deposit_20260210122922.sql} +3 -1
- package/.history/sql/{deposit_20260107014018.sql → deposit_20260210123015.sql} +6 -4
- package/.history/sql/{deposit_20260107014011.sql → deposit_20260210123203.sql} +9 -7
- package/.history/sql/deposit_20260212040156.sql +121 -0
- package/dist/common/filter/GlobalExceptionFilter.d.ts +2 -1
- package/dist/common/filter/GlobalExceptionFilter.js +63 -71
- package/dist/common/filter/GlobalExceptionFilter.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +1 -1
- package/sql/deposit.sql +5 -3
- package/.history/sql/deposit_20251227185545.sql +0 -0
- package/.history/sql/deposit_20251227185930.sql +0 -13
- package/.history/sql/deposit_20251227185933.sql +0 -13
- package/.history/sql/deposit_20251227190816.sql +0 -37
- package/.history/sql/deposit_20251227192700.sql +0 -61
- package/.history/sql/deposit_20251227192841.sql +0 -64
- package/.history/sql/deposit_20251227192941.sql +0 -50
- package/.history/sql/deposit_20251227193434.sql +0 -63
- package/.history/sql/deposit_20251227193642.sql +0 -63
- package/.history/sql/deposit_20251227193650.sql +0 -63
- package/.history/sql/deposit_20251227193750.sql +0 -63
- package/.history/sql/deposit_20251227193800.sql +0 -63
- package/.history/sql/deposit_20251227194014.sql +0 -75
- package/.history/sql/deposit_20251227194019.sql +0 -75
- package/.history/sql/deposit_20251227194022.sql +0 -75
- package/.history/sql/deposit_20251227194025.sql +0 -75
- package/.history/sql/deposit_20251227194104.sql +0 -68
- package/.history/sql/deposit_20251229182850.sql +0 -75
- package/.history/sql/deposit_20251229182900.sql +0 -75
- package/.history/sql/deposit_20251229182902.sql +0 -75
- package/.history/sql/deposit_20251229182929.sql +0 -76
- package/.history/sql/deposit_20251229182949.sql +0 -76
- package/.history/sql/deposit_20251229183054.sql +0 -75
- package/.history/sql/deposit_20251229183153.sql +0 -79
- package/.history/sql/deposit_20251229235124.sql +0 -79
- package/.history/sql/deposit_20251230000718.sql +0 -108
- package/.history/sql/deposit_20251230001700.sql +0 -110
- package/.history/sql/deposit_20251230001836.sql +0 -110
- package/.history/sql/deposit_20251230121407.sql +0 -111
- package/.history/sql/deposit_20260107000750.sql +0 -113
- package/.history/sql/deposit_20260107013938.sql +0 -115
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "geek-custom-api-core",
|
|
3
|
+
"version": "0.0.40",
|
|
4
|
+
"description": "",
|
|
5
|
+
"author": "",
|
|
6
|
+
"license": "UNLICENSED",
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": "18.x"
|
|
11
|
+
},
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "nest build",
|
|
14
|
+
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
15
|
+
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\"",
|
|
16
|
+
"lint:fix": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
|
|
17
|
+
"start": "nest start"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@aws-sdk/client-s3": "^3.400.0",
|
|
21
|
+
"@aws-sdk/client-secrets-manager": "^3.939.0",
|
|
22
|
+
"@nestjs/axios": "^3.0.2",
|
|
23
|
+
"@nestjs/common": "^10.3.9",
|
|
24
|
+
"@nestjs/config": "^3.2.2",
|
|
25
|
+
"@nestjs/core": "^10.3.9",
|
|
26
|
+
"@nestjs/jwt": "^10.1.0",
|
|
27
|
+
"@nestjs/mapped-types": "^2.0.2",
|
|
28
|
+
"@nestjs/passport": "^10.0.0",
|
|
29
|
+
"@nestjs/platform-express": "^10.3.9",
|
|
30
|
+
"@nestjs/swagger": "^7.4.2",
|
|
31
|
+
"@nestjs/typeorm": "^10.0.0",
|
|
32
|
+
"axios": "^1.4.0",
|
|
33
|
+
"bcrypt": "^5.1.0",
|
|
34
|
+
"class-transformer": "^0.5.1",
|
|
35
|
+
"class-validator": "^0.14.0",
|
|
36
|
+
"date-fns": "^2.30.0",
|
|
37
|
+
"dayjs": "^1.11.10",
|
|
38
|
+
"fast-xml-parser": "^4.3.6",
|
|
39
|
+
"ioredis": "^5.4.1",
|
|
40
|
+
"moment": "^2.29.4",
|
|
41
|
+
"moment-timezone": "^0.5.46",
|
|
42
|
+
"multer-s3": "^3.0.1",
|
|
43
|
+
"mysql2": "^3.6.0",
|
|
44
|
+
"passport-jwt": "^4.0.1",
|
|
45
|
+
"reflect-metadata": "^0.1.13",
|
|
46
|
+
"rxjs": "^7.8.1",
|
|
47
|
+
"typeorm": "^0.3.17",
|
|
48
|
+
"uuid": "^9.0.1",
|
|
49
|
+
"xlsx": "^0.18.5"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@nestjs/cli": "^10.0.0",
|
|
53
|
+
"@nestjs/schematics": "^9.0.0",
|
|
54
|
+
"@types/bcrypt": "^5.0.0",
|
|
55
|
+
"@types/express": "^4.17.13",
|
|
56
|
+
"@types/jest": "^29.5.0",
|
|
57
|
+
"@types/multer": "^2.0.0",
|
|
58
|
+
"@types/node": "^18.19.0",
|
|
59
|
+
"@types/passport-jwt": "^3.0.9",
|
|
60
|
+
"@types/supertest": "^2.0.12",
|
|
61
|
+
"@typescript-eslint/eslint-plugin": "^7.18.0",
|
|
62
|
+
"@typescript-eslint/parser": "^7.18.0",
|
|
63
|
+
"eslint": "^8.57.0",
|
|
64
|
+
"eslint-config-prettier": "^9.1.0",
|
|
65
|
+
"eslint-plugin-prettier": "^5.0.0",
|
|
66
|
+
"jest": "^29.7.0",
|
|
67
|
+
"prettier": "^3.2.5",
|
|
68
|
+
"source-map-support": "^0.5.21",
|
|
69
|
+
"supertest": "^7.1.3",
|
|
70
|
+
"ts-jest": "^29.1.2",
|
|
71
|
+
"ts-loader": "^9.5.1",
|
|
72
|
+
"ts-node": "^10.9.2",
|
|
73
|
+
"tsconfig-paths": "^4.2.0",
|
|
74
|
+
"typescript": "^5.3.3",
|
|
75
|
+
"webpack": "^5.90.0",
|
|
76
|
+
"webpack-cli": "^5.1.4",
|
|
77
|
+
"webpack-node-externals": "^3.0.0"
|
|
78
|
+
},
|
|
79
|
+
"jest": {
|
|
80
|
+
"moduleFileExtensions": [
|
|
81
|
+
"js",
|
|
82
|
+
"json",
|
|
83
|
+
"ts"
|
|
84
|
+
],
|
|
85
|
+
"rootDir": "src",
|
|
86
|
+
"testRegex": ".*\\.spec\\.ts$",
|
|
87
|
+
"transform": {
|
|
88
|
+
"^.+\\.(t|j)s$": "ts-jest"
|
|
89
|
+
},
|
|
90
|
+
"collectCoverageFrom": [
|
|
91
|
+
"**/*.(t|j)s"
|
|
92
|
+
],
|
|
93
|
+
"coverageDirectory": "../coverage",
|
|
94
|
+
"testEnvironment": "node"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "geek-custom-api-core",
|
|
3
|
+
"version": "0.0.41",
|
|
4
|
+
"description": "",
|
|
5
|
+
"author": "",
|
|
6
|
+
"license": "UNLICENSED",
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": "18.x"
|
|
11
|
+
},
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "nest build",
|
|
14
|
+
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
15
|
+
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\"",
|
|
16
|
+
"lint:fix": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
|
|
17
|
+
"start": "nest start"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@aws-sdk/client-s3": "^3.400.0",
|
|
21
|
+
"@aws-sdk/client-secrets-manager": "^3.939.0",
|
|
22
|
+
"@nestjs/axios": "^3.0.2",
|
|
23
|
+
"@nestjs/common": "^10.3.9",
|
|
24
|
+
"@nestjs/config": "^3.2.2",
|
|
25
|
+
"@nestjs/core": "^10.3.9",
|
|
26
|
+
"@nestjs/jwt": "^10.1.0",
|
|
27
|
+
"@nestjs/mapped-types": "^2.0.2",
|
|
28
|
+
"@nestjs/passport": "^10.0.0",
|
|
29
|
+
"@nestjs/platform-express": "^10.3.9",
|
|
30
|
+
"@nestjs/swagger": "^7.4.2",
|
|
31
|
+
"@nestjs/typeorm": "^10.0.0",
|
|
32
|
+
"axios": "^1.4.0",
|
|
33
|
+
"bcrypt": "^5.1.0",
|
|
34
|
+
"class-transformer": "^0.5.1",
|
|
35
|
+
"class-validator": "^0.14.0",
|
|
36
|
+
"date-fns": "^2.30.0",
|
|
37
|
+
"dayjs": "^1.11.10",
|
|
38
|
+
"fast-xml-parser": "^4.3.6",
|
|
39
|
+
"ioredis": "^5.4.1",
|
|
40
|
+
"moment": "^2.29.4",
|
|
41
|
+
"moment-timezone": "^0.5.46",
|
|
42
|
+
"multer-s3": "^3.0.1",
|
|
43
|
+
"mysql2": "^3.6.0",
|
|
44
|
+
"passport-jwt": "^4.0.1",
|
|
45
|
+
"reflect-metadata": "^0.1.13",
|
|
46
|
+
"rxjs": "^7.8.1",
|
|
47
|
+
"typeorm": "^0.3.17",
|
|
48
|
+
"uuid": "^9.0.1",
|
|
49
|
+
"xlsx": "^0.18.5"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@nestjs/cli": "^10.0.0",
|
|
53
|
+
"@nestjs/schematics": "^9.0.0",
|
|
54
|
+
"@types/bcrypt": "^5.0.0",
|
|
55
|
+
"@types/express": "^4.17.13",
|
|
56
|
+
"@types/jest": "^29.5.0",
|
|
57
|
+
"@types/multer": "^2.0.0",
|
|
58
|
+
"@types/node": "^18.19.0",
|
|
59
|
+
"@types/passport-jwt": "^3.0.9",
|
|
60
|
+
"@types/supertest": "^2.0.12",
|
|
61
|
+
"@typescript-eslint/eslint-plugin": "^7.18.0",
|
|
62
|
+
"@typescript-eslint/parser": "^7.18.0",
|
|
63
|
+
"eslint": "^8.57.0",
|
|
64
|
+
"eslint-config-prettier": "^9.1.0",
|
|
65
|
+
"eslint-plugin-prettier": "^5.0.0",
|
|
66
|
+
"jest": "^29.7.0",
|
|
67
|
+
"prettier": "^3.2.5",
|
|
68
|
+
"source-map-support": "^0.5.21",
|
|
69
|
+
"supertest": "^7.1.3",
|
|
70
|
+
"ts-jest": "^29.1.2",
|
|
71
|
+
"ts-loader": "^9.5.1",
|
|
72
|
+
"ts-node": "^10.9.2",
|
|
73
|
+
"tsconfig-paths": "^4.2.0",
|
|
74
|
+
"typescript": "^5.3.3",
|
|
75
|
+
"webpack": "^5.90.0",
|
|
76
|
+
"webpack-cli": "^5.1.4",
|
|
77
|
+
"webpack-node-externals": "^3.0.0"
|
|
78
|
+
},
|
|
79
|
+
"jest": {
|
|
80
|
+
"moduleFileExtensions": [
|
|
81
|
+
"js",
|
|
82
|
+
"json",
|
|
83
|
+
"ts"
|
|
84
|
+
],
|
|
85
|
+
"rootDir": "src",
|
|
86
|
+
"testRegex": ".*\\.spec\\.ts$",
|
|
87
|
+
"transform": {
|
|
88
|
+
"^.+\\.(t|j)s$": "ts-jest"
|
|
89
|
+
},
|
|
90
|
+
"collectCoverageFrom": [
|
|
91
|
+
"**/*.(t|j)s"
|
|
92
|
+
],
|
|
93
|
+
"coverageDirectory": "../coverage",
|
|
94
|
+
"testEnvironment": "node"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -108,7 +108,7 @@ CREATE TABLE gs_depositCoupon (
|
|
|
108
108
|
policySno INT NOT NULL COMMENT '쿠폰 정책 번호',
|
|
109
109
|
partnerSno INT NOT NULL COMMENT '고객사 번호',
|
|
110
110
|
couponCode VARCHAR(20) NOT NULL COMMENT '랜덤 숫자 쿠폰 코드',
|
|
111
|
-
usedFl ENUM('
|
|
111
|
+
usedFl ENUM('Y','N') NOT NULL DEFAULT 'N' COMMENT '사용 여부',
|
|
112
112
|
memberNo INT NULL COMMENT '사용 회원',
|
|
113
113
|
memberId VARCHAR(50) NULL COMMENT '회원 아이디',
|
|
114
114
|
memberName VARCHAR(50) NULL COMMENT '회원명',
|
|
@@ -108,8 +108,10 @@ CREATE TABLE gs_depositCoupon (
|
|
|
108
108
|
policySno INT NOT NULL COMMENT '쿠폰 정책 번호',
|
|
109
109
|
partnerSno INT NOT NULL COMMENT '고객사 번호',
|
|
110
110
|
couponCode VARCHAR(20) NOT NULL COMMENT '랜덤 숫자 쿠폰 코드',
|
|
111
|
-
usedFl ENUM('
|
|
111
|
+
usedFl ENUM('Y','N') NOT NULL DEFAULT 'N' COMMENT '사용 여부',
|
|
112
112
|
memberNo INT NULL COMMENT '사용 회원',
|
|
113
|
+
memberId VARCHAR(50) NULL COMMENT '회원 아이디',
|
|
114
|
+
memberName VARCHAR(50) NULL COMMENT '회원명',
|
|
113
115
|
regDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
114
116
|
updateDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '사용일',
|
|
115
117
|
UNIQUE KEY uk_coupon_member (sno, memberNo),
|
|
@@ -2,8 +2,8 @@ CREATE TABLE gs_depositManager(
|
|
|
2
2
|
sno INT PRIMARY KEY AUTO_INCREMENT,
|
|
3
3
|
partnerSno INT NOT NULL COMMENT '고객사 번호',
|
|
4
4
|
memberNo INT NOT NULL COMMENT '회원번호',
|
|
5
|
-
memberId VARCHAR(50)
|
|
6
|
-
memberName VARCHAR(50)
|
|
5
|
+
memberId VARCHAR(50) NULL COMMENT '회원 아이디',
|
|
6
|
+
memberName VARCHAR(50) NULL COMMENT '회원명',
|
|
7
7
|
depositType ENUM('ISSUE', 'USE', 'REFUND', 'ADJUST', 'EXPIRED') NOT NULL COMMENT '거래유형',
|
|
8
8
|
source ENUM('ADMIN', 'ORDER', 'SYSTEM') NOT NULL DEFAULT 'ADMIN' COMMENT '발생 주체',
|
|
9
9
|
managerSno INT NOT NULL COMMENT '관리자 번호',
|
|
@@ -98,7 +98,7 @@ CREATE TABLE gs_depositCouponManager (
|
|
|
98
98
|
expireAfterDays INT NOT NULL COMMENT '등록 후 만료까지 일수 (n일)',
|
|
99
99
|
issueLimit INT NULL COMMENT '총 발급 수량 (NULL = 무제한)',
|
|
100
100
|
issueCount INT NOT NULL DEFAULT 0 COMMENT '발급된 수량',
|
|
101
|
-
|
|
101
|
+
usedFl ENUM('Y','N') NOT NULL DEFAULT 'N' COMMENT '사용 여부',
|
|
102
102
|
regDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
103
103
|
updateDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
104
104
|
) COMMENT='예치금 쿠폰 정책';
|
|
@@ -108,8 +108,10 @@ CREATE TABLE gs_depositCoupon (
|
|
|
108
108
|
policySno INT NOT NULL COMMENT '쿠폰 정책 번호',
|
|
109
109
|
partnerSno INT NOT NULL COMMENT '고객사 번호',
|
|
110
110
|
couponCode VARCHAR(20) NOT NULL COMMENT '랜덤 숫자 쿠폰 코드',
|
|
111
|
-
usedFl ENUM('
|
|
111
|
+
usedFl ENUM('Y','N') NOT NULL DEFAULT 'N' COMMENT '사용 여부',
|
|
112
112
|
memberNo INT NULL COMMENT '사용 회원',
|
|
113
|
+
memberId VARCHAR(50) NULL COMMENT '회원 아이디',
|
|
114
|
+
memberName VARCHAR(50) NULL COMMENT '회원명',
|
|
113
115
|
regDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
114
116
|
updateDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '사용일',
|
|
115
117
|
UNIQUE KEY uk_coupon_member (sno, memberNo),
|
|
@@ -2,8 +2,8 @@ CREATE TABLE gs_depositManager(
|
|
|
2
2
|
sno INT PRIMARY KEY AUTO_INCREMENT,
|
|
3
3
|
partnerSno INT NOT NULL COMMENT '고객사 번호',
|
|
4
4
|
memberNo INT NOT NULL COMMENT '회원번호',
|
|
5
|
-
memberId VARCHAR(50)
|
|
6
|
-
memberName VARCHAR(50)
|
|
5
|
+
memberId VARCHAR(50) NULL COMMENT '회원 아이디',
|
|
6
|
+
memberName VARCHAR(50) NULL COMMENT '회원명',
|
|
7
7
|
depositType ENUM('ISSUE', 'USE', 'REFUND', 'ADJUST', 'EXPIRED') NOT NULL COMMENT '거래유형',
|
|
8
8
|
source ENUM('ADMIN', 'ORDER', 'SYSTEM') NOT NULL DEFAULT 'ADMIN' COMMENT '발생 주체',
|
|
9
9
|
managerSno INT NOT NULL COMMENT '관리자 번호',
|
|
@@ -36,15 +36,15 @@ CREATE TABLE gs_depositJobDetail(
|
|
|
36
36
|
jobSno INT NOT NULL COMMENT '작업 번호',
|
|
37
37
|
partnerSno INT NOT NULL COMMENT '고객사 번호',
|
|
38
38
|
memberNo INT NOT NULL COMMENT '회원번호',
|
|
39
|
-
memberId VARCHAR(50)
|
|
40
|
-
memberName VARCHAR(50)
|
|
39
|
+
memberId VARCHAR(50) NULL COMMENT '회원 아이디',
|
|
40
|
+
memberName VARCHAR(50) NULL COMMENT '회원명',
|
|
41
41
|
depositAmount INT NOT NULL COMMENT '증감 금액 +,-',
|
|
42
42
|
reason VARCHAR(200) NOT NULL COMMENT '사유',
|
|
43
43
|
result ENUM('SUCCESS', 'FAIL') NOT NULL DEFAULT 'SUCCESS' COMMENT '결과',
|
|
44
44
|
failReason TEXT NULL COMMENT '실패 사유',
|
|
45
45
|
expiredDt TIMESTAMP NULL COMMENT '만료일시',
|
|
46
46
|
couponSno INT NULL COMMENT '사용된 쿠폰 sno',
|
|
47
|
-
expireFl ENUM('
|
|
47
|
+
expireFl ENUM('Y','N') NOT NULL DEFAULT 'N' COMMENT '만료 처리 여부',
|
|
48
48
|
regDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
49
49
|
updateDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
50
50
|
INDEX idx_job (jobSno),
|
|
@@ -98,7 +98,7 @@ CREATE TABLE gs_depositCouponManager (
|
|
|
98
98
|
expireAfterDays INT NOT NULL COMMENT '등록 후 만료까지 일수 (n일)',
|
|
99
99
|
issueLimit INT NULL COMMENT '총 발급 수량 (NULL = 무제한)',
|
|
100
100
|
issueCount INT NOT NULL DEFAULT 0 COMMENT '발급된 수량',
|
|
101
|
-
|
|
101
|
+
usedFl ENUM('Y','N') NOT NULL DEFAULT 'N' COMMENT '사용 여부',
|
|
102
102
|
regDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
103
103
|
updateDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
104
104
|
) COMMENT='예치금 쿠폰 정책';
|
|
@@ -108,8 +108,10 @@ CREATE TABLE gs_depositCoupon (
|
|
|
108
108
|
policySno INT NOT NULL COMMENT '쿠폰 정책 번호',
|
|
109
109
|
partnerSno INT NOT NULL COMMENT '고객사 번호',
|
|
110
110
|
couponCode VARCHAR(20) NOT NULL COMMENT '랜덤 숫자 쿠폰 코드',
|
|
111
|
-
usedFl ENUM('
|
|
111
|
+
usedFl ENUM('Y','N') NOT NULL DEFAULT 'N' COMMENT '사용 여부',
|
|
112
112
|
memberNo INT NULL COMMENT '사용 회원',
|
|
113
|
+
memberId VARCHAR(50) NULL COMMENT '회원 아이디',
|
|
114
|
+
memberName VARCHAR(50) NULL COMMENT '회원명',
|
|
113
115
|
regDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
114
116
|
updateDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '사용일',
|
|
115
117
|
UNIQUE KEY uk_coupon_member (sno, memberNo),
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
CREATE TABLE gs_depositManager(
|
|
2
|
+
sno INT PRIMARY KEY AUTO_INCREMENT,
|
|
3
|
+
partnerSno INT NOT NULL COMMENT '고객사 번호',
|
|
4
|
+
memberNo INT NOT NULL COMMENT '회원번호',
|
|
5
|
+
memberId VARCHAR(50) NULL COMMENT '회원 아이디',
|
|
6
|
+
memberName VARCHAR(50) NULL COMMENT '회원명',
|
|
7
|
+
depositType ENUM('ISSUE', 'USE', 'REFUND', 'ADJUST', 'EXPIRED') NOT NULL COMMENT '거래유형',
|
|
8
|
+
source ENUM('ADMIN', 'ORDER', 'SYSTEM') NOT NULL DEFAULT 'ADMIN' COMMENT '발생 주체',
|
|
9
|
+
managerSno INT NOT NULL COMMENT '관리자 번호',
|
|
10
|
+
refType ENUM('JOB_DETAIL','ORDER','SYSTEM') NOT NULL COMMENT '참조 타입',
|
|
11
|
+
refSno INT NOT NULL COMMENT 'jobDetailSno 또는 주문 Sno',
|
|
12
|
+
depositAmount INT NOT NULL COMMENT '증감 금액 +,-',
|
|
13
|
+
balanceAfter INT NOT NULL COMMENT '거래 후 잔액',
|
|
14
|
+
reason VARCHAR(200) NOT NULL COMMENT '사유',
|
|
15
|
+
regDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
16
|
+
updateDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
17
|
+
INDEX idx_member_partner (partnerSno, memberNo, regDt)
|
|
18
|
+
)COMMENT='예치금 원장';
|
|
19
|
+
|
|
20
|
+
CREATE TABLE gs_depositJob(
|
|
21
|
+
sno INT PRIMARY KEY AUTO_INCREMENT,
|
|
22
|
+
jobName VARCHAR(100) NOT NULL COMMENT '작업명',
|
|
23
|
+
jobType ENUM('SINGLE','EXCEL') NOT NULL DEFAULT 'SINGLE' COMMENT '작업유형',
|
|
24
|
+
managerSno INT NOT NULL COMMENT '실행 관리자',
|
|
25
|
+
totalCount INT NOT NULL COMMENT '총 건수',
|
|
26
|
+
successCount INT NOT NULL COMMENT '성공 건수',
|
|
27
|
+
failCount INT NOT NULL COMMENT '실패 건수',
|
|
28
|
+
status ENUM('READY','PROCESSING','DONE') NOT NULL DEFAULT 'READY' COMMENT '작업 상태',
|
|
29
|
+
regDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
30
|
+
updateDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
31
|
+
)COMMENT='예치금 지급 작업';
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
CREATE TABLE gs_depositJobDetail(
|
|
35
|
+
sno INT PRIMARY KEY AUTO_INCREMENT,
|
|
36
|
+
jobSno INT NOT NULL COMMENT '작업 번호',
|
|
37
|
+
partnerSno INT NOT NULL COMMENT '고객사 번호',
|
|
38
|
+
memberNo INT NOT NULL COMMENT '회원번호',
|
|
39
|
+
memberId VARCHAR(50) NULL COMMENT '회원 아이디',
|
|
40
|
+
memberName VARCHAR(50) NULL COMMENT '회원명',
|
|
41
|
+
depositAmount INT NOT NULL COMMENT '증감 금액 +,-',
|
|
42
|
+
reason VARCHAR(200) NOT NULL COMMENT '사유',
|
|
43
|
+
result ENUM('SUCCESS', 'FAIL') NOT NULL DEFAULT 'SUCCESS' COMMENT '결과',
|
|
44
|
+
failReason TEXT NULL COMMENT '실패 사유',
|
|
45
|
+
expiredDt TIMESTAMP NULL COMMENT '만료일시',
|
|
46
|
+
couponSno INT NULL COMMENT '사용된 쿠폰 sno',
|
|
47
|
+
expireFl ENUM('Y','N') NOT NULL DEFAULT 'N' COMMENT '만료 처리 여부',
|
|
48
|
+
regDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
49
|
+
updateDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
50
|
+
INDEX idx_job (jobSno),
|
|
51
|
+
INDEX idx_member (memberNo),
|
|
52
|
+
INDEX idx_partner_member (partnerSno, memberNo),
|
|
53
|
+
INDEX idx_expire (expiredDt, expireFl)
|
|
54
|
+
)COMMENT='예치금 지급 단위';
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
CREATE TABLE gs_depositOrder (
|
|
58
|
+
sno INT PRIMARY KEY AUTO_INCREMENT,
|
|
59
|
+
orderNo VARCHAR(50) NOT NULL COMMENT '주문번호',
|
|
60
|
+
partnerSno INT NOT NULL COMMENT '고객사 번호',
|
|
61
|
+
memberNo INT NOT NULL COMMENT '회원번호',
|
|
62
|
+
memberId VARCHAR(50) NULL COMMENT '회원 아이디',
|
|
63
|
+
memberName VARCHAR(50) NULL COMMENT '회원명',
|
|
64
|
+
usedAmount INT NOT NULL COMMENT '사용 금액',
|
|
65
|
+
regDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
66
|
+
updateDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
67
|
+
)COMMENT='주문 예치금 사용 요약';
|
|
68
|
+
|
|
69
|
+
CREATE TABLE gs_depositOrderDetail (
|
|
70
|
+
sno BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
71
|
+
orderSno INT NOT NULL COMMENT '주문 번호',
|
|
72
|
+
partnerSno INT NOT NULL COMMENT '고객사 번호',
|
|
73
|
+
memberNo INT NOT NULL COMMENT '회원번호',
|
|
74
|
+
memberId VARCHAR(50) NULL COMMENT '회원 아이디',
|
|
75
|
+
memberName VARCHAR(50) NULL COMMENT '회원명',
|
|
76
|
+
orderGoodsNo VARCHAR(50) NOT NULL,
|
|
77
|
+
orderGoodsName VARCHAR(200) NOT NULL,
|
|
78
|
+
orderAmount INT NOT NULL COMMENT '안분 기준 주문 금액',
|
|
79
|
+
issueDetailSno INT NOT NULL COMMENT 'gs_depositJobDetail.sno',
|
|
80
|
+
usedDepositAmount INT NOT NULL COMMENT '해당 지급건에서 차감된 금액',
|
|
81
|
+
allocatedRatio DECIMAL(10,6) NOT NULL COMMENT '안분 비율',
|
|
82
|
+
allocatedAmount INT NOT NULL COMMENT '주문에 배정된 예치금',
|
|
83
|
+
expireDt TIMESTAMP NULL COMMENT '지급건 만료일 스냅샷',
|
|
84
|
+
refundYn ENUM('Y','N') NOT NULL DEFAULT 'N' COMMENT '환불 여부',
|
|
85
|
+
refundDt TIMESTAMP NULL COMMENT '환불일시',
|
|
86
|
+
regDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
87
|
+
updateDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
88
|
+
INDEX idx_member (memberNo),
|
|
89
|
+
INDEX idx_order (orderSno),
|
|
90
|
+
INDEX idx_issue (issueDetailSno)
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
CREATE TABLE gs_depositCouponManager (
|
|
94
|
+
sno INT PRIMARY KEY AUTO_INCREMENT,
|
|
95
|
+
partnerSno INT NOT NULL COMMENT '고객사 번호',
|
|
96
|
+
title VARCHAR(100) NOT NULL COMMENT '쿠폰명',
|
|
97
|
+
depositAmount INT NOT NULL COMMENT '지급 예치금',
|
|
98
|
+
registerStartDt TIMESTAMP NOT NULL COMMENT '쿠폰 등록 시작일',
|
|
99
|
+
registerEndDt TIMESTAMP NOT NULL COMMENT '쿠폰 등록 종료일',
|
|
100
|
+
expireAfterDays INT NOT NULL COMMENT '등록 후 만료까지 일수 (n일)',
|
|
101
|
+
issueLimit INT NULL COMMENT '총 발급 수량 (NULL = 무제한)',
|
|
102
|
+
issueCount INT NOT NULL DEFAULT 0 COMMENT '발급된 수량',
|
|
103
|
+
usedFl ENUM('Y','N') NOT NULL DEFAULT 'N' COMMENT '사용 여부',
|
|
104
|
+
regDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
105
|
+
updateDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
106
|
+
) COMMENT='예치금 쿠폰 정책';
|
|
107
|
+
|
|
108
|
+
CREATE TABLE gs_depositCoupon (
|
|
109
|
+
sno INT PRIMARY KEY AUTO_INCREMENT,
|
|
110
|
+
policySno INT NOT NULL COMMENT '쿠폰 정책 번호',
|
|
111
|
+
partnerSno INT NOT NULL COMMENT '고객사 번호',
|
|
112
|
+
couponCode VARCHAR(20) NOT NULL COMMENT '랜덤 숫자 쿠폰 코드',
|
|
113
|
+
usedFl ENUM('Y','N') NOT NULL DEFAULT 'N' COMMENT '사용 여부',
|
|
114
|
+
memberNo INT NULL COMMENT '사용 회원',
|
|
115
|
+
memberId VARCHAR(50) NULL COMMENT '회원 아이디',
|
|
116
|
+
memberName VARCHAR(50) NULL COMMENT '회원명',
|
|
117
|
+
regDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
118
|
+
updateDt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '사용일',
|
|
119
|
+
UNIQUE KEY uk_coupon_member (sno, memberNo),
|
|
120
|
+
INDEX idx_policy (policySno)
|
|
121
|
+
) COMMENT='예치금 랜덤 쿠폰';
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { ExceptionFilter, ArgumentsHost } from '@nestjs/common';
|
|
2
2
|
import { JwtService } from '@nestjs/jwt';
|
|
3
|
+
import { Response } from 'express';
|
|
3
4
|
import { GSExceptionService } from 'src/api/common/exception/exception.service';
|
|
4
5
|
export declare class GlobalExceptionFilter implements ExceptionFilter {
|
|
5
6
|
private readonly gsExceptionService;
|
|
6
7
|
private readonly jwtService;
|
|
7
8
|
constructor(gsExceptionService: GSExceptionService, jwtService: JwtService);
|
|
8
9
|
private readonly logger;
|
|
9
|
-
catch(exception: any, host: ArgumentsHost): Promise<
|
|
10
|
+
catch(exception: any, host: ArgumentsHost): Promise<Response<any, Record<string, any>>>;
|
|
10
11
|
}
|
|
@@ -23,88 +23,80 @@ let GlobalExceptionFilter = GlobalExceptionFilter_1 = class GlobalExceptionFilte
|
|
|
23
23
|
this.logger = new common_1.Logger(GlobalExceptionFilter_1.name);
|
|
24
24
|
}
|
|
25
25
|
async catch(exception, host) {
|
|
26
|
-
var _a, _b, _c;
|
|
27
|
-
this.logger.error((exception === null || exception === void 0 ? void 0 : exception.message) || 'Unhandled exception', exception === null || exception === void 0 ? void 0 : exception.stack);
|
|
28
|
-
if (exception.constructor === common_1.NotFoundException)
|
|
29
|
-
return;
|
|
26
|
+
var _a, _b, _c, _d;
|
|
30
27
|
const ctx = host.switchToHttp();
|
|
31
|
-
const stack = exception.stack;
|
|
32
28
|
const response = ctx.getResponse();
|
|
33
29
|
const request = ctx.getRequest();
|
|
34
|
-
const
|
|
30
|
+
const stack = ((_a = exception === null || exception === void 0 ? void 0 : exception.stack) === null || _a === void 0 ? void 0 : _a.toString()) || '';
|
|
31
|
+
this.logger.error((exception === null || exception === void 0 ? void 0 : exception.message) || 'Unhandled exception', stack);
|
|
32
|
+
if (exception instanceof common_1.NotFoundException)
|
|
33
|
+
return;
|
|
34
|
+
const ip = ((_b = request.headers['x-forwarded-for']) === null || _b === void 0 ? void 0 : _b.toString().split(',')[0]) ||
|
|
35
35
|
request.socket.remoteAddress;
|
|
36
|
-
const { authorization } = request.headers;
|
|
37
36
|
let partnerSno = 0;
|
|
38
|
-
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
try {
|
|
38
|
+
const { authorization } = request.headers;
|
|
39
|
+
if (authorization) {
|
|
40
|
+
const accessToken = authorization.split(' ')[1];
|
|
41
|
+
const decodeToken = this.jwtService.decode(accessToken);
|
|
42
|
+
partnerSno = (_c = decodeToken === null || decodeToken === void 0 ? void 0 : decodeToken.partnerSno) !== null && _c !== void 0 ? _c : 0;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
this.logger.warn('Failed to decode token in filter');
|
|
45
47
|
}
|
|
46
48
|
let status = common_1.HttpStatus.INTERNAL_SERVER_ERROR;
|
|
47
|
-
let message = exception.message
|
|
48
|
-
let code = '
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
case typeorm_1.CannotCreateEntityIdMapError:
|
|
65
|
-
status = common_1.HttpStatus.UNPROCESSABLE_ENTITY;
|
|
66
|
-
message = exception.message;
|
|
67
|
-
code = exception.code;
|
|
68
|
-
break;
|
|
69
|
-
case common_1.UnauthorizedException:
|
|
70
|
-
status = common_1.HttpStatus.UNAUTHORIZED;
|
|
71
|
-
message = 'Unauthorized';
|
|
72
|
-
break;
|
|
73
|
-
case TypeError:
|
|
74
|
-
status = common_1.HttpStatus.INTERNAL_SERVER_ERROR;
|
|
75
|
-
message = exception.message;
|
|
76
|
-
code = exception.code;
|
|
77
|
-
break;
|
|
78
|
-
default:
|
|
79
|
-
status = common_1.HttpStatus.INTERNAL_SERVER_ERROR;
|
|
80
|
-
message = exception;
|
|
49
|
+
let message = (exception === null || exception === void 0 ? void 0 : exception.message) || 'Internal server error';
|
|
50
|
+
let code = 'UNKNOWN_ERROR';
|
|
51
|
+
if (exception instanceof common_1.HttpException) {
|
|
52
|
+
status = exception.getStatus();
|
|
53
|
+
const res = exception.getResponse();
|
|
54
|
+
message =
|
|
55
|
+
typeof res === 'object'
|
|
56
|
+
? res.message || JSON.stringify(res)
|
|
57
|
+
: res;
|
|
58
|
+
code = 'HttpException';
|
|
59
|
+
}
|
|
60
|
+
else if (exception instanceof typeorm_1.QueryFailedError ||
|
|
61
|
+
exception instanceof typeorm_1.EntityNotFoundError ||
|
|
62
|
+
exception instanceof typeorm_1.CannotCreateEntityIdMapError) {
|
|
63
|
+
status = common_1.HttpStatus.UNPROCESSABLE_ENTITY;
|
|
64
|
+
message = exception.message;
|
|
65
|
+
code = exception.code || 'DB_ERROR';
|
|
81
66
|
}
|
|
82
|
-
if (
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
67
|
+
else if (exception instanceof common_1.UnauthorizedException) {
|
|
68
|
+
status = common_1.HttpStatus.UNAUTHORIZED;
|
|
69
|
+
message = 'Unauthorized';
|
|
70
|
+
code = 'UNAUTHORIZED';
|
|
71
|
+
}
|
|
72
|
+
else if (exception instanceof TypeError) {
|
|
73
|
+
status = common_1.HttpStatus.INTERNAL_SERVER_ERROR;
|
|
74
|
+
message = exception.message;
|
|
75
|
+
code = 'TYPE_ERROR';
|
|
76
|
+
}
|
|
77
|
+
if (!status || typeof status !== 'number') {
|
|
78
|
+
status = 500;
|
|
79
|
+
}
|
|
80
|
+
const displayMessage = typeof message === 'object' ? JSON.stringify(message) : message;
|
|
81
|
+
try {
|
|
82
|
+
await this.gsExceptionService.create({
|
|
83
|
+
partnerSno,
|
|
84
|
+
url: request.url,
|
|
85
|
+
request: JSON.stringify(request.body),
|
|
86
|
+
message: displayMessage,
|
|
87
|
+
trace: stack,
|
|
88
|
+
errorCode: status.toString(),
|
|
89
|
+
ip,
|
|
92
90
|
});
|
|
93
91
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
message: message,
|
|
99
|
-
trace: stack.toString(),
|
|
100
|
-
errorCode: (status === null || status === void 0 ? void 0 : status.toString()) || '500',
|
|
101
|
-
ip,
|
|
102
|
-
});
|
|
103
|
-
await response.status(status).json({
|
|
92
|
+
catch (dbError) {
|
|
93
|
+
this.logger.error('Failed to log exception to DB', dbError.stack);
|
|
94
|
+
}
|
|
95
|
+
return response.status(status).json({
|
|
104
96
|
statusCode: status,
|
|
105
|
-
code: (
|
|
106
|
-
message:
|
|
107
|
-
trace: stack
|
|
97
|
+
code: ((_d = exception.response) === null || _d === void 0 ? void 0 : _d.code) || code,
|
|
98
|
+
message: displayMessage,
|
|
99
|
+
trace: process.env.NODE_ENV === 'prod' ? undefined : stack,
|
|
108
100
|
timestamp: (0, date_fns_1.format)(new Date(), 'yyyy/M/d, h:mm:ss a'),
|
|
109
101
|
path: request.url,
|
|
110
102
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalExceptionFilter.js","sourceRoot":"","sources":["../../../src/common/filter/GlobalExceptionFilter.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CASwB;AACxB,qCAAyC;AAEzC,oFAAgF;AAChF,qCAIiB;AAIjB,uCAAkC;AAG3B,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IAC9B,YACqB,kBAAsC,EACtC,UAAsB;QADtB,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,eAAU,GAAV,UAAU,CAAY;QAE1B,WAAM,GAAG,IAAI,eAAM,CAAC,uBAAqB,CAAC,IAAI,CAAC,CAAC;IAD9D,CAAC;
|
|
1
|
+
{"version":3,"file":"GlobalExceptionFilter.js","sourceRoot":"","sources":["../../../src/common/filter/GlobalExceptionFilter.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CASwB;AACxB,qCAAyC;AAEzC,oFAAgF;AAChF,qCAIiB;AAIjB,uCAAkC;AAG3B,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IAC9B,YACqB,kBAAsC,EACtC,UAAsB;QADtB,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,eAAU,GAAV,UAAU,CAAY;QAE1B,WAAM,GAAG,IAAI,eAAM,CAAC,uBAAqB,CAAC,IAAI,CAAC,CAAC;IAD9D,CAAC;IAGJ,KAAK,CAAC,KAAK,CAAC,SAAc,EAAE,IAAmB;;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAY,CAAC;QAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAW,CAAC;QAG1C,MAAM,KAAK,GAAG,CAAA,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,0CAAE,QAAQ,EAAE,KAAI,EAAE,CAAC;QAEjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,KAAI,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAEtE,IAAI,SAAS,YAAY,0BAAiB;YAAE,OAAO;QAGnD,MAAM,EAAE,GACJ,CAAA,MAAA,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,0CAAE,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;QACjC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC;YACD,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;YAC1C,IAAI,aAAa,EAAE,CAAC;gBAChB,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CACtC,WAAW,CACS,CAAC;gBACzB,UAAU,GAAG,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,UAAU,mCAAI,CAAC,CAAC;YAC9C,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACzD,CAAC;QAGD,IAAI,MAAM,GAAG,mBAAU,CAAC,qBAAqB,CAAC;QAC9C,IAAI,OAAO,GAAG,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,KAAI,uBAAuB,CAAC;QAC5D,IAAI,IAAI,GAAG,eAAe,CAAC;QAG3B,IAAI,SAAS,YAAY,sBAAa,EAAE,CAAC;YACrC,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;YACpC,OAAO;gBACH,OAAO,GAAG,KAAK,QAAQ;oBACnB,CAAC,CAAE,GAAW,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;oBAC7C,CAAC,CAAC,GAAG,CAAC;YACd,IAAI,GAAG,eAAe,CAAC;QAC3B,CAAC;aAEI,IACD,SAAS,YAAY,0BAAgB;YACrC,SAAS,YAAY,6BAAmB;YACxC,SAAS,YAAY,sCAA4B,EACnD,CAAC;YACC,MAAM,GAAG,mBAAU,CAAC,oBAAoB,CAAC;YACzC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;YAC5B,IAAI,GAAI,SAAiB,CAAC,IAAI,IAAI,UAAU,CAAC;QACjD,CAAC;aAAM,IAAI,SAAS,YAAY,8BAAqB,EAAE,CAAC;YACpD,MAAM,GAAG,mBAAU,CAAC,YAAY,CAAC;YACjC,OAAO,GAAG,cAAc,CAAC;YACzB,IAAI,GAAG,cAAc,CAAC;QAC1B,CAAC;aAAM,IAAI,SAAS,YAAY,SAAS,EAAE,CAAC;YACxC,MAAM,GAAG,mBAAU,CAAC,qBAAqB,CAAC;YAC1C,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;YAC5B,IAAI,GAAG,YAAY,CAAC;QACxB,CAAC;QAGD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,CAAC;QACjB,CAAC;QAGD,MAAM,cAAc,GAChB,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAGpE,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;gBACjC,UAAU;gBACV,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;gBACrC,OAAO,EAAE,cAAc;gBACvB,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE;gBAC5B,EAAE;aACmB,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtE,CAAC;QAGD,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;YAChC,UAAU,EAAE,MAAM;YAClB,IAAI,EAAE,CAAA,MAAC,SAAiB,CAAC,QAAQ,0CAAE,IAAI,KAAI,IAAI;YAC/C,OAAO,EAAE,cAAc;YACvB,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;YAC1D,SAAS,EAAE,IAAA,iBAAM,EAAC,IAAI,IAAI,EAAE,EAAE,qBAAqB,CAAC;YACpD,IAAI,EAAE,OAAO,CAAC,GAAG;SACpB,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AAzGY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,cAAK,GAAE;qCAGqC,sCAAkB;QAC1B,gBAAU;GAHlC,qBAAqB,CAyGjC"}
|