@albi_scando/as-user-lib 0.0.1-rc1 → 0.0.1-rc10

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.
@@ -0,0 +1,9 @@
1
+ export const DEFAULT_USERNAME = 'guest';
2
+ export const DEFAULT_LEVEL = "guest" /* USER_LEVELS.GUEST */;
3
+ export const defaultUser = {
4
+ username: DEFAULT_USERNAME,
5
+ level: DEFAULT_LEVEL,
6
+ language: undefined,
7
+ environment: undefined,
8
+ };
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC11c2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXMtdXNlci1saWIvc3JjL2xpYi9kZWZhdWx0L2RlZmF1bHQtdXNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBVyxPQUFPLENBQUM7QUFDaEQsTUFBTSxDQUFDLE1BQU0sYUFBYSxrQ0FBaUMsQ0FBQztBQUU1RCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQVM7SUFDL0IsUUFBUSxFQUFFLGdCQUFnQjtJQUMxQixLQUFLLEVBQUUsYUFBNEI7SUFDbkMsUUFBUSxFQUFFLFNBQVM7SUFDbkIsV0FBVyxFQUFFLFNBQVM7Q0FDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGVudW1zXHJcbmltcG9ydCB7IFVTRVJfTEVWRUxTIH0gZnJvbSAnLi4vZW51bXMvdXNlci1sZXZlbHMuZW51bSc7XHJcblxyXG4vLyBpbnRlcmZhY2VcclxuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvdXNlci5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVVNFUk5BTUU6IHN0cmluZyA9ICdndWVzdCc7XHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0xFVkVMOiBVU0VSX0xFVkVMUyA9IFVTRVJfTEVWRUxTLkdVRVNUO1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRVc2VyOiBVc2VyID0ge1xyXG4gIHVzZXJuYW1lOiBERUZBVUxUX1VTRVJOQU1FLFxyXG4gIGxldmVsOiBERUZBVUxUX0xFVkVMIGFzIFVTRVJfTEVWRUxTLFxyXG4gIGxhbmd1YWdlOiB1bmRlZmluZWQsXHJcbiAgZW52aXJvbm1lbnQ6IHVuZGVmaW5lZCxcclxufTtcclxuIl19
@@ -0,0 +1,8 @@
1
+ import { stringEmpty } from '@albi_scando/as-constants-lib';
2
+ export const defaultUserLibSetup = {
3
+ api: {
4
+ patchUserDataAPIUrl: stringEmpty,
5
+ getUserDataAPIUrl: stringEmpty,
6
+ },
7
+ };
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzLXVzZXItbGliL3NyYy9saWIvZGVmYXVsdC9kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUs1RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBa0I7SUFDaEQsR0FBRyxFQUFFO1FBQ0gsbUJBQW1CLEVBQUUsV0FBVztRQUNoQyxpQkFBaUIsRUFBRSxXQUFXO0tBQy9CO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0cmluZ0VtcHR5IH0gZnJvbSAnQGFsYmlfc2NhbmRvL2FzLWNvbnN0YW50cy1saWInO1xyXG5cclxuLy8gaW50ZXJmYWNlc1xyXG5pbXBvcnQgeyBJVXNlckxpYlNldHVwIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZXR1cC5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRVc2VyTGliU2V0dXA6IElVc2VyTGliU2V0dXAgPSB7XHJcbiAgYXBpOiB7XHJcbiAgICBwYXRjaFVzZXJEYXRhQVBJVXJsOiBzdHJpbmdFbXB0eSxcclxuICAgIGdldFVzZXJEYXRhQVBJVXJsOiBzdHJpbmdFbXB0eSxcclxuICB9LFxyXG59O1xyXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1sZXZlbHMuZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzLXVzZXItbGliL3NyYy9saWIvZW51bXMvdXNlci1sZXZlbHMuZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGVudW0gVVNFUl9MRVZFTFMge1xyXG4gIEdVRVNUID0gJ2d1ZXN0JyxcclxufVxyXG4iXX0=
@@ -0,0 +1,3 @@
1
+ // enums
2
+ export {};
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXMtdXNlci1saWIvc3JjL2xpYi9pbnRlcmZhY2VzL3NldHVwLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZW51bXNcclxuXHJcbi8qKlxyXG4gKiBDb25maWd1cmF0aW9uIGludGVyZmFjZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJVXNlckxpYlNldHVwIHtcclxuICBhcGk6IEFQSTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBUEkge1xyXG4gIHBhdGNoVXNlckRhdGFBUElVcmw6IHN0cmluZztcclxuICBnZXRVc2VyRGF0YUFQSVVybDogc3RyaW5nO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcy11c2VyLWxpYi9zcmMvbGliL2ludGVyZmFjZXMvdXNlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGVudW1zXHJcbmltcG9ydCB7IExBTkdVQUdFUyB9IGZyb20gJ0BhbGJpX3NjYW5kby9hcy1jb25zdGFudHMtbGliJztcclxuaW1wb3J0IHsgVVNFUl9MRVZFTFMgfSBmcm9tICcuLi9lbnVtcy91c2VyLWxldmVscy5lbnVtJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXNlciB7XHJcbiAgdXNlcm5hbWU6IHN0cmluZztcclxuICBsZXZlbDogVVNFUl9MRVZFTFM7XHJcbiAgbGFuZ3VhZ2U6IExBTkdVQUdFUyB8IHVuZGVmaW5lZDtcclxuICBlbnZpcm9ubWVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG59XHJcbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzLXVzZXItbGliL3NyYy9saWIvc2VydmljZXMvdXNlci91c2VyLnNlcnZpY2UuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVXNlclNlcnZpY2Uge1xyXG4gIC8qKlxyXG4gICAqIFRva2VuIHNpZ25hbFxyXG4gICAqL1xyXG4gIHRva2VuOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xyXG59XHJcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzLXVzZXItbGliL3NyYy9saWIvc2VydmljZXMvdXNlci91c2VyLnNlcnZpY2UuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG4vLyBJbnRlcmZhY2VzXHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3VzZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgSVVzZXJMaWJTZXR1cCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2V0dXAuaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXJTZXJ2aWNlIHtcclxuICAvKipcclxuICAgKiBVc2VyIG9iamVjdFxyXG4gICAqL1xyXG4gIHVzZXI6IFVzZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBzZXJ2aWNlIGNvbmZpZ3VyYXRpb25cclxuICAgKiBAcGFyYW0ge1BhcnRpYWw8SVVzZXJMaWJTZXR1cD59IHNldHVwIGNvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8dm9pZD59XHJcbiAgICovXHJcbiAgc2V0dXAkKHNldHVwOiBQYXJ0aWFsPElVc2VyTGliU2V0dXA+KTogT2JzZXJ2YWJsZTx2b2lkPjtcclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHVzZXIgb2JqZWN0IHdpdGggcHJvdmlkZWQgZGF0YVxyXG4gICAqIEBwYXJhbSB7UGFydGlhbDxVc2VyPn0gdXNlciBwYXJ0aWFsIHVzZXIgaW5mbyB0byBtb2RpZnlcclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTx2b2lkPn1cclxuICAgKi9cclxuICBwYXRjaFVzZXJEYXRhJCh1c2VyOiBQYXJ0aWFsPFVzZXI+KTogT2JzZXJ2YWJsZTx2b2lkPjtcclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHVzZXIgZGF0YVxyXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFVzZXI+fSB1c2VyIGRhdGFcclxuICAgKi9cclxuICBnZXRVc2VyRGF0YSQoKTogT2JzZXJ2YWJsZTxVc2VyPjtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdXNlciBkYXRhIHJlc2lkZSBvbiBhIGRiLCBmZXRjaCBpdCBhbmQgdXNlIGl0IHRvIHN5bmNocm9uaXplIHNlcnZpY2UgdXNlciBvYmplY3QuXHJcbiAgICogSWYgbm8gZGIgaXMgYXZhaWxhYmxlLCBzZXQgY3VycmVudCB1c2VyIGVxdWFsIHRvIGl0c2VsZi5cclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTx2b2lkPn1cclxuICAgKi9cclxuICBzeW5jVXNlckRhdGEkKCk6IE9ic2VydmFibGU8dm9pZD47XHJcbn1cclxuIl19
@@ -1,22 +1,99 @@
1
- import { Injectable, signal } from '@angular/core';
1
+ import { Injectable, inject } from '@angular/core';
2
+ import { of, switchMap } from 'rxjs';
3
+ import { HttpService } from '@albi_scando/as-http-lib';
4
+ // Assets
5
+ import { defaultUserLibSetup } from '../../default/default';
6
+ import { defaultUser } from '../../default/default-user';
7
+ // Constants
8
+ import { observableEmpty$, stringEmpty } from '@albi_scando/as-constants-lib';
9
+ import { LoggerService } from '@albi_scando/as-log-lib';
2
10
  import * as i0 from "@angular/core";
