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

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,10 @@
1
+ import { LANGUAGES } from '@albi_scando/as-language-lib/lib/enums/languages.enum';
2
+ export const DEFAULT_USERNAME = 'guest';
3
+ export const DEFAULT_LEVEL = "guest" /* USER_LEVELS.GUEST */;
4
+ export const DEFAULT_LANGUAGE = LANGUAGES.EnglishLanguageCode;
5
+ export const defaultUser = {
6
+ username: DEFAULT_USERNAME,
7
+ level: DEFAULT_LEVEL,
8
+ language: DEFAULT_LANGUAGE,
9
+ };
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC11c2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXMtdXNlci1saWIvc3JjL2xpYi9kZWZhdWx0L2RlZmF1bHQtdXNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdURBQXVELENBQUM7QUFRbEYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQVcsT0FBTyxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLGFBQWEsa0NBQWlDLENBQUM7QUFDNUQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQWMsU0FBUyxDQUFDLG1CQUFtQixDQUFDO0FBRXpFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBUztJQUMvQixRQUFRLEVBQUUsZ0JBQWdCO0lBQzFCLEtBQUssRUFBRSxhQUE0QjtJQUNuQyxRQUFRLEVBQUUsZ0JBQWdCO0NBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMQU5HVUFHRVMgfSBmcm9tICdAYWxiaV9zY2FuZG8vYXMtbGFuZ3VhZ2UtbGliL2xpYi9lbnVtcy9sYW5ndWFnZXMuZW51bSc7XHJcblxyXG4vLyBlbnVtc1xyXG5pbXBvcnQgeyBVU0VSX0xFVkVMUyB9IGZyb20gJy4uL2VudW1zL3VzZXItbGV2ZWxzLmVudW0nO1xyXG5cclxuLy8gaW50ZXJmYWNlXHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3VzZXIuaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX1VTRVJOQU1FOiBzdHJpbmcgPSAnZ3Vlc3QnO1xyXG5leHBvcnQgY29uc3QgREVGQVVMVF9MRVZFTDogVVNFUl9MRVZFTFMgPSBVU0VSX0xFVkVMUy5HVUVTVDtcclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTEFOR1VBR0U6IExBTkdVQUdFUyA9IExBTkdVQUdFUy5FbmdsaXNoTGFuZ3VhZ2VDb2RlO1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRVc2VyOiBVc2VyID0ge1xyXG4gIHVzZXJuYW1lOiBERUZBVUxUX1VTRVJOQU1FLFxyXG4gIGxldmVsOiBERUZBVUxUX0xFVkVMIGFzIFVTRVJfTEVWRUxTLFxyXG4gIGxhbmd1YWdlOiBERUZBVUxUX0xBTkdVQUdFLFxyXG59O1xyXG4iXX0=
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcy11c2VyLWxpYi9zcmMvbGliL2ludGVyZmFjZXMvdXNlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGVudW1zXHJcbmltcG9ydCB7IExBTkdVQUdFUyB9IGZyb20gJ0BhbGJpX3NjYW5kby9hcy1sYW5ndWFnZS1saWIvbGliL2VudW1zL2xhbmd1YWdlcy5lbnVtJztcclxuaW1wb3J0IHsgVVNFUl9MRVZFTFMgfSBmcm9tICcuLi9lbnVtcy91c2VyLWxldmVscy5lbnVtJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXNlciB7XHJcbiAgdXNlcm5hbWU6IHN0cmluZztcclxuICBsZXZlbDogVVNFUl9MRVZFTFM7XHJcbiAgbGFuZ3VhZ2U6IExBTkdVQUdFUztcclxufVxyXG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzLXVzZXItbGliL3NyYy9saWIvc2VydmljZXMvdXNlci91c2VyLnNlcnZpY2UuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVXNlclNlcnZpY2Uge1xyXG4gIC8qKlxyXG4gICAqIFRva2VuIHNpZ25hbFxyXG4gICAqL1xyXG4gIHRva2VuOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xyXG59XHJcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzLXVzZXItbGliL3NyYy9saWIvc2VydmljZXMvdXNlci91c2VyLnNlcnZpY2UuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG4vLyBJbnRlcmZhY2VzXHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3VzZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgSVVzZXJMaWJTZXR1cCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2V0dXAuaW50ZXJmYWNlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXJTZXJ2aWNlIHtcclxuICAvKipcclxuICAgKiBVc2VyIG9iamVjdFxyXG4gICAqL1xyXG4gIHVzZXI6IFVzZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRva2VuIHNpZ25hbFxyXG4gICAqL1xyXG4gIHRva2VuOiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xyXG5cclxuICAvKipcclxuICAgKiBTZXQgc2VydmljZSBjb25maWd1cmF0aW9uXHJcbiAgICogQHBhcmFtIHtQYXJ0aWFsPElVc2VyTGliU2V0dXA+fSBzZXR1cCBjb25maWd1cmF0aW9uIG9iamVjdFxyXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPHZvaWQ+fVxyXG4gICAqL1xyXG4gIHNldHVwJChzZXR1cDogUGFydGlhbDxJVXNlckxpYlNldHVwPik6IE9ic2VydmFibGU8dm9pZD47XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB1c2VyIG9iamVjdCB3aXRoIHByb3ZpZGVkIGRhdGFcclxuICAgKiBAcGFyYW0ge1BhcnRpYWw8VXNlcj59IHVzZXIgcGFydGlhbCB1c2VyIGluZm8gdG8gbW9kaWZ5XHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8dm9pZD59XHJcbiAgICovXHJcbiAgcGF0Y2hVc2VyRGF0YSQodXNlcjogUGFydGlhbDxVc2VyPik6IE9ic2VydmFibGU8dm9pZD47XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB1c2VyIGRhdGFcclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxVc2VyPn0gdXNlciBkYXRhXHJcbiAgICovXHJcbiAgZ2V0VXNlckRhdGEkKCk6IE9ic2VydmFibGU8VXNlcj47XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHVzZXIgZGF0YSByZXNpZGUgb24gYSBkYiwgZmV0Y2ggaXQgYW5kIHVzZSBpdCB0byBzeW5jaHJvbml6ZSBzZXJ2aWNlIHVzZXIgb2JqZWN0LlxyXG4gICAqIElmIG5vIGRiIGlzIGF2YWlsYWJsZSwgc2V0IGN1cnJlbnQgdXNlciBlcXVhbCB0byBpdHNlbGYuXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8dm9pZD59XHJcbiAgICovXHJcbiAgc3luY1VzZXJEYXRhJCgpOiBPYnNlcnZhYmxlPHZvaWQ+O1xyXG59XHJcbiJdfQ==
@@ -1,22 +1,89 @@
1
- import { Injectable, signal } from '@angular/core';
1
+ import { Injectable, inject, signal } from '@angular/core';
2
+ import { iif, 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';
2
9
  import * as i0 from "@angular/core";
3
10
  /**
4
11
  *
5
12
  */
6
13
  export class UserService {
14
+ /**
15
+ * Constructor
16
+ * @constructor
17
+ * @ignore
18
+ */
7
19
  constructor() {
20
+ /**
21
+ * {@link IUserService.user}
22
+ */
23
+ this.user = defaultUser;
8
24
  /**
9
25
  * {@link IUserService.token}
10
26
  */
11
- this.token = signal('');
27
+ this.token = signal(stringEmpty);
28
+ /**
29
+ * {@link HttpService}
30
+ */
31
+ this._httpService = inject(HttpService);
32
+ /**
33
+ * PATCH user data api url
34
+ */
35
+ this._patchUserDataAPIUrl = stringEmpty;
36
+ /**
37
+ * GET user data api url
38
+ */
39
+ this._getUserDataAPIUrl = stringEmpty;
40
+ this.setup$(defaultUserLibSetup).subscribe();
41
+ }
42
+ /**
43
+ * {@link IUserService.setup$}
44
+ */
45
+ setup$(setup) {
46
+ this._patchUserDataAPIUrl = setup.api?.patchUserDataAPIUrl || stringEmpty;
47
+ this._getUserDataAPIUrl = setup.api?.getUserDataAPIUrl || stringEmpty;
48
+ return observableEmpty$;
49
+ }
50
+ /**
51
+ * {@link IUserService.patchUserData$}
52
+ */
53
+ patchUserData$(user) {
54
+ const httpRequest = {
55
+ url: this._patchUserDataAPIUrl,
56
+ body: user,
57
+ };
58
+ const updateUserData$ = this._httpService.patch(httpRequest);
59
+ return iif(() => httpRequest.url === stringEmpty, of(() => (this.user = { ...this.user, ...user })), updateUserData$).pipe(() => this.syncUserData$());
60
+ }
61
+ /**
62
+ * {@link IUserService.getUserData$}
63
+ */
64
+ getUserData$() {
65
+ const httpRequest = {
66
+ url: this._getUserDataAPIUrl,
67
+ };
68
+ const getUserData$ = this._httpService.get(httpRequest);
69
+ return iif(() => httpRequest.url === stringEmpty, of(this.user), getUserData$);
70
+ }
71
+ /**
72
+ * {@link IUserService.syncUserData$}
73
+ */
74
+ syncUserData$() {
75
+ return this.getUserData$().pipe(switchMap((user) => {
76
+ this.user = user;
77
+ return observableEmpty$;
78
+ }));
12
79
  }
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' }); }
80
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
81
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserService, providedIn: 'root' }); }
15
82
  }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: UserService, decorators: [{
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserService, decorators: [{
17
84
  type: Injectable,
18
85
  args: [{
19
86
  providedIn: 'root',
20
87
  }]
21
- }] });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXMtdXNlci1saWIvc3JjL2xpYi9zZXJ2aWNlcy91c2VyL3VzZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFrQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSW5FOztHQUVHO0FBSUgsTUFBTSxPQUFPLFdBQVc7SUFIeEI7UUFJRTs7V0FFRztRQUNJLFVBQUssR0FBMkIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25EOzhHQUxZLFdBQVc7a0hBQVgsV0FBVyxjQUZWLE1BQU07OzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgV3JpdGFibGVTaWduYWwsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgSVVzZXJTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLnNlcnZpY2UuaW50ZXJmYWNlJztcclxuXHJcbi8qKlxyXG4gKlxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJTZXJ2aWNlIGltcGxlbWVudHMgSVVzZXJTZXJ2aWNlIHtcclxuICAvKipcclxuICAgKiB7QGxpbmsgSVVzZXJTZXJ2aWNlLnRva2VufVxyXG4gICAqL1xyXG4gIHB1YmxpYyB0b2tlbjogV3JpdGFibGVTaWduYWw8c3RyaW5nPiA9IHNpZ25hbCgnJyk7XHJcbn1cclxuIl19
88
+ }], ctorParameters: () => [] });
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXMtdXNlci1saWIvc3JjL2xpYi9zZXJ2aWNlcy91c2VyL3VzZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFrQixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBYyxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsU0FBUztBQUNULE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxZQUFZO0FBQ1osT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQVc5RTs7R0FFRztBQUlILE1BQU0sT0FBTyxXQUFXO0lBMEJ0Qjs7OztPQUlHO0lBQ0g7UUE5QkE7O1dBRUc7UUFDSSxTQUFJLEdBQVMsV0FBVyxDQUFDO1FBRWhDOztXQUVHO1FBQ0ksVUFBSyxHQUEyQixNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFM0Q7O1dBRUc7UUFDSyxpQkFBWSxHQUFnQixNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFeEQ7O1dBRUc7UUFDSyx5QkFBb0IsR0FBVyxXQUFXLENBQUM7UUFFbkQ7O1dBRUc7UUFDSyx1QkFBa0IsR0FBVyxXQUFXLENBQUM7UUFRL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxLQUE2QjtRQUN6QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsSUFBSSxXQUFXLENBQUM7UUFDMUUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLElBQUksV0FBVyxDQUFDO1FBRXRFLE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYyxDQUFDLElBQW1CO1FBQ3ZDLE1BQU0sV0FBVyxHQUFVO1lBQ3pCLEdBQUcsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1lBQzlCLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQztRQUNGLE1BQU0sZUFBZSxHQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2QyxPQUFPLEdBQUcsQ0FDUixHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFDckMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsRUFDakQsZUFBZSxDQUNoQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2pCLE1BQU0sV0FBVyxHQUFRO1lBQ3ZCLEdBQUcsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1NBQzdCLENBQUM7UUFDRixNQUFNLFlBQVksR0FBcUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUUsT0FBTyxHQUFHLENBQ1IsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQ3JDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ2IsWUFBWSxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDN0IsU0FBUyxDQUFDLENBQUMsSUFBVSxFQUFFLEVBQUU7WUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDakIsT0FBTyxnQkFBZ0IsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs4R0F2RlUsV0FBVztrSEFBWCxXQUFXLGNBRlYsTUFBTTs7MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBXcml0YWJsZVNpZ25hbCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgaWlmLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJ0BhbGJpX3NjYW5kby9hcy1odHRwLWxpYic7XHJcblxyXG4vLyBBc3NldHNcclxuaW1wb3J0IHsgZGVmYXVsdFVzZXJMaWJTZXR1cCB9IGZyb20gJy4uLy4uL2RlZmF1bHQvZGVmYXVsdCc7XHJcbmltcG9ydCB7IGRlZmF1bHRVc2VyIH0gZnJvbSAnLi4vLi4vZGVmYXVsdC9kZWZhdWx0LXVzZXInO1xyXG5cclxuLy8gQ29uc3RhbnRzXHJcbmltcG9ydCB7IG9ic2VydmFibGVFbXB0eSQsIHN0cmluZ0VtcHR5IH0gZnJvbSAnQGFsYmlfc2NhbmRvL2FzLWNvbnN0YW50cy1saWInO1xyXG5cclxuLy8gRW51bXNcclxuXHJcbi8vIEludGVyZmFjZXNcclxuaW1wb3J0IHsgUGF0Y2ggfSBmcm9tICdAYWxiaV9zY2FuZG8vYXMtaHR0cC1saWIvbGliL21vZGVscy9wYXRjaCc7XHJcbmltcG9ydCB7IEdldCB9IGZyb20gJ0BhbGJpX3NjYW5kby9hcy1odHRwLWxpYi9saWIvbW9kZWxzL2dldCc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3VzZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgSVVzZXJTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLnNlcnZpY2UuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgSVVzZXJMaWJTZXR1cCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2V0dXAuaW50ZXJmYWNlJztcclxuXHJcbi8qKlxyXG4gKlxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJTZXJ2aWNlIGltcGxlbWVudHMgSVVzZXJTZXJ2aWNlIHtcclxuICAvKipcclxuICAgKiB7QGxpbmsgSVVzZXJTZXJ2aWNlLnVzZXJ9XHJcbiAgICovXHJcbiAgcHVibGljIHVzZXI6IFVzZXIgPSBkZWZhdWx0VXNlcjtcclxuXHJcbiAgLyoqXHJcbiAgICoge0BsaW5rIElVc2VyU2VydmljZS50b2tlbn1cclxuICAgKi9cclxuICBwdWJsaWMgdG9rZW46IFdyaXRhYmxlU2lnbmFsPHN0cmluZz4gPSBzaWduYWwoc3RyaW5nRW1wdHkpO1xyXG5cclxuICAvKipcclxuICAgKiB7QGxpbmsgSHR0cFNlcnZpY2V9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaHR0cFNlcnZpY2U6IEh0dHBTZXJ2aWNlID0gaW5qZWN0KEh0dHBTZXJ2aWNlKTtcclxuXHJcbiAgLyoqXHJcbiAgICogUEFUQ0ggdXNlciBkYXRhIGFwaSB1cmxcclxuICAgKi9cclxuICBwcml2YXRlIF9wYXRjaFVzZXJEYXRhQVBJVXJsOiBzdHJpbmcgPSBzdHJpbmdFbXB0eTtcclxuXHJcbiAgLyoqXHJcbiAgICogR0VUIHVzZXIgZGF0YSBhcGkgdXJsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZ2V0VXNlckRhdGFBUElVcmw6IHN0cmluZyA9IHN0cmluZ0VtcHR5O1xyXG5cclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RvclxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuc2V0dXAkKGRlZmF1bHRVc2VyTGliU2V0dXApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICoge0BsaW5rIElVc2VyU2VydmljZS5zZXR1cCR9XHJcbiAgICovXHJcbiAgcHVibGljIHNldHVwJChzZXR1cDogUGFydGlhbDxJVXNlckxpYlNldHVwPik6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgdGhpcy5fcGF0Y2hVc2VyRGF0YUFQSVVybCA9IHNldHVwLmFwaT8ucGF0Y2hVc2VyRGF0YUFQSVVybCB8fCBzdHJpbmdFbXB0eTtcclxuICAgIHRoaXMuX2dldFVzZXJEYXRhQVBJVXJsID0gc2V0dXAuYXBpPy5nZXRVc2VyRGF0YUFQSVVybCB8fCBzdHJpbmdFbXB0eTtcclxuXHJcbiAgICByZXR1cm4gb2JzZXJ2YWJsZUVtcHR5JDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHtAbGluayBJVXNlclNlcnZpY2UucGF0Y2hVc2VyRGF0YSR9XHJcbiAgICovXHJcbiAgcHVibGljIHBhdGNoVXNlckRhdGEkKHVzZXI6IFBhcnRpYWw8VXNlcj4pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGh0dHBSZXF1ZXN0OiBQYXRjaCA9IHtcclxuICAgICAgdXJsOiB0aGlzLl9wYXRjaFVzZXJEYXRhQVBJVXJsLFxyXG4gICAgICBib2R5OiB1c2VyLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHVwZGF0ZVVzZXJEYXRhJDogT2JzZXJ2YWJsZTx2b2lkPiA9XHJcbiAgICAgIHRoaXMuX2h0dHBTZXJ2aWNlLnBhdGNoKGh0dHBSZXF1ZXN0KTtcclxuICAgIHJldHVybiBpaWYoXHJcbiAgICAgICgpID0+IGh0dHBSZXF1ZXN0LnVybCA9PT0gc3RyaW5nRW1wdHksXHJcbiAgICAgIG9mKCgpID0+ICh0aGlzLnVzZXIgPSB7IC4uLnRoaXMudXNlciwgLi4udXNlciB9KSksXHJcbiAgICAgIHVwZGF0ZVVzZXJEYXRhJFxyXG4gICAgKS5waXBlKCgpID0+IHRoaXMuc3luY1VzZXJEYXRhJCgpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHtAbGluayBJVXNlclNlcnZpY2UuZ2V0VXNlckRhdGEkfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRVc2VyRGF0YSQoKTogT2JzZXJ2YWJsZTxVc2VyPiB7XHJcbiAgICBjb25zdCBodHRwUmVxdWVzdDogR2V0ID0ge1xyXG4gICAgICB1cmw6IHRoaXMuX2dldFVzZXJEYXRhQVBJVXJsLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IGdldFVzZXJEYXRhJDogT2JzZXJ2YWJsZTxVc2VyPiA9IHRoaXMuX2h0dHBTZXJ2aWNlLmdldChodHRwUmVxdWVzdCk7XHJcbiAgICByZXR1cm4gaWlmKFxyXG4gICAgICAoKSA9PiBodHRwUmVxdWVzdC51cmwgPT09IHN0cmluZ0VtcHR5LFxyXG4gICAgICBvZih0aGlzLnVzZXIpLFxyXG4gICAgICBnZXRVc2VyRGF0YSRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB7QGxpbmsgSVVzZXJTZXJ2aWNlLnN5bmNVc2VyRGF0YSR9XHJcbiAgICovXHJcbiAgcHVibGljIHN5bmNVc2VyRGF0YSQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRVc2VyRGF0YSQoKS5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKHVzZXI6IFVzZXIpID0+IHtcclxuICAgICAgICB0aGlzLnVzZXIgPSB1c2VyO1xyXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlRW1wdHkkO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,25 +1,105 @@
1
1
  import * as i0 from '@angular/core';
