From d9b6798e774af9da116c2a276ec5c99441bd9fe8 Mon Sep 17 00:00:00 2001 From: Pavel Korchak Date: Sun, 11 Jun 2023 23:58:41 +0400 Subject: [PATCH 1/2] chore: update rxjs --- package-lock.json | 261 ++++++++++++++++++++++++++-------------------- package.json | 2 +- 2 files changed, 148 insertions(+), 115 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0b1f668..97744da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "ng-mocks": "^14.10.0", "ng-zorro-antd": "^16.0.0", "ngx-scrollbar": "12.0.0", - "rxjs": "^6.5.5", + "rxjs": "^7.8.1", "tslib": "^2.0.0", "zone.js": "~0.13.0" }, @@ -93,6 +93,24 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@angular-devkit/architect/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/architect/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/@angular-devkit/build-angular": { "version": "16.0.4", "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.0.4.tgz", @@ -432,15 +450,6 @@ "node": ">=10" } }, - "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@angular-devkit/build-angular/node_modules/semver": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz", @@ -598,15 +607,6 @@ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, - "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@angular-devkit/core": { "version": "14.2.11", "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.11.tgz", @@ -655,6 +655,24 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, + "node_modules/@angular-devkit/core/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/@angular-devkit/schematics": { "version": "14.2.11", "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.11.tgz", @@ -673,6 +691,24 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@angular-devkit/schematics/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/@angular-eslint/builder": { "version": "16.0.3", "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-16.0.3.tgz", @@ -1076,15 +1112,6 @@ "node": ">=12" } }, - "node_modules/@angular/cli/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/@angular/cli/node_modules/semver": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz", @@ -3317,6 +3344,24 @@ "@angular/core": ">=12" } }, + "node_modules/@cypress/schematic/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@cypress/schematic/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/@cypress/xvfb": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", @@ -10606,15 +10651,6 @@ "node": ">=8" } }, - "node_modules/inquirer/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/inquirer/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -12085,15 +12121,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/listr2/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/listr2/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -15918,21 +15945,13 @@ } }, "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "tslib": "^2.1.0" } }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -18568,6 +18587,23 @@ "requires": { "@angular-devkit/core": "14.2.11", "rxjs": "6.6.7" + }, + "dependencies": { + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "@angular-devkit/build-angular": { @@ -18804,15 +18840,6 @@ "brace-expansion": "^2.0.1" } }, - "rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, "semver": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz", @@ -18898,15 +18925,6 @@ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true - }, - "rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } } } }, @@ -18940,6 +18958,21 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true } } }, @@ -18954,6 +18987,23 @@ "magic-string": "0.26.2", "ora": "5.4.1", "rxjs": "6.6.7" + }, + "dependencies": { + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "@angular-eslint/builder": { @@ -19245,15 +19295,6 @@ "@jridgewell/sourcemap-codec": "^1.4.13" } }, - "rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, "semver": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz", @@ -20812,6 +20853,23 @@ "@schematics/angular": "^14.2.1", "jsonc-parser": "^3.0.0", "rxjs": "~6.6.0" + }, + "dependencies": { + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "@cypress/xvfb": { @@ -26196,15 +26254,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -27277,15 +27326,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -30181,18 +30221,11 @@ } }, "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "tslib": "^2.1.0" } }, "safe-buffer": { diff --git a/package.json b/package.json index 13922f3..f50e366 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "ng-mocks": "^14.10.0", "ng-zorro-antd": "^16.0.0", "ngx-scrollbar": "12.0.0", - "rxjs": "^6.5.5", + "rxjs": "^7.8.1", "tslib": "^2.0.0", "zone.js": "~0.13.0" }, From f1decaba853c7028d62a703d392f6c785df9542e Mon Sep 17 00:00:00 2001 From: Pavel Korchak Date: Sun, 3 Sep 2023 15:13:46 +0400 Subject: [PATCH 2/2] feat: Call /users/register endpoint after SocialAuthService login --- package.json | 2 +- proxy.config.json | 10 +++++ src/app/model/dto/rq/register-user-rq-dto.ts | 13 +++++++ src/app/model/dto/rs/register-user-rs-dto.ts | 4 ++ src/app/services/api/http.service.ts | 39 ++++++++++++++++++++ src/app/services/api/users-http.service.ts | 13 +++++++ src/app/widgets/auth/auth.component.ts | 23 ++++++++++-- 7 files changed, 100 insertions(+), 4 deletions(-) create mode 100644 proxy.config.json create mode 100644 src/app/model/dto/rq/register-user-rq-dto.ts create mode 100644 src/app/model/dto/rs/register-user-rs-dto.ts create mode 100644 src/app/services/api/http.service.ts create mode 100644 src/app/services/api/users-http.service.ts diff --git a/package.json b/package.json index f50e366..29ac1b9 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "scripts": { "ng": "ng", - "start": "set NODE_OPTIONS=--openssl-legacy-provider && ng serve", + "start": "set NODE_OPTIONS=--openssl-legacy-provider && ng serve --proxy-config=proxy.config.json", "build": "ng build --configuration production", "lint": "ng lint", "test": "ng test", diff --git a/proxy.config.json b/proxy.config.json new file mode 100644 index 0000000..407a0b3 --- /dev/null +++ b/proxy.config.json @@ -0,0 +1,10 @@ +{ + "/api/*": { + "target": " https://03z6w06wwd.execute-api.us-east-1.amazonaws.com/Stage", + "secure": false, + "changeOrigin": true, + "pathRewrite": { + "^/api": "" + } + } +} diff --git a/src/app/model/dto/rq/register-user-rq-dto.ts b/src/app/model/dto/rq/register-user-rq-dto.ts new file mode 100644 index 0000000..bd91897 --- /dev/null +++ b/src/app/model/dto/rq/register-user-rq-dto.ts @@ -0,0 +1,13 @@ +export interface RegisterUserRqDto { + firstName: string; + lastName: string; + email: string; + emailVerified?: boolean; + photoUrl?: string; + provider: IdentityProvider; +} + +export enum IdentityProvider { + INTERNAL = 'INTERNAL', // TODO Add registration by email/password inside of the app + GOOGLE = 'GOOGLE' +} diff --git a/src/app/model/dto/rs/register-user-rs-dto.ts b/src/app/model/dto/rs/register-user-rs-dto.ts new file mode 100644 index 0000000..3af4317 --- /dev/null +++ b/src/app/model/dto/rs/register-user-rs-dto.ts @@ -0,0 +1,4 @@ +export interface RegisterUserRsDto { + id?: string; + message: string; +} diff --git a/src/app/services/api/http.service.ts b/src/app/services/api/http.service.ts new file mode 100644 index 0000000..ea3d709 --- /dev/null +++ b/src/app/services/api/http.service.ts @@ -0,0 +1,39 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { Router } from '@angular/router'; +import { catchError } from 'rxjs/operators'; + +@Injectable({providedIn: 'root'}) +export class HttpService { + + private headers: HttpHeaders = new HttpHeaders({'Content-Type': 'application/json'}); + + constructor(private http: HttpClient, + private router: Router) { + } + + public post(url: string, body: unknown, params?: HttpParams): Observable { + return this.handleResponse(this.http.post(url, body, {headers: this.headers, ...params})); + } + + public get(url: string, params?: HttpParams): Observable { + return this.handleResponse(this.http.get(url, {headers: this.headers, ...params})); + } + + public patch(url: string, body: unknown, params?: HttpParams): Observable { + return this.handleResponse(this.http.patch(url, body, {headers: this.headers, ...params})); + } + + private handleResponse(response: Observable): Observable { + return response.pipe(catchError(err => this.catchError(err))); + } + + private catchError(error: HttpErrorResponse): Observable { + if (error.status === 401) { + this.router.navigateByUrl('/login'); + } + // TODO Show notification with error text for the user + throw new Error(`${error.statusText}\n${error.message}`); + } +} diff --git a/src/app/services/api/users-http.service.ts b/src/app/services/api/users-http.service.ts new file mode 100644 index 0000000..e02447e --- /dev/null +++ b/src/app/services/api/users-http.service.ts @@ -0,0 +1,13 @@ +import { Injectable } from '@angular/core'; +import { RegisterUserRqDto } from '@model/dto/rq/register-user-rq-dto'; +import { RegisterUserRsDto } from '@model/dto/rs/register-user-rs-dto'; +import { Observable } from 'rxjs'; +import { HttpService } from './http.service'; + +@Injectable({ providedIn: 'root' }) +export class UsersHttpService extends HttpService { + + public register(user: RegisterUserRqDto): Observable { + return this.post('/api/users/register', user) as Observable; + } +} diff --git a/src/app/widgets/auth/auth.component.ts b/src/app/widgets/auth/auth.component.ts index 903c5fd..7431dca 100644 --- a/src/app/widgets/auth/auth.component.ts +++ b/src/app/widgets/auth/auth.component.ts @@ -1,5 +1,8 @@ -import { Component, EventEmitter, OnInit, Output } from '@angular/core'; import { SocialAuthService, SocialUser } from '@abacritt/angularx-social-login'; +import { Component, EventEmitter, OnInit, Output } from '@angular/core'; +import { IdentityProvider, RegisterUserRqDto } from '@model/dto/rq/register-user-rq-dto'; +import { RegisterUserRsDto } from '@model/dto/rs/register-user-rs-dto'; +import { UsersHttpService } from '@services/api/users-http.service'; @Component({ selector: 'app-auth', @@ -10,7 +13,10 @@ export class AuthComponent implements OnInit { @Output() signedIn = new EventEmitter(); - constructor(private socialAuthService: SocialAuthService) { } + constructor( + private socialAuthService: SocialAuthService, + private usersHttpService: UsersHttpService) { + } ngOnInit() { // TODO Add login by email @@ -21,7 +27,18 @@ export class AuthComponent implements OnInit { this.socialAuthService.authState.subscribe((user: SocialUser) => { if (user && user.idToken != localStorage.getItem('token')) { localStorage.setItem('token', user.idToken); - this.signedIn.emit(); + + this.usersHttpService.register({ + firstName: user.firstName, + lastName: user.lastName, + email: user.email, + photoUrl: user.photoUrl, + provider: user.provider as IdentityProvider + } as RegisterUserRqDto) + .subscribe((rs: RegisterUserRsDto) => { + localStorage.setItem('userId', rs.id || ''); + this.signedIn.emit(); + }); } }); }