3
11
  /**
4
12
  *
5
13
  */
6
14
  export class UserService {
15
+ /**
16
+ * Constructor
17
+ * @constructor
18
+ * @ignore
19
+ */
7
20
  constructor() {
8
21
  /**
9
- * {@link IUserService.token}
22
+ * {@link IUserService.user}
10
23
  */
11
- this.token = signal('');
24
+ this.user = defaultUser;
25
+ /**
26
+ * {@link HttpService}
27
+ */
28
+ this._httpService = inject(HttpService);
29
+ /**
30
+ * {@link LoggerService}
31
+ */
32
+ this._loggerService = inject(LoggerService);
33
+ /**
34
+ * PATCH user data api url
35
+ */
36
+ this._patchUserDataAPIUrl = stringEmpty;
37
+ /**
38
+ * GET user data api url
39
+ */
40
+ this._getUserDataAPIUrl = stringEmpty;
41
+ this.setup$(defaultUserLibSetup).subscribe();
42
+ }
43
+ /**
44
+ * {@link IUserService.setup$}
45
+ */
46
+ setup$(setup) {
47
+ this._patchUserDataAPIUrl = setup.api?.patchUserDataAPIUrl || stringEmpty;
48
+ this._getUserDataAPIUrl = setup.api?.getUserDataAPIUrl || stringEmpty;
49
+ return observableEmpty$;
50
+ }
51
+ /**
52
+ * {@link IUserService.patchUserData$}
53
+ */
54
+ patchUserData$(user) {
55
+ const httpRequest = {
56
+ url: this._patchUserDataAPIUrl,
57
+ body: user,
58
+ };
59
+ const updateUserData$ = this._httpService.patch(httpRequest);
60
+ return observableEmpty$.pipe(switchMap(() => {
61
+ if (httpRequest.url) {
62
+ return updateUserData$;
63
+ }
64
+ else {
65
+ this.user = { ...this.user, ...user };
66
+ return observableEmpty$;
67
+ }
68
+ }), switchMap(() => this.syncUserData$()));
69
+ }
70
+ /**
71
+ * {@link IUserService.syncUserData$}
72
+ */
73
+ syncUserData$() {
74
+ return this.getUserData$().pipe(switchMap((user) => {
75
+ this.user = user;
76
+ this._loggerService.info('User info updated', this.user);
77
+ return observableEmpty$;
78
+ }));
79
+ }
80
+ /**
81
+ * {@link IUserService.getUserData$}
82
+ */
83
+ getUserData$() {
84
+ const httpRequest = {
85
+ url: this._getUserDataAPIUrl,
86
+ };
87
+ const getUserData$ = this._httpService.get(httpRequest);
88
+ return httpRequest.url ? getUserData$ : of(this.user);
12
89
  }
13
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: UserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: UserService, providedIn: 'root' }); }
90
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
91
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserService, providedIn: 'root' }); }
15
92
  }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: UserService, decorators: [{
93
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserService, decorators: [{
17
94
  type: Injectable,
18
95
  args: [{
19
96
  providedIn: 'root',
20
97
  }]
21
- }] });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXMtdXNlci1saWIvc3JjL2xpYi9zZXJ2aWNlcy91c2VyL3VzZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFrQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSW5FOztHQUVHO0FBSUgsTUFBTSxPQUFPLFdBQVc7SUFIeEI7UUFJRTs7V0FFRztRQUNJLFVBQUssR0FBMkIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25EOzhHQUxZLFdBQVc7a0hBQVgsV0FBVyxjQUZWLE1BQU07OzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgV3JpdGFibGVTaWduYWwsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgSVVzZXJTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLnNlcnZpY2UuaW50ZXJmYWNlJztcclxuXHJcbi8qKlxyXG4gKlxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJTZXJ2aWNlIGltcGxlbWVudHMgSVVzZXJTZXJ2aWNlIHtcclxuICAvKipcclxuICAgKiB7QGxpbmsgSVVzZXJTZXJ2aWNlLnRva2VufVxyXG4gICAqL1xyXG4gIHB1YmxpYyB0b2tlbjogV3JpdGFibGVTaWduYWw8c3RyaW5nPiA9IHNpZ25hbCgnJyk7XHJcbn1cclxuIl19
98
+ }], ctorParameters: () => [] });
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXMtdXNlci1saWIvc3JjL2xpYi9zZXJ2aWNlcy91c2VyL3VzZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsU0FBUztBQUNULE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxZQUFZO0FBQ1osT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBVTlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFFeEQ7O0dBRUc7QUFJSCxNQUFNLE9BQU8sV0FBVztJQTBCdEI7Ozs7T0FJRztJQUNIO1FBOUJBOztXQUVHO1FBQ0ksU0FBSSxHQUFTLFdBQVcsQ0FBQztRQUVoQzs7V0FFRztRQUNLLGlCQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV4RDs7V0FFRztRQUNLLG1CQUFjLEdBQWtCLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUU5RDs7V0FFRztRQUNLLHlCQUFvQixHQUFXLFdBQVcsQ0FBQztRQUVuRDs7V0FFRztRQUNLLHVCQUFrQixHQUFXLFdBQVcsQ0FBQztRQVEvQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQTZCO1FBQ3pDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLG1CQUFtQixJQUFJLFdBQVcsQ0FBQztRQUMxRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsSUFBSSxXQUFXLENBQUM7UUFFdEUsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjLENBQUMsSUFBbUI7UUFDdkMsTUFBTSxXQUFXLEdBQVU7WUFDekIsR0FBRyxFQUFFLElBQUksQ0FBQyxvQkFBb0I7WUFDOUIsSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDO1FBQ0YsTUFBTSxlQUFlLEdBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUMxQixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBSSxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sZUFBZSxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7Z0JBQ3RDLE9BQU8sZ0JBQWdCLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FDdEMsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUM3QixTQUFTLENBQUMsQ0FBQyxJQUFVLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekQsT0FBTyxnQkFBZ0IsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWTtRQUNqQixNQUFNLFdBQVcsR0FBUTtZQUN2QixHQUFHLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtTQUM3QixDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQXFCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7OEdBMUZVLFdBQVc7a0hBQVgsV0FBVyxjQUZWLE1BQU07OzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnQGFsYmlfc2NhbmRvL2FzLWh0dHAtbGliJztcclxuXHJcbi8vIEFzc2V0c1xyXG5pbXBvcnQgeyBkZWZhdWx0VXNlckxpYlNldHVwIH0gZnJvbSAnLi4vLi4vZGVmYXVsdC9kZWZhdWx0JztcclxuaW1wb3J0IHsgZGVmYXVsdFVzZXIgfSBmcm9tICcuLi8uLi9kZWZhdWx0L2RlZmF1bHQtdXNlcic7XHJcblxyXG4vLyBDb25zdGFudHNcclxuaW1wb3J0IHsgb2JzZXJ2YWJsZUVtcHR5JCwgc3RyaW5nRW1wdHkgfSBmcm9tICdAYWxiaV9zY2FuZG8vYXMtY29uc3RhbnRzLWxpYic7XHJcblxyXG4vLyBFbnVtc1xyXG5cclxuLy8gSW50ZXJmYWNlc1xyXG5pbXBvcnQgeyBQYXRjaCB9IGZyb20gJ0BhbGJpX3NjYW5kby9hcy1odHRwLWxpYi9saWIvbW9kZWxzL3BhdGNoJztcclxuaW1wb3J0IHsgR2V0IH0gZnJvbSAnQGFsYmlfc2NhbmRvL2FzLWh0dHAtbGliL2xpYi9tb2RlbHMvZ2V0JztcclxuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdXNlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBJVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBJVXNlckxpYlNldHVwIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zZXR1cC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnQGFsYmlfc2NhbmRvL2FzLWxvZy1saWInO1xyXG5cclxuLyoqXHJcbiAqXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlclNlcnZpY2UgaW1wbGVtZW50cyBJVXNlclNlcnZpY2Uge1xyXG4gIC8qKlxyXG4gICAqIHtAbGluayBJVXNlclNlcnZpY2UudXNlcn1cclxuICAgKi9cclxuICBwdWJsaWMgdXNlcjogVXNlciA9IGRlZmF1bHRVc2VyO1xyXG5cclxuICAvKipcclxuICAgKiB7QGxpbmsgSHR0cFNlcnZpY2V9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaHR0cFNlcnZpY2U6IEh0dHBTZXJ2aWNlID0gaW5qZWN0KEh0dHBTZXJ2aWNlKTtcclxuXHJcbiAgLyoqXHJcbiAgICoge0BsaW5rIExvZ2dlclNlcnZpY2V9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZSA9IGluamVjdChMb2dnZXJTZXJ2aWNlKTtcclxuXHJcbiAgLyoqXHJcbiAgICogUEFUQ0ggdXNlciBkYXRhIGFwaSB1cmxcclxuICAgKi9cclxuICBwcml2YXRlIF9wYXRjaFVzZXJEYXRhQVBJVXJsOiBzdHJpbmcgPSBzdHJpbmdFbXB0eTtcclxuXHJcbiAgLyoqXHJcbiAgICogR0VUIHVzZXIgZGF0YSBhcGkgdXJsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZ2V0VXNlckRhdGFBUElVcmw6IHN0cmluZyA9IHN0cmluZ0VtcHR5O1xyXG5cclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RvclxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuc2V0dXAkKGRlZmF1bHRVc2VyTGliU2V0dXApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICoge0BsaW5rIElVc2VyU2VydmljZS5zZXR1cCR9XHJcbiAgICovXHJcbiAgcHVibGljIHNldHVwJChzZXR1cDogUGFydGlhbDxJVXNlckxpYlNldHVwPik6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgdGhpcy5fcGF0Y2hVc2VyRGF0YUFQSVVybCA9IHNldHVwLmFwaT8ucGF0Y2hVc2VyRGF0YUFQSVVybCB8fCBzdHJpbmdFbXB0eTtcclxuICAgIHRoaXMuX2dldFVzZXJEYXRhQVBJVXJsID0gc2V0dXAuYXBpPy5nZXRVc2VyRGF0YUFQSVVybCB8fCBzdHJpbmdFbXB0eTtcclxuXHJcbiAgICByZXR1cm4gb2JzZXJ2YWJsZUVtcHR5JDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHtAbGluayBJVXNlclNlcnZpY2UucGF0Y2hVc2VyRGF0YSR9XHJcbiAgICovXHJcbiAgcHVibGljIHBhdGNoVXNlckRhdGEkKHVzZXI6IFBhcnRpYWw8VXNlcj4pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGh0dHBSZXF1ZXN0OiBQYXRjaCA9IHtcclxuICAgICAgdXJsOiB0aGlzLl9wYXRjaFVzZXJEYXRhQVBJVXJsLFxyXG4gICAgICBib2R5OiB1c2VyLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHVwZGF0ZVVzZXJEYXRhJDogT2JzZXJ2YWJsZTx2b2lkPiA9XHJcbiAgICAgIHRoaXMuX2h0dHBTZXJ2aWNlLnBhdGNoKGh0dHBSZXF1ZXN0KTtcclxuICAgIHJldHVybiBvYnNlcnZhYmxlRW1wdHkkLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGh0dHBSZXF1ZXN0LnVybCkge1xyXG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVVzZXJEYXRhJDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy51c2VyID0geyAuLi50aGlzLnVzZXIsIC4uLnVzZXIgfTtcclxuICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlRW1wdHkkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnN5bmNVc2VyRGF0YSQoKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB7QGxpbmsgSVVzZXJTZXJ2aWNlLnN5bmNVc2VyRGF0YSR9XHJcbiAgICovXHJcbiAgcHVibGljIHN5bmNVc2VyRGF0YSQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRVc2VyRGF0YSQoKS5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKHVzZXI6IFVzZXIpID0+IHtcclxuICAgICAgICB0aGlzLnVzZXIgPSB1c2VyO1xyXG4gICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UuaW5mbygnVXNlciBpbmZvIHVwZGF0ZWQnLCB0aGlzLnVzZXIpO1xyXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlRW1wdHkkO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHtAbGluayBJVXNlclNlcnZpY2UuZ2V0VXNlckRhdGEkfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRVc2VyRGF0YSQoKTogT2JzZXJ2YWJsZTxVc2VyPiB7XHJcbiAgICBjb25zdCBodHRwUmVxdWVzdDogR2V0ID0ge1xyXG4gICAgICB1cmw6IHRoaXMuX2dldFVzZXJEYXRhQVBJVXJsLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IGdldFVzZXJEYXRhJDogT2JzZXJ2YWJsZTxVc2VyPiA9IHRoaXMuX2h0dHBTZXJ2aWNlLmdldChodHRwUmVxdWVzdCk7XHJcbiAgICByZXR1cm4gaHR0cFJlcXVlc3QudXJsID8gZ2V0VXNlckRhdGEkIDogb2YodGhpcy51c2VyKTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,25 +1,114 @@
1
1
  import * as i0 from '@angular/core';