2
- import { signal, Injectable } from '@angular/core';
2
+ import { signal, inject, Injectable } from '@angular/core';
3
+ import { iif, of, switchMap } from 'rxjs';
4
+ import { HttpService } from '@albi_scando/as-http-lib';
5
+ import { stringEmpty, observableEmpty$ } from '@albi_scando/as-constants-lib';
6
+ import { LANGUAGES } from '@albi_scando/as-language-lib/lib/enums/languages.enum';
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 DEFAULT_LANGUAGE = LANGUAGES.EnglishLanguageCode;
18
+ const defaultUser = {
19
+ username: DEFAULT_USERNAME,
20
+ level: DEFAULT_LEVEL,
21
+ language: DEFAULT_LANGUAGE,
22
+ };
3
23
 
4
24
  /**
5
25
  *
6
26
  */
7
27
  class UserService {
28
+ /**
29
+ * Constructor
30
+ * @constructor
31
+ * @ignore
32
+ */
8
33
  constructor() {
34
+ /**
35
+ * {@link IUserService.user}
36
+ */
37
+ this.user = defaultUser;
9
38
  /**
10
39
  * {@link IUserService.token}
11
40
  */
12
- this.token = signal('');
41
+ this.token = signal(stringEmpty);
42
+ /**
43
+ * {@link HttpService}
44
+ */
45
+ this._httpService = inject(HttpService);
46
+ /**
47
+ * PATCH user data api url
48
+ */
49
+ this._patchUserDataAPIUrl = stringEmpty;
50
+ /**
51
+ * GET user data api url
52
+ */
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 iif(() => httpRequest.url === stringEmpty, of(() => (this.user = { ...this.user, ...user })), updateUserData$).pipe(() => this.syncUserData$());
74
+ }
75
+ /**
76
+ * {@link IUserService.getUserData$}
77
+ */
78
+ getUserData$() {
79
+ const httpRequest = {
80
+ url: this._getUserDataAPIUrl,
81
+ };
82
+ const getUserData$ = this._httpService.get(httpRequest);
83
+ return iif(() => httpRequest.url === stringEmpty, of(this.user), getUserData$);
84
+ }
85
+ /**
86
+ * {@link IUserService.syncUserData$}
87
+ */
88
+ syncUserData$() {
89
+ return this.getUserData$().pipe(switchMap((user) => {
90
+ this.user = user;
91
+ return observableEmpty$;
92
+ }));
13
93
  }
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' }); }
94
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
95
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserService, providedIn: 'root' }); }
16
96
  }
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: UserService, decorators: [{
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: UserService, decorators: [{
18
98
  type: Injectable,
19
99
  args: [{
20
100
  providedIn: 'root',
21
101
  }]
22
- }] });
102
+ }], ctorParameters: () => [] });
23
103
 
24
104
  /*
25
105
  * 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","import { LANGUAGES } from '@albi_scando/as-language-lib/lib/enums/languages.enum';\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\nexport const DEFAULT_LANGUAGE: LANGUAGES = LANGUAGES.EnglishLanguageCode;\r\n\r\nexport const defaultUser: User = {\r\n username: DEFAULT_USERNAME,\r\n level: DEFAULT_LEVEL as USER_LEVELS,\r\n language: DEFAULT_LANGUAGE,\r\n};\r\n","import { Injectable, WritableSignal, inject, signal } from '@angular/core';\r\nimport { Observable, iif, 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\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 IUserService.token}\r\n */\r\n public token: WritableSignal<string> = signal(stringEmpty);\r\n\r\n /**\r\n * {@link HttpService}\r\n */\r\n private _httpService: HttpService = inject(HttpService);\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 iif(\r\n () => httpRequest.url === stringEmpty,\r\n of(() => (this.user = { ...this.user, ...user })),\r\n updateUserData$\r\n ).pipe(() => this.syncUserData$());\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 iif(\r\n () => httpRequest.url === stringEmpty,\r\n of(this.user),\r\n getUserData$\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 return observableEmpty$;\r\n })\r\n );\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,7 @@
1
+ import { LANGUAGES } from '@albi_scando/as-language-lib/lib/enums/languages.enum';
2
+ import { USER_LEVELS } from '../enums/user-levels.enum';
3
+ import { User } from '../interfaces/user.interface';
4
+ export declare const DEFAULT_USERNAME: string;
5
+ export declare const DEFAULT_LEVEL: USER_LEVELS;
6
+ export declare const DEFAULT_LANGUAGE: LANGUAGES;
7
+ 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,7 @@
1
+ import { LANGUAGES } from '@albi_scando/as-language-lib/lib/enums/languages.enum';
2
+ import { USER_LEVELS } from '../enums/user-levels.enum';
3
+ export interface User {
4
+ username: string;
5
+ level: USER_LEVELS;
6
+ language: LANGUAGES;
7
+ }
@@ -1,14 +1,55 @@
1
1
  import { WritableSignal } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { User } from '../../interfaces/user.interface';