2
- import { signal, Injectable } from '@angular/core';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { switchMap, of } from 'rxjs';
4
+ import { HttpService } from '@albi_scando/as-http-lib';
5
+ import { stringEmpty, observableEmpty$ } from '@albi_scando/as-constants-lib';
6
+ import { LoggerService } from '@albi_scando/as-log-lib';
7
+
8
+ const defaultUserLibSetup = {
9
+ api: {
10
+ patchUserDataAPIUrl: stringEmpty,
11
+ getUserDataAPIUrl: stringEmpty,
12
+ },
13
+ };
14
+
15
+ const DEFAULT_USERNAME = 'guest';
16
+ const DEFAULT_LEVEL = "guest" /* USER_LEVELS.GUEST */;
17
+ const defaultUser = {
18
+ username: DEFAULT_USERNAME,
19
+ level: DEFAULT_LEVEL,
20
+ language: undefined,
21
+ environment: undefined,
22
+ };
3
23
 
4
24
  /**
5
25
  *
6
26
  */
7
27
  class UserService {
28
+ /**
29
+ * Constructor
30
+ * @constructor
31
+ * @ignore
32
+ */
8
33
  constructor() {
9
34
  /**
10
- * {@link IUserService.token}
35
+ * {@link IUserService.user}
36
+ */
37
+ this.user = defaultUser;
38
+ /**
39
+ * {@link HttpService}
40
+ */
41
+ this._httpService = inject(HttpService);
42
+ /**
43
+ * {@link LoggerService}
44
+ */
45
+ this._loggerService = inject(LoggerService);
46
+ /**
47
+ * PATCH user data api url
48
+ */
49
+ this._patchUserDataAPIUrl = stringEmpty;
50
+ /**
51
+ * GET user data api url
11
52
  */
12
- this.token = signal('');
53
+ this._getUserDataAPIUrl = stringEmpty;
54
+ this.setup$(defaultUserLibSetup).subscribe();
55
+ }
56
+ /**
57
+ * {@link IUserService.setup$}
58
+ */
59
+ setup$(setup) {
60
+ this._patchUserDataAPIUrl = setup.api?.patchUserDataAPIUrl || stringEmpty;
61
+ this._getUserDataAPIUrl = setup.api?.getUserDataAPIUrl || stringEmpty;
62
+ return observableEmpty$;
63
+ }
64
+ /**
65
+ * {@link IUserService.patchUserData$}
66
+ */
67
+ patchUserData$(user) {
68
+ const httpRequest = {
69
+ url: this._patchUserDataAPIUrl,
70
+ body: user,
71
+ };
72
+ const updateUserData$ = this._httpService.patch(httpRequest);
73
+ return observableEmpty$.pipe(switchMap(() => {
74
+ if (httpRequest.url) {
75
+ return updateUserData$;
76
+ }
77
+ else {
78
+ this.user = { ...this.user, ...user };
79
+ return observableEmpty$;
80
+ }
81
+ }), switchMap(() => this.syncUserData$()));
82
+ }
83
+ /**
84
+ * {@link IUserService.syncUserData$}
85
+ */
86
+ syncUserData$() {
87
+ return this.getUserData$().pipe(switchMap((user) => {
88
+ this.user = user;
89
+ this._loggerService.info('User info updated', this.user);
90
+ return observableEmpty$;
91
+ }));
92
+ }
93
+ /**
94
+ * {@link IUserService.getUserData$}
95
+ */
96
+ getUserData$() {
97
+ const httpRequest = {
98
+ url: this._getUserDataAPIUrl,
99
+ };
100
+ const getUserData$ = this._httpService.get(httpRequest);
101
+ return httpRequest.url ? getUserData$ : of(this.user);
13
102
  }
14
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: UserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
15
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: UserService, providedIn: 'root' }); }
103
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
104
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserService, providedIn: 'root' }); }
16
105
  }
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: UserService, decorators: [{
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserService, decorators: [{
18
107
  type: Injectable,
19
108
  args: [{
20
109
  providedIn: 'root',
21
110
  }]
22
- }] });
111
+ }], ctorParameters: () => [] });
23
112
 