2
4
  import { IUserService } from './user.service.interface';
5
+ import { IUserLibSetup } from '../../interfaces/setup.interface';
3
6
  import * as i0 from "@angular/core";
4
7
  /**
5
8
  *
6
9
  */
7
10
  export declare class UserService implements IUserService {
11
+ /**
12
+ * {@link IUserService.user}
13
+ */
14
+ user: User;
8
15
  /**
9
16
  * {@link IUserService.token}
10
17
  */
11
18
  token: WritableSignal<string>;
19
+ /**
20
+ * {@link HttpService}
21
+ */
22
+ private _httpService;
23
+ /**
24
+ * PATCH user data api url
25
+ */
26
+ private _patchUserDataAPIUrl;
27
+ /**
28
+ * GET user data api url
29
+ */
30
+ private _getUserDataAPIUrl;
31
+ /**
32
+ * Constructor
33
+ * @constructor
34
+ * @ignore
35
+ */
36
+ constructor();
37
+ /**
38
+ * {@link IUserService.setup$}
39
+ */
40
+ setup$(setup: Partial<IUserLibSetup>): Observable<void>;
41
+ /**
42
+ * {@link IUserService.patchUserData$}
43
+ */
44
+ patchUserData$(user: Partial<User>): Observable<void>;
45
+ /**
46
+ * {@link IUserService.getUserData$}
47
+ */
48
+ getUserData$(): Observable<User>;
49
+ /**
50
+ * {@link IUserService.syncUserData$}
51
+ */
52
+ syncUserData$(): Observable<void>;
12
53
  static ɵfac: i0.ɵɵFactoryDeclaration<UserService, never>;
13
54
  static ɵprov: i0.ɵɵInjectableDeclaration<UserService>;
14
55
  }