24
113
  /*
25
114
  * Public API Surface of as-user-lib
@@ -1 +1 @@
1
- {"version":3,"file":"albi_scando-as-user-lib.mjs","sources":["../../../projects/as-user-lib/src/lib/services/user/user.service.ts","../../../projects/as-user-lib/src/public-api.ts","../../../projects/as-user-lib/src/albi_scando-as-user-lib.ts"],"sourcesContent":["import { Injectable, WritableSignal, signal } from '@angular/core';\r\n\r\nimport { IUserService } from './user.service.interface';\r\n\r\n/**\r\n *\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class UserService implements IUserService {\r\n /**\r\n * {@link IUserService.token}\r\n */\r\n public token: WritableSignal<string> = signal('');\r\n}\r\n","/*\r\n * Public API Surface of as-user-lib\r\n */\r\n\r\n// enums\r\n\r\n// services\r\nexport * from './lib/services/user/user.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;AAIA;;AAEG;MAIU,WAAW,CAAA;AAHxB,IAAA,WAAA,GAAA;AAIE;;AAEG;AACI,QAAA,IAAA,CAAA,KAAK,GAA2B,MAAM,CAAC,EAAE,CAAC,CAAC;AACnD,KAAA;8GALY,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACTD;;AAEG;AAEH;AAEA;;ACNA;;AAEG;;;;"}
1
+ {"version":3,"file":"albi_scando-as-user-lib.mjs","sources":["../../../projects/as-user-lib/src/lib/default/default.ts","../../../projects/as-user-lib/src/lib/default/default-user.ts","../../../projects/as-user-lib/src/lib/services/user/user.service.ts","../../../projects/as-user-lib/src/public-api.ts","../../../projects/as-user-lib/src/albi_scando-as-user-lib.ts"],"sourcesContent":["import { stringEmpty } from '@albi_scando/as-constants-lib';\r\n\r\n// interfaces\r\nimport { IUserLibSetup } from '../interfaces/setup.interface';\r\n\r\nexport const defaultUserLibSetup: IUserLibSetup = {\r\n api: {\r\n patchUserDataAPIUrl: stringEmpty,\r\n getUserDataAPIUrl: stringEmpty,\r\n },\r\n};\r\n","// enums\r\nimport { USER_LEVELS } from '../enums/user-levels.enum';\r\n\r\n// interface\r\nimport { User } from '../interfaces/user.interface';\r\n\r\nexport const DEFAULT_USERNAME: string = 'guest';\r\nexport const DEFAULT_LEVEL: USER_LEVELS = USER_LEVELS.GUEST;\r\n\r\nexport const defaultUser: User = {\r\n username: DEFAULT_USERNAME,\r\n level: DEFAULT_LEVEL as USER_LEVELS,\r\n language: undefined,\r\n environment: undefined,\r\n};\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { Observable, of, switchMap } from 'rxjs';\r\n\r\nimport { HttpService } from '@albi_scando/as-http-lib';\r\n\r\n// Assets\r\nimport { defaultUserLibSetup } from '../../default/default';\r\nimport { defaultUser } from '../../default/default-user';\r\n\r\n// Constants\r\nimport { observableEmpty$, stringEmpty } from '@albi_scando/as-constants-lib';\r\n\r\n// Enums\r\n\r\n// Interfaces\r\nimport { Patch } from '@albi_scando/as-http-lib/lib/models/patch';\r\nimport { Get } from '@albi_scando/as-http-lib/lib/models/get';\r\nimport { User } from '../../interfaces/user.interface';\r\nimport { IUserService } from './user.service.interface';\r\nimport { IUserLibSetup } from '../../interfaces/setup.interface';\r\nimport { LoggerService } from '@albi_scando/as-log-lib';\r\n\r\n/**\r\n *\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class UserService implements IUserService {\r\n /**\r\n * {@link IUserService.user}\r\n */\r\n public user: User = defaultUser;\r\n\r\n /**\r\n * {@link HttpService}\r\n */\r\n private _httpService: HttpService = inject(HttpService);\r\n\r\n /**\r\n * {@link LoggerService}\r\n */\r\n private _loggerService: LoggerService = inject(LoggerService);\r\n\r\n /**\r\n * PATCH user data api url\r\n */\r\n private _patchUserDataAPIUrl: string = stringEmpty;\r\n\r\n /**\r\n * GET user data api url\r\n */\r\n private _getUserDataAPIUrl: string = stringEmpty;\r\n\r\n /**\r\n * Constructor\r\n * @constructor\r\n * @ignore\r\n */\r\n constructor() {\r\n this.setup$(defaultUserLibSetup).subscribe();\r\n }\r\n\r\n /**\r\n * {@link IUserService.setup$}\r\n */\r\n public setup$(setup: Partial<IUserLibSetup>): Observable<void> {\r\n this._patchUserDataAPIUrl = setup.api?.patchUserDataAPIUrl || stringEmpty;\r\n this._getUserDataAPIUrl = setup.api?.getUserDataAPIUrl || stringEmpty;\r\n\r\n return observableEmpty$;\r\n }\r\n\r\n /**\r\n * {@link IUserService.patchUserData$}\r\n */\r\n public patchUserData$(user: Partial<User>): Observable<void> {\r\n const httpRequest: Patch = {\r\n url: this._patchUserDataAPIUrl,\r\n body: user,\r\n };\r\n const updateUserData$: Observable<void> =\r\n this._httpService.patch(httpRequest);\r\n return observableEmpty$.pipe(\r\n switchMap(() => {\r\n if (httpRequest.url) {\r\n return updateUserData$;\r\n } else {\r\n this.user = { ...this.user, ...user };\r\n return observableEmpty$;\r\n }\r\n }),\r\n switchMap(() => this.syncUserData$())\r\n );\r\n }\r\n\r\n /**\r\n * {@link IUserService.syncUserData$}\r\n */\r\n public syncUserData$(): Observable<void> {\r\n return this.getUserData$().pipe(\r\n switchMap((user: User) => {\r\n this.user = user;\r\n this._loggerService.info('User info updated', this.user);\r\n return observableEmpty$;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * {@link IUserService.getUserData$}\r\n */\r\n public getUserData$(): Observable<User> {\r\n const httpRequest: Get = {\r\n url: this._getUserDataAPIUrl,\r\n };\r\n const getUserData$: Observable<User> = this._httpService.get(httpRequest);\r\n return httpRequest.url ? getUserData$ : of(this.user);\r\n }\r\n}\r\n","/*\r\n * Public API Surface of as-user-lib\r\n */\r\n\r\n// enums\r\n\r\n// services\r\nexport * from './lib/services/user/user.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { USER_LEVELS } from '../enums/user-levels.enum';
2
+ import { User } from '../interfaces/user.interface';
3
+ export declare const DEFAULT_USERNAME: string;
4
+ export declare const DEFAULT_LEVEL: USER_LEVELS;
5
+ export declare const defaultUser: User;
@@ -0,0 +1,2 @@
1
+ import { IUserLibSetup } from '../interfaces/setup.interface';
2
+ export declare const defaultUserLibSetup: IUserLibSetup;
@@ -0,0 +1,3 @@
1
+ export declare const enum USER_LEVELS {
2
+ GUEST = "guest"
3
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Configuration interface
3
+ */
4
+ export interface IUserLibSetup {
5
+ api: API;
6
+ }
7
+ export interface API {
8
+ patchUserDataAPIUrl: string;
9
+ getUserDataAPIUrl: string;
10
+ }
@@ -0,0 +1,8 @@
1
+ import { LANGUAGES } from '@albi_scando/as-constants-lib';
2
+ import { USER_LEVELS } from '../enums/user-levels.enum';
3
+ export interface User {
4
+ username: string;
5
+ level: USER_LEVELS;
6
+ language: LANGUAGES | undefined;
7
+ environment: string | undefined;
8
+ }
@@ -1,14 +1,54 @@
1
- import { WritableSignal } from '@angular/core';
1
+ import { Observable } from 'rxjs';
2
+ import { User } from '../../interfaces/user.interface';
2
3
  import { IUserService } from './user.service.interface';
4
+ import { IUserLibSetup } from '../../interfaces/setup.interface';
3
5
  import * as i0 from "@angular/core";
4
6
  /**
5
7
  *
6
8
  */
7
9
  export declare class UserService implements IUserService {
8
10
  /**
9
- * {@link IUserService.token}
11
+ * {@link IUserService.user}
10
12
  */
11
- token: WritableSignal<string>;
13
+ user: User;
14
+ /**
15
+ * {@link HttpService}
16
+ */
17
+ private _httpService;
18
+ /**
19
+ * {@link LoggerService}
20
+ */
21
+ private _loggerService;
22
+ /**
23
+ * PATCH user data api url
24
+ */
25
+ private _patchUserDataAPIUrl;
26
+ /**
27
+ * GET user data api url
28
+ */
29
+ private _getUserDataAPIUrl;
30
+ /**
31
+ * Constructor
32
+ * @constructor
33
+ * @ignore
34
+ */
35
+ constructor();
36
+ /**
37
+ * {@link IUserService.setup$}
38
+ */
39
+ setup$(setup: Partial<IUserLibSetup>): Observable<void>;
40
+ /**
41
+ * {@link IUserService.patchUserData$}
42
+ */
43
+ patchUserData$(user: Partial<User>): Observable<void>;
44
+ /**
45
+ * {@link IUserService.syncUserData$}
46
+ */
47
+ syncUserData$(): Observable<void>;
48
+ /**
49
+ * {@link IUserService.getUserData$}
50
+ */
51
+ getUserData$(): Observable<User>;
12
52
  static ɵfac: i0.ɵɵFactoryDeclaration<UserService, never>;
13
53
  static ɵprov: i0.ɵɵInjectableDeclaration<UserService>;
14
54
  }
@@ -1,7 +1,32 @@
1
- import { WritableSignal } from '@angular/core';
1
+ import { Observable } from 'rxjs';
2
+ import { User } from '../../interfaces/user.interface';
3
+ import { IUserLibSetup } from '../../interfaces/setup.interface';
2
4
  export interface IUserService {
3
5
  /**
4
- * Token signal
6
+ * User object
5
7
  */
6
- token: WritableSignal<string>;
8
+ user: User;
9
+ /**
10
+ * Set service configuration
11
+ * @param {Partial<IUserLibSetup>} setup configuration object
12
+ * @returns {Observable<void>}
13
+ */
14
+ setup$(setup: Partial<IUserLibSetup>): Observable<void>;
15
+ /**
16
+ * Update user object with provided data
17
+ * @param {Partial<User>} user partial user info to modify
18
+ * @returns {Observable<void>}
19
+ */
20
+ patchUserData$(user: Partial<User>): Observable<void>;
21
+ /**
22
+ * Get user data
23
+ * @returns {Observable<User>} user data
24
+ */
25
+ getUserData$(): Observable<User>;
26
+ /**
27
+ * If user data reside on a db, fetch it and use it to synchronize service user object.
28
+ * If no db is available, set current user equal to itself.
29
+ * @returns {Observable<void>}
30
+ */
31
+ syncUserData$(): Observable<void>;
7
32
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@albi_scando/as-user-lib",
3
- "version": "0.0.1-rc1",
3
+ "version": "0.0.1-rc10",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^17.2.0",
6
6
  "@angular/core": "^17.2.0"
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXMtdXNlci1saWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9hcy11c2VyLWxpYi9zcmMvYXMtdXNlci1saWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -1,35 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { signal, Injectable } from '@angular/core';
3
-
4
- /**
5
- *
6
- */
7
- class UserService {
8
- constructor() {
9
- /**
10
- * {@link IUserService.token}
11
- */
12
- this.token = signal('');
13
- }
14
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: UserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
15
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: UserService, providedIn: 'root' }); }
16
- }
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: UserService, decorators: [{
18
- type: Injectable,
19
- args: [{
20
- providedIn: 'root',
21
- }]
22
- }] });
23
-
24
- /*
25
- * Public API Surface of as-user-lib
26
- */
27
- // enums
28
- // services
29
-
30
- /**
31
- * Generated bundle index. Do not edit.
32
- */
33
-
34
- export { UserService };
35
- //# sourceMappingURL=as-user-lib.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"as-user-lib.mjs","sources":["../../../projects/as-user-lib/src/lib/services/user/user.service.ts","../../../projects/as-user-lib/src/public-api.ts","../../../projects/as-user-lib/src/as-user-lib.ts"],"sourcesContent":["import { Injectable, WritableSignal, signal } from '@angular/core';\r\n\r\nimport { IUserService } from './user.service.interface';\r\n\r\n/**\r\n *\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class UserService implements IUserService {\r\n /**\r\n * {@link IUserService.token}\r\n */\r\n public token: WritableSignal<string> = signal('');\r\n}\r\n","/*\r\n * Public API Surface of as-user-lib\r\n */\r\n\r\n// enums\r\n\r\n// services\r\nexport * from './lib/services/user/user.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;AAIA;;AAEG;MAIU,WAAW,CAAA;AAHxB,IAAA,WAAA,GAAA;AAIE;;AAEG;AACI,QAAA,IAAA,CAAA,KAAK,GAA2B,MAAM,CAAC,EAAE,CAAC,CAAC;AACnD,KAAA;8GALY,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACTD;;AAEG;AAEH;AAEA;;ACNA;;AAEG;;;;"}