@@ -1,7 +1,37 @@
1
1
  import { WritableSignal } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { User } from '../../interfaces/user.interface';
4
+ import { IUserLibSetup } from '../../interfaces/setup.interface';
2
5
  export interface IUserService {
6
+ /**
7
+ * User object
8
+ */
9
+ user: User;
3
10
  /**
4
11
  * Token signal
5
12
  */
6
13
  token: WritableSignal<string>;
14
+ /**
15
+ * Set service configuration
16
+ * @param {Partial<IUserLibSetup>} setup configuration object
17
+ * @returns {Observable<void>}
18
+ */
19
+ setup$(setup: Partial<IUserLibSetup>): Observable<void>;
20
+ /**
21
+ * Update user object with provided data
22
+ * @param {Partial<User>} user partial user info to modify
23
+ * @returns {Observable<void>}
24
+ */
25
+ patchUserData$(user: Partial<User>): Observable<void>;
26
+ /**
27
+ * Get user data
28
+ * @returns {Observable<User>} user data
29
+ */
30
+ getUserData$(): Observable<User>;
31
+ /**
32
+ * If user data reside on a db, fetch it and use it to synchronize service user object.
33
+ * If no db is available, set current user equal to itself.
34
+ * @returns {Observable<void>}
35
+ */
36
+ syncUserData$(): Observable<void>;
7
37
  }
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-rc2",
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;;;;"}