Initial Commit ...
This commit is contained in:
@@ -0,0 +1,16 @@
|
|||||||
|
# Editor configuration, see https://editorconfig.org
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.ts]
|
||||||
|
quote_type = single
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
max_line_length = off
|
||||||
|
trim_trailing_whitespace = false
|
||||||
+49
@@ -0,0 +1,49 @@
|
|||||||
|
# See http://help.github.com/ignore-files/ for more about ignoring files.
|
||||||
|
|
||||||
|
# compiled output
|
||||||
|
/dist
|
||||||
|
/tmp
|
||||||
|
/out-tsc
|
||||||
|
# Only exists if Bazel was run
|
||||||
|
/bazel-out
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
/node_modules
|
||||||
|
|
||||||
|
# profiling files
|
||||||
|
chrome-profiler-events*.json
|
||||||
|
|
||||||
|
# IDEs and editors
|
||||||
|
/.idea
|
||||||
|
.project
|
||||||
|
.classpath
|
||||||
|
.c9/
|
||||||
|
*.launch
|
||||||
|
.settings/
|
||||||
|
*.sublime-workspace
|
||||||
|
|
||||||
|
# IDE - VSCode
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/settings.json
|
||||||
|
!.vscode/tasks.json
|
||||||
|
!.vscode/launch.json
|
||||||
|
!.vscode/extensions.json
|
||||||
|
.history/*
|
||||||
|
|
||||||
|
# misc
|
||||||
|
/.sass-cache
|
||||||
|
/connect.lock
|
||||||
|
/coverage
|
||||||
|
/libpeerconnection.log
|
||||||
|
npm-debug.log
|
||||||
|
yarn-error.log
|
||||||
|
testem.log
|
||||||
|
/typings
|
||||||
|
|
||||||
|
# System Files
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
#
|
||||||
|
documentation
|
||||||
|
package-lock.json
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# XSaherElmApiSDK
|
||||||
|
|
||||||
|
this is a library which provides all access to Api.
|
||||||
|
|
||||||
|
## Maintainer
|
||||||
|
|
||||||
|
Hadi Khazaee asl
|
||||||
|
|
||||||
|
[https://www.saherelm.ir](https://www.saherelm.ir)
|
||||||
|
|
||||||
|
[hadi_khazaee_asl@yahoo.com](mailto:hadi_khazaee_asl@yahoo.com)
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
|
||||||
|
"cli": {
|
||||||
|
"analytics": false
|
||||||
|
},
|
||||||
|
"version": 1,
|
||||||
|
"newProjectRoot": "projects",
|
||||||
|
"projects": {
|
||||||
|
"x-saherelm-api-sdk": {
|
||||||
|
"projectType": "library",
|
||||||
|
"root": "projects/x-saherelm-api-sdk",
|
||||||
|
"sourceRoot": "projects/x-saherelm-api-sdk/src",
|
||||||
|
"prefix": "lib",
|
||||||
|
"architect": {
|
||||||
|
"build": {
|
||||||
|
"builder": "@angular-devkit/build-angular:ng-packagr",
|
||||||
|
"options": {
|
||||||
|
"project": "projects/x-saherelm-api-sdk/ng-package.json"
|
||||||
|
},
|
||||||
|
"configurations": {
|
||||||
|
"production": {
|
||||||
|
"tsConfig": "projects/x-saherelm-api-sdk/tsconfig.lib.prod.json"
|
||||||
|
},
|
||||||
|
"development": {
|
||||||
|
"tsConfig": "projects/x-saherelm-api-sdk/tsconfig.lib.json"
|
||||||
|
},
|
||||||
|
"ivy": {
|
||||||
|
"tsConfig": "projects/x-saherelm-api-sdk/tsconfig.lib.ivy.json"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"defaultConfiguration": "production"
|
||||||
|
},
|
||||||
|
"test": {
|
||||||
|
"builder": "@angular-devkit/build-angular:karma",
|
||||||
|
"options": {
|
||||||
|
"main": "projects/x-saherelm-api-sdk/src/test.ts",
|
||||||
|
"tsConfig": "projects/x-saherelm-api-sdk/tsconfig.spec.json",
|
||||||
|
"karmaConfig": "projects/x-saherelm-api-sdk/karma.conf.js"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"defaultProject": "x-saherelm-api-sdk"
|
||||||
|
}
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
{
|
||||||
|
"name": "x-saherelm-api-sdkholder",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"scripts": {
|
||||||
|
"ng": "ng",
|
||||||
|
"start": "ng serve",
|
||||||
|
"build": "ng build",
|
||||||
|
"refreshModule": "npm run cleanModule && npm i",
|
||||||
|
"watch": "ng build --watch --configuration development",
|
||||||
|
"build:ivy": "ng build x-saherelm-api-sdk --configuration=ivy",
|
||||||
|
"publishModule": "npm run buildModule && npm run packModule",
|
||||||
|
"buildModule": "npm run preBuildModule && ng build x-saherelm-api-sdk",
|
||||||
|
"serveDocs": "compodoc -p projects/x-saherelm-api-sdk/tsconfig.lib.json --theme material -s",
|
||||||
|
"packModule": "cd dist/x-saherelm-api-sdk && npm pack && shx mv *.tgz ../../../../Documents/pack",
|
||||||
|
"unpublishModuleFromRegistry": "npm unpublish --force x-saherelm-api-sdk --registry https://npm.saherelmhub.ir",
|
||||||
|
"publishModuleToRegistry": "npm publish ../../Documents/pack/x-saherelm-api-sdk-0.0.1.tgz --registry https://npm.saherelmhub.ir",
|
||||||
|
"rePublishModuleToRegistry": "npm run publishModule && npm run unpublishModuleFromRegistry && npm run publishModuleToRegistry",
|
||||||
|
"preBuildModule": "shx --silent rm -rf dist && shx --silent rm ../../Documents/pack/x-saherelm-api-sdk*.tgz || shx true && npm run prepareDependenciesFromRegistry",
|
||||||
|
"cleanModule": "shx true --silent rm -rf dist && shx true --silent rm ./package-lock.json && shx true --silent rm -rf node_modules && npm i --save-dev shx@0.3.2",
|
||||||
|
"prepareDependenciesFromRegistry": "npm i --force -D --registry https://npm.saherelmhub.ir x-framework-core x-framework-services x-framework-identity-sdk x-framework-push-service",
|
||||||
|
"generateDocs": "compodoc -p projects/x-saherelm-api-sdk/tsconfig.lib.json --theme material --hideGenerator --disableSourceCode --disableDomTree --disableTemplateTab --disableStyleTab --disablePrivate --disableLifeCycleHooks --disableRoutesGraph --disableCoverage --customFavicon ../../Documents/resources/favicon.png --customLogo ../../Documents/resources/favicon.png"
|
||||||
|
},
|
||||||
|
"private": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@angular/animations": "~12.0.4",
|
||||||
|
"@angular/common": "~12.0.4",
|
||||||
|
"@angular/compiler": "~12.0.4",
|
||||||
|
"@angular/core": "~12.0.4",
|
||||||
|
"@angular/forms": "~12.0.4",
|
||||||
|
"@angular/platform-browser": "~12.0.4",
|
||||||
|
"@angular/platform-browser-dynamic": "~12.0.4",
|
||||||
|
"@angular/router": "~12.0.4",
|
||||||
|
"rxjs": "~6.6.0",
|
||||||
|
"tslib": "^2.1.0",
|
||||||
|
"zone.js": "~0.11.4"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@angular-devkit/build-angular": "~12.0.5",
|
||||||
|
"@angular/cdk": "^12.1.2",
|
||||||
|
"@angular/cli": "~12.0.4",
|
||||||
|
"@angular/compiler-cli": "~12.0.4",
|
||||||
|
"@angular/material": "^12.1.2",
|
||||||
|
"@angular/material-moment-adapter": "^12.1.2",
|
||||||
|
"@compodoc/compodoc": "^1.1.14",
|
||||||
|
"@ionic/angular": "^5.6.11",
|
||||||
|
"@microsoft/signalr": "^6.0.5",
|
||||||
|
"@microsoft/signalr-protocol-msgpack": "^7.0.2",
|
||||||
|
"@types/crypto-js": "^4.0.2",
|
||||||
|
"@types/howler": "^2.2.3",
|
||||||
|
"@types/jasmine": "~3.6.0",
|
||||||
|
"@types/node": "^12.11.1",
|
||||||
|
"@types/uuid": "^8.3.1",
|
||||||
|
"bignumber.js": "^9.0.2",
|
||||||
|
"crypto-js": "^4.0.0",
|
||||||
|
"howler": "^2.2.3",
|
||||||
|
"ionicons": "^5.5.2",
|
||||||
|
"jalali-moment": "^3.3.10",
|
||||||
|
"jasmine-core": "~3.7.0",
|
||||||
|
"karma": "~6.3.0",
|
||||||
|
"karma-chrome-launcher": "~3.1.0",
|
||||||
|
"karma-coverage": "~2.0.3",
|
||||||
|
"karma-jasmine": "~4.0.0",
|
||||||
|
"karma-jasmine-html-reporter": "^1.5.0",
|
||||||
|
"libphonenumber-js": "^1.9.22",
|
||||||
|
"md5-typescript": "^1.0.5",
|
||||||
|
"moment": "^2.29.1",
|
||||||
|
"ng-packagr": "^12.0.0",
|
||||||
|
"ngx-device-detector": "^2.1.1",
|
||||||
|
"shx": "^0.3.3",
|
||||||
|
"typescript": "~4.2.3",
|
||||||
|
"uuid": "^8.3.2",
|
||||||
|
"x-framework-core": "0.0.1",
|
||||||
|
"x-framework-identity-sdk": "0.0.1",
|
||||||
|
"x-framework-push-service": "0.0.1",
|
||||||
|
"x-framework-services": "0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# XSaherElmApiSDK
|
||||||
|
|
||||||
|
this is a library which provides all access to Api.
|
||||||
|
|
||||||
|
## Maintainer
|
||||||
|
|
||||||
|
Hadi Khazaee asl
|
||||||
|
|
||||||
|
[https://www.saherelm.ir](https://www.saherelm.ir)
|
||||||
|
|
||||||
|
[hadi_khazaee_asl@yahoo.com](mailto:hadi_khazaee_asl@yahoo.com)
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
// Karma configuration file, see link for more information
|
||||||
|
// https://karma-runner.github.io/1.0/config/configuration-file.html
|
||||||
|
|
||||||
|
module.exports = function (config) {
|
||||||
|
config.set({
|
||||||
|
basePath: '',
|
||||||
|
frameworks: ['jasmine', '@angular-devkit/build-angular'],
|
||||||
|
plugins: [
|
||||||
|
require('karma-jasmine'),
|
||||||
|
require('karma-chrome-launcher'),
|
||||||
|
require('karma-jasmine-html-reporter'),
|
||||||
|
require('karma-coverage'),
|
||||||
|
require('@angular-devkit/build-angular/plugins/karma')
|
||||||
|
],
|
||||||
|
client: {
|
||||||
|
jasmine: {
|
||||||
|
// you can add configuration options for Jasmine here
|
||||||
|
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
|
||||||
|
// for example, you can disable the random execution with `random: false`
|
||||||
|
// or set a specific seed with `seed: 4321`
|
||||||
|
},
|
||||||
|
clearContext: false // leave Jasmine Spec Runner output visible in browser
|
||||||
|
},
|
||||||
|
jasmineHtmlReporter: {
|
||||||
|
suppressAll: true // removes the duplicated traces
|
||||||
|
},
|
||||||
|
coverageReporter: {
|
||||||
|
dir: require('path').join(__dirname, '../../coverage/x-mabsut-api-sdk'),
|
||||||
|
subdir: '.',
|
||||||
|
reporters: [
|
||||||
|
{ type: 'html' },
|
||||||
|
{ type: 'text-summary' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
reporters: ['progress', 'kjhtml'],
|
||||||
|
port: 9876,
|
||||||
|
colors: true,
|
||||||
|
logLevel: config.LOG_INFO,
|
||||||
|
autoWatch: true,
|
||||||
|
browsers: ['Chrome'],
|
||||||
|
singleRun: false,
|
||||||
|
restartOnFileChange: true
|
||||||
|
});
|
||||||
|
};
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
|
||||||
|
"dest": "../../dist/x-saherelm-api-sdk",
|
||||||
|
"lib": {
|
||||||
|
"entryFile": "src/public-api.ts"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"name": "x-saherelm-api-sdk",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"description": "provide API SDK of xSaherElm API",
|
||||||
|
"keywords": [
|
||||||
|
"x-saherelm",
|
||||||
|
"x-saherelm-api-sdk"
|
||||||
|
],
|
||||||
|
"homepage": "https://saherelm.ir",
|
||||||
|
"author": {
|
||||||
|
"name": "Hadi Khazaee Asl",
|
||||||
|
"email": "hadi_khazaee_asl@yahoo.com",
|
||||||
|
"url": "https://saherelm.ir"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@angular/common": "^12.0.4",
|
||||||
|
"@angular/core": "^12.0.4"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"tslib": "^2.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,472 @@
|
|||||||
|
import { Observable } from 'rxjs';
|
||||||
|
import { XBaseRangeRequestDto } from 'x-framework-core';
|
||||||
|
import { HttpEvent, HttpResponse } from '@angular/common/http';
|
||||||
|
import { XQueryDto, XQueryResultDto } from 'x-framework-identity-sdk';
|
||||||
|
|
||||||
|
export interface IXEntityActions<TModel, TKey> {
|
||||||
|
//
|
||||||
|
//#region Repository Implementation ...
|
||||||
|
//
|
||||||
|
//#region Retrieve ...
|
||||||
|
//
|
||||||
|
//#region Get ...
|
||||||
|
/**
|
||||||
|
* Retrieve Specified Item based on Id
|
||||||
|
*
|
||||||
|
* @param id the Object ID ...
|
||||||
|
* @param containsDetail specify retrieve full details
|
||||||
|
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
||||||
|
* @param reportProgress flag to report request and response progress.
|
||||||
|
*/
|
||||||
|
callGet(
|
||||||
|
id: TKey,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<TModel>;
|
||||||
|
callGet(
|
||||||
|
id: TKey,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<TModel>>;
|
||||||
|
callGet(
|
||||||
|
id: TKey,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<TModel>>;
|
||||||
|
callGet(
|
||||||
|
id: TKey,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: any,
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<any>;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region GetAll ...
|
||||||
|
/**
|
||||||
|
* Retrieve all Items
|
||||||
|
*
|
||||||
|
* @param containsDetail specify retrieve full details
|
||||||
|
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
||||||
|
* @param reportProgress flag to report request and response progress.
|
||||||
|
*/
|
||||||
|
callGetAll(
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<Array<TModel>>;
|
||||||
|
callGetAll(
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<Array<TModel>>>;
|
||||||
|
callGetAll(
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<Array<TModel>>>;
|
||||||
|
callGetAll(
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: any,
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<any>;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region FindOne ...
|
||||||
|
/**
|
||||||
|
* Fine first Item which matched to the query string
|
||||||
|
*
|
||||||
|
* @param query search pattern
|
||||||
|
* @param containsDetail specify retrieve full details
|
||||||
|
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
||||||
|
* @param reportProgress flag to report request and response progress.
|
||||||
|
*/
|
||||||
|
callFindOne(
|
||||||
|
query: string,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<TModel>;
|
||||||
|
callFindOne(
|
||||||
|
query: string,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<TModel>>;
|
||||||
|
callFindOne(
|
||||||
|
query: string,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<TModel>>;
|
||||||
|
callFindOne(
|
||||||
|
query: string,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: any,
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<any>;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region FindMany ...
|
||||||
|
/**
|
||||||
|
* Find a Collection of items which matched to Specified Query string
|
||||||
|
*
|
||||||
|
* @param query search pattern
|
||||||
|
* @param containsDetail specify retrieve full details
|
||||||
|
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
||||||
|
* @param reportProgress flag to report request and response progress.
|
||||||
|
*/
|
||||||
|
callFindMany(
|
||||||
|
query: string,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<Array<TModel>>;
|
||||||
|
callFindMany(
|
||||||
|
query: string,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<Array<TModel>>>;
|
||||||
|
callFindMany(
|
||||||
|
query: string,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<Array<TModel>>>;
|
||||||
|
callFindMany(
|
||||||
|
query: string,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: any,
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<any>;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Query ...
|
||||||
|
/**
|
||||||
|
* Retrieve Items based on XQuery model
|
||||||
|
*
|
||||||
|
* @param query specify data projection attributes
|
||||||
|
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
||||||
|
* @param reportProgress flag to report request and response progress.
|
||||||
|
*/
|
||||||
|
callQuery(
|
||||||
|
query: XQueryDto,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<XQueryResultDto<TModel>>;
|
||||||
|
callQuery(
|
||||||
|
query: XQueryDto,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<XQueryResultDto<TModel>>>;
|
||||||
|
callQuery(
|
||||||
|
query: XQueryDto,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<XQueryResultDto<TModel>>>;
|
||||||
|
callQuery(
|
||||||
|
query: XQueryDto,
|
||||||
|
observe?: any,
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<any>;
|
||||||
|
//#endregion
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Add ...
|
||||||
|
//
|
||||||
|
//#region Add ...
|
||||||
|
/**
|
||||||
|
* Add New Item
|
||||||
|
*
|
||||||
|
* @param body the new Content which requires to add
|
||||||
|
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
||||||
|
* @param reportProgress flag to report request and response progress.
|
||||||
|
*/
|
||||||
|
callAdd(
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<TModel>;
|
||||||
|
callAdd(
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<TModel>>;
|
||||||
|
callAdd(
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<TModel>>;
|
||||||
|
callAdd(
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: any,
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<any>;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region AddOrUpdate ...
|
||||||
|
/**
|
||||||
|
* Add New Item or Update Exists Item
|
||||||
|
*
|
||||||
|
* @param body hte instance of Entity
|
||||||
|
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
||||||
|
* @param reportProgress flag to report request and response progress.
|
||||||
|
*/
|
||||||
|
callAddOrUpdate(
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<TModel>;
|
||||||
|
callAddOrUpdate(
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<TModel>>;
|
||||||
|
callAddOrUpdate(
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<TModel>>;
|
||||||
|
callAddOrUpdate(
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: any,
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<any>;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region AddMany ...
|
||||||
|
/**
|
||||||
|
* Add a Collection of items
|
||||||
|
*
|
||||||
|
* @param body an instance of XBaseRangeRequest which contains a collection of items
|
||||||
|
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
||||||
|
* @param reportProgress flag to report request and response progress.
|
||||||
|
*/
|
||||||
|
callAddMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<void>;
|
||||||
|
callAddMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<void>>;
|
||||||
|
callAddMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<void>>;
|
||||||
|
callAddMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: any,
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<any>;
|
||||||
|
//#endregion
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Update ...
|
||||||
|
//
|
||||||
|
//#region Update ...
|
||||||
|
/**
|
||||||
|
* Update Specified Item
|
||||||
|
*
|
||||||
|
* @param body the instance with all changes
|
||||||
|
* @param id the Id of Object which are going to replace or update with this
|
||||||
|
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
||||||
|
* @param reportProgress flag to report request and response progress.
|
||||||
|
*/
|
||||||
|
callUpdate(
|
||||||
|
id: TKey,
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<TModel>;
|
||||||
|
callUpdate(
|
||||||
|
id: TKey,
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<TModel>>;
|
||||||
|
callUpdate(
|
||||||
|
id: TKey,
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<TModel>>;
|
||||||
|
callUpdate(
|
||||||
|
id: TKey,
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: any,
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<any>;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region UpdateMany ...
|
||||||
|
/**
|
||||||
|
* Update a Collection of Items
|
||||||
|
*
|
||||||
|
* @param body an instance of XBaseRangeRequestDto
|
||||||
|
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
||||||
|
* @param reportProgress flag to report request and response progress.
|
||||||
|
*/
|
||||||
|
callUpdateMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<boolean>;
|
||||||
|
callUpdateMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<boolean>>;
|
||||||
|
callUpdateMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<boolean>>;
|
||||||
|
callUpdateMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: any,
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<any>;
|
||||||
|
//#endregion
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Exists ...
|
||||||
|
/**
|
||||||
|
* Check an items is Exists or not
|
||||||
|
*
|
||||||
|
* @param id the id of item
|
||||||
|
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
||||||
|
* @param reportProgress flag to report request and response progress.
|
||||||
|
*/
|
||||||
|
callIsExists(
|
||||||
|
id: TKey,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<boolean>;
|
||||||
|
callIsExists(
|
||||||
|
id: TKey,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<boolean>>;
|
||||||
|
callIsExists(
|
||||||
|
id: TKey,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<boolean>>;
|
||||||
|
callIsExists(
|
||||||
|
id: TKey,
|
||||||
|
observe?: any,
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<any>;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Remove ...
|
||||||
|
//
|
||||||
|
//#region Remove ...
|
||||||
|
/**
|
||||||
|
* Remove Specified item by its ID
|
||||||
|
*
|
||||||
|
* @param id pointer to specific instance
|
||||||
|
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
||||||
|
* @param reportProgress flag to report request and response progress.
|
||||||
|
*/
|
||||||
|
callRemove(
|
||||||
|
id: TKey,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<TModel>;
|
||||||
|
callRemove(
|
||||||
|
id: TKey,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<TModel>>;
|
||||||
|
callRemove(
|
||||||
|
id: TKey,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<TModel>>;
|
||||||
|
callRemove(
|
||||||
|
id: TKey,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: any,
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<any>;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region RemoveMany ...
|
||||||
|
/**
|
||||||
|
* Remove a Collection of Items base on RangeRequest
|
||||||
|
*
|
||||||
|
* @param body an instance of XBaseRangeRequestDto
|
||||||
|
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
||||||
|
* @param reportProgress flag to report request and response progress.
|
||||||
|
*/
|
||||||
|
callRemoveMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<void>;
|
||||||
|
callRemoveMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<void>>;
|
||||||
|
callRemoveMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<void>>;
|
||||||
|
callRemoveMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: any,
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<any>;
|
||||||
|
//#endregion
|
||||||
|
//#endregion
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,796 @@
|
|||||||
|
import {
|
||||||
|
XQueryDto,
|
||||||
|
XQueryResultDto,
|
||||||
|
XBaseApiService,
|
||||||
|
} from 'x-framework-identity-sdk';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
import {
|
||||||
|
XBaseEndPointAction,
|
||||||
|
XBaseEndPointParam,
|
||||||
|
} from '../typings/x-endpoint.typings';
|
||||||
|
import { IXEntityActions } from './i-x-entity-actions.interface';
|
||||||
|
import { HttpResponse, HttpEvent, HttpParams } from '@angular/common/http';
|
||||||
|
import { applyConnectionIdToHeader } from '../typings/x-push-provider.typings';
|
||||||
|
import { toXString, XBaseRangeRequestDto, XValidators } from 'x-framework-core';
|
||||||
|
|
||||||
|
export abstract class XBaseEntityService<TModel, TKey>
|
||||||
|
extends XBaseApiService
|
||||||
|
implements IXEntityActions<TModel, TKey>
|
||||||
|
{
|
||||||
|
//
|
||||||
|
//#region Repository Implementation ...
|
||||||
|
//
|
||||||
|
//#region Retrieve ...
|
||||||
|
//
|
||||||
|
//#region Get ...
|
||||||
|
public callGet(
|
||||||
|
id: TKey,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<TModel>;
|
||||||
|
public callGet(
|
||||||
|
id: TKey,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<TModel>>;
|
||||||
|
public callGet(
|
||||||
|
id: TKey,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<TModel>>;
|
||||||
|
public callGet(
|
||||||
|
id: TKey,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotNull(id);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Instantiiate Headers from Default Headers ...
|
||||||
|
let headers = this.defaultHeaders;
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint
|
||||||
|
const endPointPath = this.getActionRoute<
|
||||||
|
XBaseEndPointAction,
|
||||||
|
XBaseEndPointParam
|
||||||
|
>(XBaseEndPointAction.Get);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Preparing HttpParams ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
if (!!containsDetail) {
|
||||||
|
params = this.addContainsDetailQueryParam(params, containsDetail);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.get<TModel>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region GetAll ...
|
||||||
|
public callGetAll(
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<TModel[]>;
|
||||||
|
public callGetAll(
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<TModel[]>>;
|
||||||
|
public callGetAll(
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<TModel[]>>;
|
||||||
|
public callGetAll(
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Instantiiate Headers from Default Headers ...
|
||||||
|
let headers = this.defaultHeaders;
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint
|
||||||
|
const endPointPath = this.getActionRoute<
|
||||||
|
XBaseEndPointAction,
|
||||||
|
XBaseEndPointParam
|
||||||
|
>(XBaseEndPointAction.GetAll);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Preparing HttpParams ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
if (!!containsDetail) {
|
||||||
|
params = this.addContainsDetailQueryParam(params, containsDetail);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.get<Array<TModel>>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region FindOne ...
|
||||||
|
public callFindOne(
|
||||||
|
query: string,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<TModel>;
|
||||||
|
public callFindOne(
|
||||||
|
query: string,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<TModel>>;
|
||||||
|
public callFindOne(
|
||||||
|
query: string,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<TModel>>;
|
||||||
|
public callFindOne(
|
||||||
|
query: string,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotNull(query);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Instantiiate Headers from Default Headers ...
|
||||||
|
let headers = this.defaultHeaders;
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint
|
||||||
|
const endPointPath = this.getActionRoute<
|
||||||
|
XBaseEndPointAction,
|
||||||
|
XBaseEndPointParam
|
||||||
|
>(XBaseEndPointAction.FindOne, {
|
||||||
|
key: XBaseEndPointParam.XQuery,
|
||||||
|
value: query,
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// Preparing HttpParams ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
if (!!containsDetail) {
|
||||||
|
params = this.addContainsDetailQueryParam(params, containsDetail);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.get<TModel>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region FindMany ...
|
||||||
|
public callFindMany(
|
||||||
|
query: string,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<TModel[]>;
|
||||||
|
public callFindMany(
|
||||||
|
query: string,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<TModel[]>>;
|
||||||
|
public callFindMany(
|
||||||
|
query: string,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<TModel[]>>;
|
||||||
|
public callFindMany(
|
||||||
|
query: string,
|
||||||
|
containsDetail?: boolean,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Instantiiate Headers from Default Headers ...
|
||||||
|
let headers = this.defaultHeaders;
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint
|
||||||
|
const endPointPath = this.getActionRoute<
|
||||||
|
XBaseEndPointAction,
|
||||||
|
XBaseEndPointParam
|
||||||
|
>(XBaseEndPointAction.FindMany, {
|
||||||
|
key: XBaseEndPointParam.XQuery,
|
||||||
|
value: query,
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// Preparing HttpParams ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
if (!!containsDetail) {
|
||||||
|
params = this.addContainsDetailQueryParam(params, containsDetail);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.get<Array<TModel>>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Query ...
|
||||||
|
public callQuery(
|
||||||
|
query: XQueryDto,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<XQueryResultDto<TModel>>;
|
||||||
|
public callQuery(
|
||||||
|
query: XQueryDto,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<XQueryResultDto<TModel>>>;
|
||||||
|
public callQuery(
|
||||||
|
query: XQueryDto,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<XQueryResultDto<TModel>>>;
|
||||||
|
public callQuery(
|
||||||
|
query: XQueryDto,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotNull(query);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Instantiiate Headers from Default Headers ...
|
||||||
|
let headers = this.defaultHeaders;
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint
|
||||||
|
const endPointPath = this.getActionRoute<
|
||||||
|
XBaseEndPointAction,
|
||||||
|
XBaseEndPointParam
|
||||||
|
>(XBaseEndPointAction.Query);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Preparing HttpParams ...
|
||||||
|
const params: HttpParams = this.generateXQueryHttpParams(query);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.get<XQueryResultDto<TModel>>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Add ...
|
||||||
|
//
|
||||||
|
//#region Add ...
|
||||||
|
public callAdd(
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<TModel>;
|
||||||
|
public callAdd(
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<TModel>>;
|
||||||
|
public callAdd(
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<TModel>>;
|
||||||
|
public callAdd(
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotNull(body);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Instantiiate Headers from Default Headers ...
|
||||||
|
let headers = this.defaultHeaders;
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
headers = applyConnectionIdToHeader(connectionId, headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint
|
||||||
|
const endPointPath = this.getActionRoute<
|
||||||
|
XBaseEndPointAction,
|
||||||
|
XBaseEndPointParam
|
||||||
|
>(XBaseEndPointAction.Add);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.post<TModel>(endPointPath, body, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region AddOrUpdate ...
|
||||||
|
public callAddOrUpdate(
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<TModel>;
|
||||||
|
public callAddOrUpdate(
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<TModel>>;
|
||||||
|
public callAddOrUpdate(
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<TModel>>;
|
||||||
|
public callAddOrUpdate(
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotNull(body);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Instantiiate Headers from Default Headers ...
|
||||||
|
let headers = this.defaultHeaders;
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
headers = applyConnectionIdToHeader(connectionId, headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint
|
||||||
|
const endPointPath = this.getActionRoute<
|
||||||
|
XBaseEndPointAction,
|
||||||
|
XBaseEndPointParam
|
||||||
|
>(XBaseEndPointAction.AddOrUpdate);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.post<TModel>(endPointPath, body, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region AddMany ...
|
||||||
|
public callAddMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<void>;
|
||||||
|
public callAddMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<void>>;
|
||||||
|
public callAddMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<void>>;
|
||||||
|
public callAddMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotNull(body);
|
||||||
|
XValidators.validateHasChilds(body.items);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Instantiiate Headers from Default Headers ...
|
||||||
|
let headers = this.defaultHeaders;
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
headers = applyConnectionIdToHeader(connectionId, headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint
|
||||||
|
const endPointPath = this.getActionRoute<
|
||||||
|
XBaseEndPointAction,
|
||||||
|
XBaseEndPointParam
|
||||||
|
>(XBaseEndPointAction.AddMany);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.post<void>(endPointPath, body, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Update ...
|
||||||
|
//
|
||||||
|
//#region Update ...
|
||||||
|
public callUpdate(
|
||||||
|
id: TKey,
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<TModel>;
|
||||||
|
public callUpdate(
|
||||||
|
id: TKey,
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<TModel>>;
|
||||||
|
public callUpdate(
|
||||||
|
id: TKey,
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<TModel>>;
|
||||||
|
public callUpdate(
|
||||||
|
id: TKey,
|
||||||
|
body: TModel,
|
||||||
|
connectionId?: string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotNull(id);
|
||||||
|
XValidators.validateNotNull(body);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Instantiiate Headers from Default Headers ...
|
||||||
|
let headers = this.defaultHeaders;
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
headers = applyConnectionIdToHeader(connectionId, headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint
|
||||||
|
const endPointPath = this.getActionRoute<
|
||||||
|
XBaseEndPointAction,
|
||||||
|
XBaseEndPointParam
|
||||||
|
>(XBaseEndPointAction.Update, {
|
||||||
|
key: XBaseEndPointParam.XId,
|
||||||
|
value: toXString(id),
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.put<TModel>(endPointPath, body, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region UpdateMany ...
|
||||||
|
public callUpdateMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<boolean>;
|
||||||
|
public callUpdateMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<boolean>>;
|
||||||
|
public callUpdateMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<boolean>>;
|
||||||
|
public callUpdateMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotNull(body);
|
||||||
|
XValidators.validateHasChilds(body.items);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Instantiiate Headers from Default Headers ...
|
||||||
|
let headers = this.defaultHeaders;
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
headers = applyConnectionIdToHeader(connectionId, headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint
|
||||||
|
const endPointPath = this.getActionRoute<
|
||||||
|
XBaseEndPointAction,
|
||||||
|
XBaseEndPointParam
|
||||||
|
>(XBaseEndPointAction.UpdateMany);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.post<boolean>(endPointPath, body, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Exists ...
|
||||||
|
public callIsExists(
|
||||||
|
id: TKey,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<boolean>;
|
||||||
|
public callIsExists(
|
||||||
|
id: TKey,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<boolean>>;
|
||||||
|
public callIsExists(
|
||||||
|
id: TKey,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<boolean>>;
|
||||||
|
public callIsExists(
|
||||||
|
id: TKey,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotNull(id);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Instantiiate Headers from Default Headers ...
|
||||||
|
let headers = this.defaultHeaders;
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint
|
||||||
|
const endPointPath = this.getActionRoute<
|
||||||
|
XBaseEndPointAction,
|
||||||
|
XBaseEndPointParam
|
||||||
|
>(XBaseEndPointAction.IsExists, {
|
||||||
|
key: XBaseEndPointParam.XId,
|
||||||
|
value: toXString(id),
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.get<boolean>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Remove ...
|
||||||
|
//
|
||||||
|
//#region Remove ...
|
||||||
|
public callRemove(
|
||||||
|
id: TKey,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<TModel>;
|
||||||
|
public callRemove(
|
||||||
|
id: TKey,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<TModel>>;
|
||||||
|
public callRemove(
|
||||||
|
id: TKey,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<TModel>>;
|
||||||
|
public callRemove(
|
||||||
|
id: TKey,
|
||||||
|
connectionId?: string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotNull(id);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Instantiiate Headers from Default Headers ...
|
||||||
|
let headers = this.defaultHeaders;
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
headers = applyConnectionIdToHeader(connectionId, headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint
|
||||||
|
const endPointPath = this.getActionRoute<
|
||||||
|
XBaseEndPointAction,
|
||||||
|
XBaseEndPointParam
|
||||||
|
>(XBaseEndPointAction.Remove, {
|
||||||
|
key: XBaseEndPointParam.XId,
|
||||||
|
value: toXString(id),
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.delete<TModel>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region RemoveMany ...
|
||||||
|
public callRemoveMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<void>;
|
||||||
|
public callRemoveMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<void>>;
|
||||||
|
public callRemoveMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<void>>;
|
||||||
|
public callRemoveMany(
|
||||||
|
body: XBaseRangeRequestDto<TModel>,
|
||||||
|
connectionId?: string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotNull(body);
|
||||||
|
XValidators.validateHasChilds(body.items);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Instantiiate Headers from Default Headers ...
|
||||||
|
let headers = this.defaultHeaders;
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
headers = applyConnectionIdToHeader(connectionId, headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint
|
||||||
|
const endPointPath = this.getActionRoute<
|
||||||
|
XBaseEndPointAction,
|
||||||
|
XBaseEndPointParam
|
||||||
|
>(XBaseEndPointAction.RemoveMany);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.post<void>(endPointPath, body, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
//#endregion
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
import {
|
||||||
|
Route,
|
||||||
|
CanLoad,
|
||||||
|
UrlTree,
|
||||||
|
UrlSegment,
|
||||||
|
CanActivate,
|
||||||
|
CanActivateChild,
|
||||||
|
RouterStateSnapshot,
|
||||||
|
ActivatedRouteSnapshot,
|
||||||
|
} from '@angular/router';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
import {
|
||||||
|
XAccountService,
|
||||||
|
XFrameworkIdentitySDKConfig,
|
||||||
|
X_FRAMEWORK_IDENTITY_SDK_CONFIG,
|
||||||
|
} from 'x-framework-identity-sdk';
|
||||||
|
import { filter, map, tap } from 'rxjs/operators';
|
||||||
|
import { Inject, Injectable } from '@angular/core';
|
||||||
|
import { XManagerService } from 'x-framework-services';
|
||||||
|
import { XAvailableRoles } from '../typings/x-role.typings';
|
||||||
|
import { checkIsInRoleByInfo, toRoleInfo } from '../tools/x-role.tools';
|
||||||
|
import { isNullOrUndefined, XExceptionIDs, XLoggable, XOneOrManyType } from 'x-framework-core';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export abstract class XBaseGuard
|
||||||
|
extends XLoggable
|
||||||
|
implements CanActivate, CanActivateChild, CanLoad
|
||||||
|
{
|
||||||
|
//
|
||||||
|
abstract roles: XOneOrManyType<XAvailableRoles>;
|
||||||
|
|
||||||
|
//
|
||||||
|
constructor(
|
||||||
|
private authService: XAccountService,
|
||||||
|
private managerService: XManagerService,
|
||||||
|
@Inject(X_FRAMEWORK_IDENTITY_SDK_CONFIG)
|
||||||
|
public config: XFrameworkIdentitySDKConfig
|
||||||
|
) {
|
||||||
|
super(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Actions ...
|
||||||
|
//
|
||||||
|
canActivate(
|
||||||
|
next: ActivatedRouteSnapshot,
|
||||||
|
state: RouterStateSnapshot
|
||||||
|
):
|
||||||
|
| Observable<boolean | UrlTree>
|
||||||
|
| Promise<boolean | UrlTree>
|
||||||
|
| boolean
|
||||||
|
| UrlTree {
|
||||||
|
return this.handleGuard();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
canActivateChild(
|
||||||
|
next: ActivatedRouteSnapshot,
|
||||||
|
state: RouterStateSnapshot
|
||||||
|
):
|
||||||
|
| Observable<boolean | UrlTree>
|
||||||
|
| Promise<boolean | UrlTree>
|
||||||
|
| boolean
|
||||||
|
| UrlTree {
|
||||||
|
return this.handleGuard();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
canLoad(
|
||||||
|
route: Route,
|
||||||
|
segments: UrlSegment[]
|
||||||
|
): Observable<boolean> | Promise<boolean> | boolean {
|
||||||
|
return this.handleGuard();
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Private Action ...
|
||||||
|
private handleGuard(): Observable<boolean> {
|
||||||
|
return this.authService.state$.pipe(
|
||||||
|
filter(
|
||||||
|
(state) =>
|
||||||
|
!isNullOrUndefined(state) && !!state.isLoggedIn && !!state.profile
|
||||||
|
),
|
||||||
|
map((state) => state.profile),
|
||||||
|
map((user) => toRoleInfo(user)),
|
||||||
|
map((roleInfo) => checkIsInRoleByInfo(this.roles, roleInfo)),
|
||||||
|
tap((isPassed) => {
|
||||||
|
//
|
||||||
|
if (!isPassed) {
|
||||||
|
this.handleGuardReject();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
private handleGuardReject(): void {
|
||||||
|
//
|
||||||
|
this.managerService.notificationService.presentErrorNotification({
|
||||||
|
exception: XExceptionIDs.NotAllowed,
|
||||||
|
dissmissable: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
this.managerService.navigateByPage(this.config.Pages.Login);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
import { XFrameworkCoreConfig } from 'x-framework-core';
|
||||||
|
import { XFrameworkServicesConfig } from 'x-framework-services';
|
||||||
|
import { XFrameworkIdentitySDKConfig } from 'x-framework-identity-sdk';
|
||||||
|
|
||||||
|
export type XSharedConfig = XFrameworkCoreConfig &
|
||||||
|
XFrameworkServicesConfig &
|
||||||
|
XFrameworkIdentitySDKConfig & { [key: string]: any };
|
||||||
|
|
||||||
|
// tslint:disable-next-line:no-empty-interface
|
||||||
|
export interface XSaherElmApiSDKConfig extends XSharedConfig {
|
||||||
|
//
|
||||||
|
// Push Service Configuration ...
|
||||||
|
pushMessageAction: string;
|
||||||
|
pushServiceRoute: string;
|
||||||
|
pushManagerReconnectDelay: number;
|
||||||
|
|
||||||
|
//
|
||||||
|
corsBypasserProxy: string;
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import { HttpClient } from '@angular/common/http';
|
||||||
|
import { Injectable, Inject } from '@angular/core';
|
||||||
|
import { XApiEndPoint } from '../typings/x-endpoint.typings';
|
||||||
|
import { X_SAHERELM_API_SDK_CONFIG } from '../tokens/x-injectable-tokens';
|
||||||
|
import { XSaherElmApiSDKConfig } from '../config/x-saherelm-api-sdk.config';
|
||||||
|
import { XApiConfiguration, XBaseApiService, X_API_CONFIG } from 'x-framework-identity-sdk';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XConfigurationsService extends XBaseApiService {
|
||||||
|
//
|
||||||
|
//#region Constructor ...
|
||||||
|
constructor(
|
||||||
|
protected httpClient: HttpClient,
|
||||||
|
@Inject(X_SAHERELM_API_SDK_CONFIG) config: XSaherElmApiSDKConfig,
|
||||||
|
@Inject(X_API_CONFIG) apiConfig: XApiConfiguration
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
super(
|
||||||
|
XApiEndPoint.Configurations,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
httpClient,
|
||||||
|
config,
|
||||||
|
apiConfig
|
||||||
|
);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,203 @@
|
|||||||
|
import {
|
||||||
|
XBaseDto,
|
||||||
|
hasChild,
|
||||||
|
XFileType,
|
||||||
|
typeGuard,
|
||||||
|
isSameObject,
|
||||||
|
isNullOrUndefined,
|
||||||
|
isNullOrEmptyString,
|
||||||
|
} from 'x-framework-core';
|
||||||
|
import {
|
||||||
|
XReferenceDto,
|
||||||
|
parseXReferences,
|
||||||
|
references2String,
|
||||||
|
} from '../../models/x-reference.dto';
|
||||||
|
import { XPersonDto } from '../../models/x-person.dto';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* a Model for Describing a File ...
|
||||||
|
*/
|
||||||
|
export interface XFileEntity extends XBaseDto {
|
||||||
|
id: string;
|
||||||
|
type: XFileType;
|
||||||
|
name: string;
|
||||||
|
thumb?: string;
|
||||||
|
path: string;
|
||||||
|
thumbPath?: string;
|
||||||
|
uploadedOn: Date;
|
||||||
|
fileName?: string;
|
||||||
|
ownerId: string;
|
||||||
|
references: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* a Model for Describing a File ...
|
||||||
|
*/
|
||||||
|
export interface XFileDto extends XBaseDto {
|
||||||
|
id: string;
|
||||||
|
type: XFileType;
|
||||||
|
name: string;
|
||||||
|
thumb?: string;
|
||||||
|
path: string;
|
||||||
|
thumbPath?: string;
|
||||||
|
uploadedOn: Date;
|
||||||
|
fileName?: string;
|
||||||
|
ownerId: string;
|
||||||
|
owner?: XPersonDto;
|
||||||
|
references: Array<XReferenceDto<string>>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default model ...
|
||||||
|
*/
|
||||||
|
export const defaultFileDto: XFileDto = {
|
||||||
|
id: '',
|
||||||
|
name: '',
|
||||||
|
path: '',
|
||||||
|
ownerId: '',
|
||||||
|
references: [],
|
||||||
|
type: undefined,
|
||||||
|
thumb: undefined,
|
||||||
|
owner: undefined,
|
||||||
|
fileName: undefined,
|
||||||
|
thumbPath: undefined,
|
||||||
|
uploadedOn: undefined,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Preparing Dto Field ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
*/
|
||||||
|
export function prepareFileDtoFields(model?: XFileDto) {
|
||||||
|
//
|
||||||
|
if (isNullOrUndefined(model)) {
|
||||||
|
//
|
||||||
|
model = {
|
||||||
|
...defaultFileDto,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
model = {
|
||||||
|
id: !isNullOrEmptyString(model.id) ? model.id : defaultFileDto.id,
|
||||||
|
name: !isNullOrEmptyString(model.name) ? model.name : defaultFileDto.name,
|
||||||
|
path: !isNullOrEmptyString(model.path) ? model.path : defaultFileDto.path,
|
||||||
|
ownerId: !isNullOrEmptyString(model.ownerId)
|
||||||
|
? model.ownerId
|
||||||
|
: defaultFileDto.ownerId,
|
||||||
|
references:
|
||||||
|
!isNullOrUndefined(model.references) && !hasChild(model.references)
|
||||||
|
? [...model.references]
|
||||||
|
: defaultFileDto.references,
|
||||||
|
type: !isNullOrUndefined(model.type) ? model.type : defaultFileDto.type,
|
||||||
|
thumb: !isNullOrEmptyString(model.thumb)
|
||||||
|
? model.thumb
|
||||||
|
: defaultFileDto.thumb,
|
||||||
|
owner: !isNullOrUndefined(model.owner)
|
||||||
|
? { ...model.owner }
|
||||||
|
: defaultFileDto.owner,
|
||||||
|
fileName: !isNullOrEmptyString(model.fileName)
|
||||||
|
? model.fileName
|
||||||
|
: defaultFileDto.fileName,
|
||||||
|
thumbPath: !isNullOrEmptyString(model.thumbPath)
|
||||||
|
? model.thumbPath
|
||||||
|
: defaultFileDto.thumbPath,
|
||||||
|
uploadedOn: !isNullOrUndefined(model.uploadedOn)
|
||||||
|
? model.uploadedOn
|
||||||
|
: defaultFileDto.uploadedOn,
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Model is Default or not ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
*/
|
||||||
|
export function isDefaultFileDto(model?: XFileDto) {
|
||||||
|
return isSameObject(prepareFileDtoFields(model), defaultFileDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Model Type Guard ...
|
||||||
|
*/
|
||||||
|
export const isXFileDto = typeGuard<XFileDto>([
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'ownerId',
|
||||||
|
'type',
|
||||||
|
'uploadedOn',
|
||||||
|
'path',
|
||||||
|
]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a FileDto to Entity ...
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function fileDtoToEntity(value: XFileDto) {
|
||||||
|
//
|
||||||
|
let result: XFileEntity = undefined;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!isNullOrUndefined(value) && isXFileDto(value)) {
|
||||||
|
//
|
||||||
|
const references = references2String(value.references);
|
||||||
|
result = {
|
||||||
|
id: value.id,
|
||||||
|
type: value.type,
|
||||||
|
name: value.name,
|
||||||
|
thumb: value.thumb,
|
||||||
|
path: value.path,
|
||||||
|
thumbPath: value.thumbPath,
|
||||||
|
uploadedOn: value.uploadedOn,
|
||||||
|
fileName: value.fileName,
|
||||||
|
ownerId: value.ownerId,
|
||||||
|
references,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a FileEntity to Dto ...
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @param owner
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function fileEntityToDto(
|
||||||
|
value: XFileEntity,
|
||||||
|
owner: XPersonDto = undefined
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
let result: XFileDto = undefined;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!isNullOrUndefined(value) && isXFileDto(value)) {
|
||||||
|
//
|
||||||
|
const references = parseXReferences<string>(value.references);
|
||||||
|
result = {
|
||||||
|
id: value.id,
|
||||||
|
type: value.type,
|
||||||
|
name: value.name,
|
||||||
|
thumb: value.thumb,
|
||||||
|
path: value.path,
|
||||||
|
thumbPath: value.thumbPath,
|
||||||
|
uploadedOn: value.uploadedOn,
|
||||||
|
fileName: value.fileName,
|
||||||
|
ownerId: value.ownerId,
|
||||||
|
owner,
|
||||||
|
references,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
import { Injectable } from "@angular/core";
|
||||||
|
import { XFileEntity } from "../models/x-file.dto";
|
||||||
|
import { XBaseEntityPushService } from "x-framework-push-service";
|
||||||
|
import { HttpTransportType, ITransport } from "@microsoft/signalr";
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class XFileEntityPushService extends XBaseEntityPushService<XFileEntity> {
|
||||||
|
//
|
||||||
|
//#region Abstracts ...
|
||||||
|
hubName(): string {
|
||||||
|
return 'fileEntityHub';
|
||||||
|
}
|
||||||
|
|
||||||
|
requiredAccessToken(): boolean {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
transportType(): HttpTransportType | ITransport {
|
||||||
|
return HttpTransportType.LongPolling;
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
import { Router } from '@angular/router';
|
||||||
|
import { HttpClient } from '@angular/common/http';
|
||||||
|
import { Inject, Injectable } from '@angular/core';
|
||||||
|
import { XFileEntity } from '../models/x-file.dto';
|
||||||
|
import { XApiEndPoint } from '../../typings/x-endpoint.typings';
|
||||||
|
import { XBaseEntityService } from '../../base/x-base-entity.service';
|
||||||
|
import { X_API_CONFIG, XApiConfiguration } from 'x-framework-identity-sdk';
|
||||||
|
import { X_SAHERELM_API_SDK_CONFIG } from '../../tokens/x-injectable-tokens';
|
||||||
|
import { XSaherElmApiSDKConfig } from '../../config/x-saherelm-api-sdk.config';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides all Entity Actions as a Service ...
|
||||||
|
*/
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XFileEntityService extends XBaseEntityService<
|
||||||
|
XFileEntity,
|
||||||
|
string
|
||||||
|
> {
|
||||||
|
//
|
||||||
|
//#region Constructor ...
|
||||||
|
constructor(
|
||||||
|
protected router: Router,
|
||||||
|
protected httpClient: HttpClient,
|
||||||
|
@Inject(X_SAHERELM_API_SDK_CONFIG) config: XSaherElmApiSDKConfig,
|
||||||
|
@Inject(X_API_CONFIG) apiConfig: XApiConfiguration
|
||||||
|
) {
|
||||||
|
super(
|
||||||
|
XApiEndPoint.FilesEntity,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
httpClient,
|
||||||
|
config,
|
||||||
|
apiConfig
|
||||||
|
);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,21 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { XFileEntityService } from './services/x-file.entity.service';
|
||||||
|
import { XFileProviderService } from './services/x-file.provider.service';
|
||||||
|
import { XFileEntityPushService } from './services/x-file.entity.push.service';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Export All Provided File related Services ...
|
||||||
|
*/
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XFileServices {
|
||||||
|
//
|
||||||
|
//#region Constructor ...
|
||||||
|
public constructor(
|
||||||
|
public fileEntityService: XFileEntityService,
|
||||||
|
public fileProviderService: XFileProviderService,
|
||||||
|
public fileEntityPushService: XFileEntityPushService
|
||||||
|
) {}
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
* All Available EndPoint Routes ...
|
||||||
|
*/
|
||||||
|
export enum XFileServiceRoute {
|
||||||
|
All = 'All',
|
||||||
|
Upload = '',
|
||||||
|
Remove = '',
|
||||||
|
Get = '{id}',
|
||||||
|
Query = 'Query',
|
||||||
|
GetTags = '{id}/Tags',
|
||||||
|
QueryOwned = 'Query/Owned',
|
||||||
|
StreamById = '{id}/Stream/ById',
|
||||||
|
AttachTags = '{id}/Tags/AttachMany',
|
||||||
|
DetachTags = '{id}/Tags/DetachMany',
|
||||||
|
DownloadById = '{id}/Download/ById',
|
||||||
|
StreamByName = '{name}/Stream/ByName',
|
||||||
|
DownloadByName = '{id}/Download/ByName',
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All Params Which Used in Related Services ...
|
||||||
|
*/
|
||||||
|
export enum XFileParam {
|
||||||
|
Id = 'id',
|
||||||
|
Ids = 'ids',
|
||||||
|
Tags = 'tags',
|
||||||
|
Name = 'name',
|
||||||
|
Files = 'files',
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { XBaseGuard } from '../base/x-base.guard';
|
||||||
|
import { XAvailableRoles } from '../typings/x-role.typings';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class AdminOrAgentGuard extends XBaseGuard {
|
||||||
|
roles = [
|
||||||
|
XAvailableRoles.Admin,
|
||||||
|
XAvailableRoles.Agent
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { XBaseGuard } from '../base/x-base.guard';
|
||||||
|
import { XAvailableRoles } from '../typings/x-role.typings';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class AdminGuard extends XBaseGuard {
|
||||||
|
roles = XAvailableRoles.Admin;
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { XBaseGuard } from '../base/x-base.guard';
|
||||||
|
import { XAvailableRoles } from '../typings/x-role.typings';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class AgentGuard extends XBaseGuard {
|
||||||
|
roles = XAvailableRoles.Agent;
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { XBaseGuard } from '../base/x-base.guard';
|
||||||
|
import { XAvailableRoles } from '../typings/x-role.typings';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class UserGuard extends XBaseGuard {
|
||||||
|
roles = XAvailableRoles.User;
|
||||||
|
}
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
import {
|
||||||
|
XBaseDto,
|
||||||
|
typeGuard,
|
||||||
|
isSameObject,
|
||||||
|
isNullOrUndefined,
|
||||||
|
isNullOrEmptyString,
|
||||||
|
} from 'x-framework-core';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simply Represent a User ...
|
||||||
|
*/
|
||||||
|
export interface XPersonDto extends XBaseDto {
|
||||||
|
username: string;
|
||||||
|
firstname: string;
|
||||||
|
lastname: string;
|
||||||
|
avatar: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default Model ...
|
||||||
|
*/
|
||||||
|
export const defaultPersonDto: XPersonDto = {
|
||||||
|
username: '',
|
||||||
|
firstname: '',
|
||||||
|
lastname: '',
|
||||||
|
avatar: '',
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare Model Fields ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function preparePersonDtoFields(model?: XPersonDto) {
|
||||||
|
//
|
||||||
|
if (isNullOrUndefined(model)) {
|
||||||
|
model = {
|
||||||
|
...defaultPersonDto,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
model = {
|
||||||
|
avatar: isNullOrEmptyString(model.avatar)
|
||||||
|
? defaultPersonDto.avatar
|
||||||
|
: model.avatar,
|
||||||
|
username: isNullOrEmptyString(model.username)
|
||||||
|
? defaultPersonDto.username
|
||||||
|
: model.username,
|
||||||
|
lastname: isNullOrEmptyString(model.lastname)
|
||||||
|
? defaultPersonDto.lastname
|
||||||
|
: model.lastname,
|
||||||
|
firstname: isNullOrEmptyString(model.firstname)
|
||||||
|
? defaultPersonDto.firstname
|
||||||
|
: model.firstname,
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Model is Default or not ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function isDefaultPersonDto(model?: XPersonDto) {
|
||||||
|
return isSameObject(preparePersonDtoFields(model), defaultPersonDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Model Type Guard ...
|
||||||
|
*/
|
||||||
|
export const isXPersonDto = typeGuard<XPersonDto>([
|
||||||
|
'username',
|
||||||
|
'firstname',
|
||||||
|
'lastname',
|
||||||
|
]);
|
||||||
@@ -0,0 +1,213 @@
|
|||||||
|
import {
|
||||||
|
nameof,
|
||||||
|
toNumber,
|
||||||
|
XBaseDto,
|
||||||
|
hasChild,
|
||||||
|
toXString,
|
||||||
|
typeGuard,
|
||||||
|
isSameObject,
|
||||||
|
toListString,
|
||||||
|
parseListString,
|
||||||
|
isNullOrUndefined,
|
||||||
|
isNullOrEmptyString,
|
||||||
|
} from 'x-framework-core';
|
||||||
|
|
||||||
|
export interface XReferenceDto<T> extends XBaseDto {
|
||||||
|
index: number;
|
||||||
|
providedFor: string;
|
||||||
|
referencedTo: T;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Model Type Guard ...
|
||||||
|
*/
|
||||||
|
export const isXReferenceDto = typeGuard<XReferenceDto<any>>([
|
||||||
|
'index',
|
||||||
|
'providedFor',
|
||||||
|
'referencedTo',
|
||||||
|
]);
|
||||||
|
|
||||||
|
export const defaultReferenceDto: XReferenceDto<any> = {
|
||||||
|
index: 0,
|
||||||
|
providedFor: '',
|
||||||
|
referencedTo: undefined,
|
||||||
|
};
|
||||||
|
|
||||||
|
export function prepareReferenceDtoFields(model?: XReferenceDto<any>) {
|
||||||
|
//
|
||||||
|
if (isNullOrUndefined(model)) {
|
||||||
|
//
|
||||||
|
model = {
|
||||||
|
...defaultReferenceDto,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
model = {
|
||||||
|
index: !isNullOrUndefined(model.index)
|
||||||
|
? model.index
|
||||||
|
: defaultReferenceDto.index,
|
||||||
|
referencedTo: !isNullOrUndefined(model.referencedTo)
|
||||||
|
? model.referencedTo
|
||||||
|
: defaultReferenceDto.referencedTo,
|
||||||
|
providedFor: !isNullOrEmptyString(model.providedFor)
|
||||||
|
? model.providedFor
|
||||||
|
: defaultReferenceDto.providedFor,
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function isDefaultReferenceDto(model?: XReferenceDto<any>) {
|
||||||
|
return isSameObject(prepareReferenceDtoFields(model), defaultReferenceDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts any object to XReferenceDto<T> ...
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function parseXReferenceDto<T>(value: any) {
|
||||||
|
//
|
||||||
|
let result: XReferenceDto<T> = undefined;
|
||||||
|
|
||||||
|
//
|
||||||
|
let isPassed = false;
|
||||||
|
isPassed =
|
||||||
|
!isNullOrUndefined(value) &&
|
||||||
|
Object.keys(value).includes(nameof<XReferenceDto<T>>('index')) &&
|
||||||
|
Object.keys(value).includes(nameof<XReferenceDto<T>>('referencedTo')) &&
|
||||||
|
Object.keys(value).includes(nameof<XReferenceDto<T>>('providedFor'));
|
||||||
|
if (isPassed) {
|
||||||
|
//
|
||||||
|
result = {
|
||||||
|
index: toNumber(value.index),
|
||||||
|
providedFor: toXString(value.providedFor),
|
||||||
|
referencedTo: value.referencedTo as unknown as T,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse an String to XReferenceDto<T> ...
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function parseXReference<T = any>(value: string) {
|
||||||
|
//
|
||||||
|
var result: XReferenceDto<T> = undefined;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!isNullOrEmptyString(value)) {
|
||||||
|
//
|
||||||
|
let parts = parseListString(value, '_');
|
||||||
|
let isValid =
|
||||||
|
!isNullOrUndefined(parts) && hasChild(parts) && parts.length >= 3;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (isValid) {
|
||||||
|
//
|
||||||
|
result = {
|
||||||
|
index: toNumber(parts[2]),
|
||||||
|
referencedTo: parts[1] as unknown as T,
|
||||||
|
providedFor: toXString(parts[0]),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse References List From String ...
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function parseXReferences<T = any>(value: string) {
|
||||||
|
//
|
||||||
|
let result: Array<XReferenceDto<T>> = [];
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!isNullOrEmptyString(value)) {
|
||||||
|
//
|
||||||
|
let parts = parseListString(value);
|
||||||
|
let isValid = !isNullOrUndefined(parts) && hasChild(parts);
|
||||||
|
if (isValid) {
|
||||||
|
//
|
||||||
|
parts.forEach((part) => {
|
||||||
|
//
|
||||||
|
var reference = parseXReference<T>(part);
|
||||||
|
isValid = !isNullOrUndefined(reference);
|
||||||
|
if (isValid) {
|
||||||
|
result.push(reference);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts an XReferenceDto<T> to String Reperesentation ...
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @param separator
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function reference2String<T = any>(
|
||||||
|
value: XReferenceDto<T>,
|
||||||
|
separator: string = '_'
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
let result: string = undefined;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!isNullOrUndefined(value)) {
|
||||||
|
result = `${value.providedFor}${separator}${value.referencedTo}${separator}${value.index}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts references Array to String Representation ...
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @param separator
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function references2String<T = any>(
|
||||||
|
value: Array<XReferenceDto<T>>,
|
||||||
|
separator: string = ','
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
let result: string = undefined;
|
||||||
|
|
||||||
|
//
|
||||||
|
let arr: Array<string> = [];
|
||||||
|
if (!isNullOrUndefined(value) && hasChild(value)) {
|
||||||
|
//
|
||||||
|
value.forEach((v) => {
|
||||||
|
//
|
||||||
|
let refStr = reference2String(v);
|
||||||
|
arr.push(refStr);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = toListString(arr, separator);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
import { Observable } from 'rxjs';
|
||||||
|
import { map } from 'rxjs/operators';
|
||||||
|
import { Inject, Injectable } from '@angular/core';
|
||||||
|
import { XAccountService } from 'x-framework-identity-sdk';
|
||||||
|
import { isNullOrUndefined, XBaseService } from 'x-framework-core';
|
||||||
|
import { IXPushServiceTokenFetcher } from 'x-framework-push-service';
|
||||||
|
import { X_SAHERELM_API_SDK_CONFIG } from '../tokens/x-injectable-tokens';
|
||||||
|
import { XSaherElmApiSDKConfig } from '../config/x-saherelm-api-sdk.config';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XPushTokenFetcherService
|
||||||
|
extends XBaseService
|
||||||
|
implements IXPushServiceTokenFetcher
|
||||||
|
{
|
||||||
|
//
|
||||||
|
//#region Props ...
|
||||||
|
token: string;
|
||||||
|
token$: Observable<string> = this.accountsService.state$.pipe(
|
||||||
|
map((state) => (isNullOrUndefined(state) ? null : state.accessToken))
|
||||||
|
);
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Constructor ...
|
||||||
|
constructor(
|
||||||
|
//
|
||||||
|
@Inject(X_SAHERELM_API_SDK_CONFIG)
|
||||||
|
public config: XSaherElmApiSDKConfig,
|
||||||
|
//
|
||||||
|
public accountsService: XAccountService
|
||||||
|
) {
|
||||||
|
super(config);
|
||||||
|
|
||||||
|
//
|
||||||
|
accountsService.state$.subscribe((state) => {
|
||||||
|
//
|
||||||
|
if (isNullOrUndefined(state)) {
|
||||||
|
this.token = null;
|
||||||
|
} else {
|
||||||
|
this.token = state.accessToken;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
/**
|
||||||
|
* retrieve current user's access token ...
|
||||||
|
* @returns token
|
||||||
|
*/
|
||||||
|
public getToken(): string {
|
||||||
|
return this.token;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,192 @@
|
|||||||
|
import {
|
||||||
|
XBaseDto,
|
||||||
|
hasChild,
|
||||||
|
typeGuard,
|
||||||
|
isSameObject,
|
||||||
|
XBaseNumberIDDto,
|
||||||
|
isNullOrUndefined,
|
||||||
|
isNullOrEmptyString,
|
||||||
|
} from 'x-framework-core';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represent a Locale Resource ...
|
||||||
|
*/
|
||||||
|
export interface XStringDto extends XBaseNumberIDDto {
|
||||||
|
language: string;
|
||||||
|
resourceTitle: string;
|
||||||
|
translatedValue: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default Model ...
|
||||||
|
*/
|
||||||
|
export const defaultStringDto: XStringDto = {
|
||||||
|
id: undefined,
|
||||||
|
language: '',
|
||||||
|
resourceTitle: '',
|
||||||
|
translatedValue: '',
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare Model Fields ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function prepareStringDtoFields(model?: XStringDto) {
|
||||||
|
//
|
||||||
|
if (isNullOrUndefined(model)) {
|
||||||
|
model = {
|
||||||
|
...defaultStringDto,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
model = {
|
||||||
|
id: isNullOrUndefined(model.id) ? defaultStringDto.id : model.id,
|
||||||
|
language: isNullOrEmptyString(model.language)
|
||||||
|
? defaultStringDto.language
|
||||||
|
: model.language,
|
||||||
|
resourceTitle: isNullOrEmptyString(model.resourceTitle)
|
||||||
|
? defaultStringDto.resourceTitle
|
||||||
|
: model.resourceTitle,
|
||||||
|
translatedValue: isNullOrEmptyString(model.translatedValue)
|
||||||
|
? defaultStringDto.translatedValue
|
||||||
|
: model.translatedValue,
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Model is Default or not ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function isDefaultStringDto(model?: XStringDto) {
|
||||||
|
return isSameObject(prepareStringDtoFields(model), defaultStringDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simply Represent a Locale ...
|
||||||
|
*/
|
||||||
|
export interface XLocaleResourceDto extends XBaseDto {
|
||||||
|
language: string;
|
||||||
|
value: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default Model ...
|
||||||
|
*/
|
||||||
|
export const defaultLocaleResourceDto: XLocaleResourceDto = {
|
||||||
|
value: '',
|
||||||
|
language: '',
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare Model Fields ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function prepareLocaleResourceDtoFields(model?: XLocaleResourceDto) {
|
||||||
|
//
|
||||||
|
if (isNullOrUndefined(model)) {
|
||||||
|
model = {
|
||||||
|
...defaultLocaleResourceDto,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
model = {
|
||||||
|
value: isNullOrEmptyString(model.value)
|
||||||
|
? defaultLocaleResourceDto.value
|
||||||
|
: model.value,
|
||||||
|
language: isNullOrEmptyString(model.language)
|
||||||
|
? defaultLocaleResourceDto.language
|
||||||
|
: model.language,
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Model is Default or not ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function isDefaultLocaleResourceDto(model?: XLocaleResourceDto) {
|
||||||
|
return isSameObject(
|
||||||
|
prepareLocaleResourceDtoFields(model),
|
||||||
|
defaultLocaleResourceDto
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represent a Locale by it's Resources ...
|
||||||
|
*/
|
||||||
|
export interface XResourceDto extends XBaseDto {
|
||||||
|
resource: string;
|
||||||
|
locales: Array<XLocaleResourceDto>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default Model ...
|
||||||
|
*/
|
||||||
|
export const defaultResourceDto: XResourceDto = {
|
||||||
|
resource: '',
|
||||||
|
locales: [],
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare Model Fields ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function prepareResourceDtoFields(model?: XResourceDto) {
|
||||||
|
//
|
||||||
|
if (isNullOrUndefined(model)) {
|
||||||
|
model = {
|
||||||
|
...defaultResourceDto,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
model = {
|
||||||
|
resource: isNullOrEmptyString(model.resource)
|
||||||
|
? defaultResourceDto.resource
|
||||||
|
: model.resource,
|
||||||
|
locales:
|
||||||
|
isNullOrUndefined(model.locales) || !hasChild(model.locales)
|
||||||
|
? defaultResourceDto.locales
|
||||||
|
: model.locales.map((l) => prepareLocaleResourceDtoFields(l)),
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Model is Default or not ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function isDefaultResourceDto(model?: XResourceDto) {
|
||||||
|
return isSameObject(prepareResourceDtoFields(model), defaultResourceDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Model Type Guard ...
|
||||||
|
*/
|
||||||
|
export const isXStringDto = typeGuard<XStringDto>([
|
||||||
|
'id',
|
||||||
|
'language',
|
||||||
|
'resourceTitle',
|
||||||
|
'translatedValue',
|
||||||
|
]);
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { XStringDto } from '../models/x-string.dto';
|
||||||
|
import { XBaseEntityPushService } from 'x-framework-push-service';
|
||||||
|
import { HttpTransportType, ITransport } from '@microsoft/signalr';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XStringEntityPushService extends XBaseEntityPushService<XStringDto> {
|
||||||
|
//
|
||||||
|
//#region Abstracts ...
|
||||||
|
hubName(): string {
|
||||||
|
return 'stringEntityHub';
|
||||||
|
}
|
||||||
|
|
||||||
|
requiredAccessToken(): boolean {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
transportType(): HttpTransportType | ITransport {
|
||||||
|
return HttpTransportType.LongPolling;
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
import { Router } from '@angular/router';
|
||||||
|
import { HttpClient } from '@angular/common/http';
|
||||||
|
import { Inject, Injectable } from '@angular/core';
|
||||||
|
import { XStringDto } from '../models/x-string.dto';
|
||||||
|
import { XApiEndPoint } from '../../typings/x-endpoint.typings';
|
||||||
|
import { XBaseEntityService } from '../../base/x-base-entity.service';
|
||||||
|
import { X_API_CONFIG, XApiConfiguration } from 'x-framework-identity-sdk';
|
||||||
|
import { X_SAHERELM_API_SDK_CONFIG } from '../../tokens/x-injectable-tokens';
|
||||||
|
import { XSaherElmApiSDKConfig } from '../../config/x-saherelm-api-sdk.config';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides all Entity Actions as a Service ...
|
||||||
|
*/
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XStringEntityService extends XBaseEntityService<
|
||||||
|
XStringDto,
|
||||||
|
number
|
||||||
|
> {
|
||||||
|
//
|
||||||
|
//#region Constructor ...
|
||||||
|
constructor(
|
||||||
|
protected router: Router,
|
||||||
|
protected httpClient: HttpClient,
|
||||||
|
@Inject(X_SAHERELM_API_SDK_CONFIG) config: XSaherElmApiSDKConfig,
|
||||||
|
@Inject(X_API_CONFIG) apiConfig: XApiConfiguration
|
||||||
|
) {
|
||||||
|
super(
|
||||||
|
XApiEndPoint.StringsEntity,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
httpClient,
|
||||||
|
config,
|
||||||
|
apiConfig
|
||||||
|
);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,21 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { XStringEntityService } from './services/x-string.entity.service';
|
||||||
|
import { XStringProviderService } from './services/x-string.provider.service';
|
||||||
|
import { XStringEntityPushService } from './services/x-string.entity.push.service';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Export All Provided String related Services ...
|
||||||
|
*/
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XStringServices {
|
||||||
|
//
|
||||||
|
//#region Constructor ...
|
||||||
|
public constructor(
|
||||||
|
public stringEntityService: XStringEntityService,
|
||||||
|
public stringProviderService: XStringProviderService,
|
||||||
|
public stringEntityPushService: XStringEntityPushService
|
||||||
|
) {}
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
/**
|
||||||
|
* All Available EndPoint Routes ...
|
||||||
|
*/
|
||||||
|
export enum XStringsServiceRoute {
|
||||||
|
//
|
||||||
|
// Retrievers ...
|
||||||
|
Get = '',
|
||||||
|
Resources = 'Resources',
|
||||||
|
Languages = 'Languages',
|
||||||
|
AsResource = 'AsResource',
|
||||||
|
ResourceValue = 'ResourceValue',
|
||||||
|
IsResourceExists = 'IsResourceExists',
|
||||||
|
|
||||||
|
//
|
||||||
|
// Query ...
|
||||||
|
QueryResourceIds = 'QueryResourceIds',
|
||||||
|
QueryLocaleResources = 'QueryLocaleResources',
|
||||||
|
QueryLanguageResourcs = 'QueryLanguageResourcs',
|
||||||
|
|
||||||
|
//
|
||||||
|
// Add ...
|
||||||
|
Add = 'Add',
|
||||||
|
AddModel = 'AddModel',
|
||||||
|
AddLocale = 'AddLocale',
|
||||||
|
AddResource = 'AddResource',
|
||||||
|
AddOrUpdate = 'AddOrUpdate',
|
||||||
|
AddOrUpdateModel = 'AddOrUpdateModel',
|
||||||
|
AddOrUpdateLocale = 'AddOrUpdateLocale',
|
||||||
|
|
||||||
|
//
|
||||||
|
// Update ...
|
||||||
|
Update = 'Update',
|
||||||
|
UpdateModel = 'UpdateModel',
|
||||||
|
UpdateLocale = 'UpdateLocale',
|
||||||
|
|
||||||
|
//
|
||||||
|
// Remove ...
|
||||||
|
Remove = 'Remove',
|
||||||
|
RemoveLocales = 'RemoveLocales',
|
||||||
|
RemoveResource = 'RemoveResource',
|
||||||
|
RemoveLanguage = 'RemoveLanguage',
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All Params Which Used in Related Services ...
|
||||||
|
*/
|
||||||
|
export enum XStringParam {
|
||||||
|
Value = 'value',
|
||||||
|
Resource = 'resource',
|
||||||
|
Language = 'language',
|
||||||
|
}
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
import {
|
||||||
|
hasChild,
|
||||||
|
XBaseDto,
|
||||||
|
typeGuard,
|
||||||
|
isSameObject,
|
||||||
|
isNullOrUndefined,
|
||||||
|
isNullOrEmptyString,
|
||||||
|
} from 'x-framework-core';
|
||||||
|
import {
|
||||||
|
XReferenceDto,
|
||||||
|
parseXReferences,
|
||||||
|
references2String,
|
||||||
|
} from '../../models/x-reference.dto';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represent Specified Tag ...
|
||||||
|
*/
|
||||||
|
export interface XTagEntity extends XBaseDto {
|
||||||
|
id: number;
|
||||||
|
tag: string;
|
||||||
|
references: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represent Specified Tag ...
|
||||||
|
*/
|
||||||
|
export interface XTagDto extends XBaseDto {
|
||||||
|
id: number;
|
||||||
|
tag: string;
|
||||||
|
references: Array<XReferenceDto<string>>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default Model ...
|
||||||
|
*/
|
||||||
|
export const defaultTagDto: XTagDto = {
|
||||||
|
id: 0,
|
||||||
|
tag: undefined,
|
||||||
|
references: [],
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare Model Fields ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function prepareTagDtoFields(model?: XTagDto) {
|
||||||
|
//
|
||||||
|
if (isNullOrUndefined(model)) {
|
||||||
|
//
|
||||||
|
model = {
|
||||||
|
...defaultTagDto,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
model = {
|
||||||
|
//
|
||||||
|
id:
|
||||||
|
!isNullOrUndefined(model.id) && model.id > 0
|
||||||
|
? model.id
|
||||||
|
: defaultTagDto.id,
|
||||||
|
tag: !isNullOrEmptyString(model.tag) ? model.tag : defaultTagDto.tag,
|
||||||
|
references:
|
||||||
|
!isNullOrUndefined(model.references) && hasChild(model.references)
|
||||||
|
? [...model.references]
|
||||||
|
: defaultTagDto.references,
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Model is Default or not ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function isDefaultTagDto(model?: XTagDto) {
|
||||||
|
return isSameObject(prepareTagDtoFields(model), defaultTagDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Model Type Guard ...
|
||||||
|
*/
|
||||||
|
export const isXTagDto = typeGuard<XTagDto>(['id', 'tag']);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tag Dto to Tag Entity ...
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function tagDto2Entity(value: XTagDto) {
|
||||||
|
//
|
||||||
|
let result: XTagEntity = undefined;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!isNullOrUndefined(value) && isXTagDto(value)) {
|
||||||
|
//
|
||||||
|
const references = references2String(value.references);
|
||||||
|
result = {
|
||||||
|
id: value.id,
|
||||||
|
tag: value.tag,
|
||||||
|
references,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tag Entity to Tag Dto ...
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function tagEntity2Dto(value: XTagEntity) {
|
||||||
|
//
|
||||||
|
let result: XTagDto = undefined;
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!isNullOrUndefined(value) && isXTagDto(value)) {
|
||||||
|
//
|
||||||
|
const references = parseXReferences<string>(value.references);
|
||||||
|
result = {
|
||||||
|
id: value.id,
|
||||||
|
tag: value.tag,
|
||||||
|
references,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { XTagEntity } from '../models/x-tag.dto';
|
||||||
|
import { XBaseEntityPushService } from 'x-framework-push-service';
|
||||||
|
import { HttpTransportType, ITransport } from '@microsoft/signalr';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XTagEntityPushService extends XBaseEntityPushService<XTagEntity> {
|
||||||
|
//
|
||||||
|
//#region Props ...
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Abstracts ...
|
||||||
|
hubName(): string {
|
||||||
|
return 'tagEntityHub';
|
||||||
|
}
|
||||||
|
|
||||||
|
requiredAccessToken(): boolean {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
transportType(): HttpTransportType | ITransport {
|
||||||
|
return HttpTransportType.LongPolling;
|
||||||
|
}
|
||||||
|
|
||||||
|
registerSubjects(): void {
|
||||||
|
super.registerSubjects();
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
import { Router } from '@angular/router';
|
||||||
|
import { XTagEntity } from '../models/x-tag.dto';
|
||||||
|
import { HttpClient } from '@angular/common/http';
|
||||||
|
import { Inject, Injectable } from '@angular/core';
|
||||||
|
import { XApiEndPoint } from '../../typings/x-endpoint.typings';
|
||||||
|
import { XBaseEntityService } from '../../base/x-base-entity.service';
|
||||||
|
import { X_API_CONFIG, XApiConfiguration } from 'x-framework-identity-sdk';
|
||||||
|
import { X_SAHERELM_API_SDK_CONFIG } from '../../tokens/x-injectable-tokens';
|
||||||
|
import { XSaherElmApiSDKConfig } from '../../config/x-saherelm-api-sdk.config';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides all Entity Actions as a Service ...
|
||||||
|
*/
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XTagEntityService extends XBaseEntityService<
|
||||||
|
XTagEntity,
|
||||||
|
string
|
||||||
|
> {
|
||||||
|
//
|
||||||
|
//#region Constructor ...
|
||||||
|
constructor(
|
||||||
|
protected router: Router,
|
||||||
|
protected httpClient: HttpClient,
|
||||||
|
@Inject(X_SAHERELM_API_SDK_CONFIG) config: XSaherElmApiSDKConfig,
|
||||||
|
@Inject(X_API_CONFIG) apiConfig: XApiConfiguration
|
||||||
|
) {
|
||||||
|
super(
|
||||||
|
XApiEndPoint.TagsEntity,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
httpClient,
|
||||||
|
config,
|
||||||
|
apiConfig
|
||||||
|
);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,654 @@
|
|||||||
|
import {
|
||||||
|
toArray,
|
||||||
|
hasChild,
|
||||||
|
XValidators,
|
||||||
|
XOneOrManyType,
|
||||||
|
isNullOrEmptyString,
|
||||||
|
} from 'x-framework-core';
|
||||||
|
import {
|
||||||
|
HttpEvent,
|
||||||
|
HttpParams,
|
||||||
|
HttpClient,
|
||||||
|
HttpHeaders,
|
||||||
|
HttpResponse,
|
||||||
|
} from '@angular/common/http';
|
||||||
|
import {
|
||||||
|
XQueryDto,
|
||||||
|
X_API_CONFIG,
|
||||||
|
XBaseApiService,
|
||||||
|
XQueryResultDto,
|
||||||
|
XApiConfiguration,
|
||||||
|
} from 'x-framework-identity-sdk';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
import { Router } from '@angular/router';
|
||||||
|
import { XTagDto } from '../models/x-tag.dto';
|
||||||
|
import { Inject, Injectable } from '@angular/core';
|
||||||
|
import { fillRouteParams } from '../../tools/x-route.tools';
|
||||||
|
import { XTagParam, XTagServiceRoute } from '../x-tag.typings';
|
||||||
|
import { XApiEndPoint } from '../../typings/x-endpoint.typings';
|
||||||
|
import { X_SAHERELM_API_SDK_CONFIG } from '../../tokens/x-injectable-tokens';
|
||||||
|
import { XSaherElmApiSDKConfig } from '../../config/x-saherelm-api-sdk.config';
|
||||||
|
import { applyConnectionIdToHeader } from '../../typings/x-push-provider.typings';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides all Provider Actions as a Service ...
|
||||||
|
*/
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XTagProviderService extends XBaseApiService {
|
||||||
|
//
|
||||||
|
//#region Constructor ...
|
||||||
|
constructor(
|
||||||
|
protected router: Router,
|
||||||
|
protected httpClient: HttpClient,
|
||||||
|
@Inject(X_SAHERELM_API_SDK_CONFIG) config: XSaherElmApiSDKConfig,
|
||||||
|
@Inject(X_API_CONFIG) apiConfig: XApiConfiguration
|
||||||
|
) {
|
||||||
|
super(XApiEndPoint.TagsService, true, true, httpClient, config, apiConfig);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Actions ...
|
||||||
|
//
|
||||||
|
//#region Add ...
|
||||||
|
/**
|
||||||
|
* Add Model ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
* @param connectionId
|
||||||
|
* @param observe
|
||||||
|
* @param reportProgress
|
||||||
|
*/
|
||||||
|
public add(
|
||||||
|
model: XTagDto,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<XTagDto>;
|
||||||
|
public add(
|
||||||
|
model: XTagDto,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<XTagDto>>;
|
||||||
|
public add(
|
||||||
|
model: XTagDto,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<XTagDto>>;
|
||||||
|
public add(
|
||||||
|
model: XTagDto,
|
||||||
|
connectionId?: string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotNull(model);
|
||||||
|
XValidators.validateNotEmpty(model.tag);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Base Requirements ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
let headers: HttpHeaders = this.defaultHeaders;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Authentication ...
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
headers = applyConnectionIdToHeader(connectionId, headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint
|
||||||
|
const endPointPath = this.getActionRoute(XTagServiceRoute.Add);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.post<XTagDto>(endPointPath, model, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Update ...
|
||||||
|
/**
|
||||||
|
* Update Model ...
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* @param model
|
||||||
|
* @param connectionId
|
||||||
|
* @param observe
|
||||||
|
* @param reportProgress
|
||||||
|
*/
|
||||||
|
public update(
|
||||||
|
id: number,
|
||||||
|
model: XTagDto,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<XTagDto>;
|
||||||
|
public update(
|
||||||
|
id: number,
|
||||||
|
model: XTagDto,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<XTagDto>>;
|
||||||
|
public update(
|
||||||
|
id: number,
|
||||||
|
model: XTagDto,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<XTagDto>>;
|
||||||
|
public update(
|
||||||
|
id: number,
|
||||||
|
model: XTagDto,
|
||||||
|
connectionId?: string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotNull(model);
|
||||||
|
XValidators.validateNotEmpty(model.tag);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (model.id !== id) {
|
||||||
|
model.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Base Requirements ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
let headers: HttpHeaders = this.defaultHeaders;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Authentication ...
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
headers = applyConnectionIdToHeader(connectionId, headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint
|
||||||
|
const endPointPath = fillRouteParams(
|
||||||
|
//
|
||||||
|
// Base Route on Endpoint ...
|
||||||
|
this.getActionRoute(XTagServiceRoute.Update),
|
||||||
|
//
|
||||||
|
// Params ...
|
||||||
|
[
|
||||||
|
{
|
||||||
|
key: XTagParam.Id,
|
||||||
|
value: id.toString(),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.put<XTagDto>(endPointPath, model, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Remove ...
|
||||||
|
/**
|
||||||
|
* Remove Model ...
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* @param connectionId
|
||||||
|
* @param observe
|
||||||
|
* @param reportProgress
|
||||||
|
*/
|
||||||
|
public remove(
|
||||||
|
id: number,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<XTagDto>;
|
||||||
|
public remove(
|
||||||
|
id: number,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<XTagDto>>;
|
||||||
|
public remove(
|
||||||
|
id: number,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<XTagDto>>;
|
||||||
|
public remove(
|
||||||
|
id: number,
|
||||||
|
connectionId?: string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Base Requirements ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
let headers: HttpHeaders = this.defaultHeaders;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Authentication ...
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
headers = applyConnectionIdToHeader(connectionId, headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint ...
|
||||||
|
const endPointPath = fillRouteParams(
|
||||||
|
this.getActionRoute(XTagServiceRoute.Remove),
|
||||||
|
[
|
||||||
|
{
|
||||||
|
key: XTagParam.Id,
|
||||||
|
value: id.toString(),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.delete<XTagDto>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Get ...
|
||||||
|
/**
|
||||||
|
* Get Specified Model ...
|
||||||
|
*/
|
||||||
|
public get(
|
||||||
|
id: number,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<XTagDto>;
|
||||||
|
public get(
|
||||||
|
id: number,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<XTagDto>>;
|
||||||
|
public get(
|
||||||
|
id: number,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<XTagDto>>;
|
||||||
|
public get(
|
||||||
|
id: number,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Base Requirements ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
let headers: HttpHeaders = this.defaultHeaders;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Authentication ...
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint ...
|
||||||
|
const endPointPath = fillRouteParams(
|
||||||
|
//
|
||||||
|
// Base Route on Endpoint ...
|
||||||
|
this.getActionRoute(XTagServiceRoute.Get),
|
||||||
|
//
|
||||||
|
// Params ...
|
||||||
|
[
|
||||||
|
{
|
||||||
|
key: XTagParam.Id,
|
||||||
|
value: id.toString(),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.get<XTagDto>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region GetTag ...
|
||||||
|
/**
|
||||||
|
* Get Specified Model by Providing Label ...
|
||||||
|
*/
|
||||||
|
public getTag(
|
||||||
|
tag: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<XTagDto>;
|
||||||
|
public getTag(
|
||||||
|
tag: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<XTagDto>>;
|
||||||
|
public getTag(
|
||||||
|
tag: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<XTagDto>>;
|
||||||
|
public getTag(
|
||||||
|
tag: string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotEmpty(tag);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Base Requirements ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
let headers: HttpHeaders = this.defaultHeaders;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Attach Tag to Params ...
|
||||||
|
params = this.addCustomParam(params, {
|
||||||
|
key: XTagParam.Tag,
|
||||||
|
value: tag
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// Authentication ...
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint ...
|
||||||
|
const endPointPath = this.getActionRoute(XTagServiceRoute.GetTag);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.get<XTagDto>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region All ...
|
||||||
|
/**
|
||||||
|
* Retrieve all Exists Models ...
|
||||||
|
*
|
||||||
|
* @param observe
|
||||||
|
* @param reportProgress
|
||||||
|
*/
|
||||||
|
public all(
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<Array<XTagDto>>;
|
||||||
|
public all(
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<Array<XTagDto>>>;
|
||||||
|
public all(
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<Array<XTagDto>>>;
|
||||||
|
public all(
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Base Requirements ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
let headers: HttpHeaders = this.defaultHeaders;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Authentication ...
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Preparing HttpParams ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint
|
||||||
|
const endPointPath = this.getActionRoute(XTagServiceRoute.All);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.get<Array<XTagDto>>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region FindOne ...
|
||||||
|
/**
|
||||||
|
* Detect Specified Model by Providing Label Query ...
|
||||||
|
*/
|
||||||
|
public findOne(
|
||||||
|
query: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<XTagDto>;
|
||||||
|
public findOne(
|
||||||
|
query: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<XTagDto>>;
|
||||||
|
public findOne(
|
||||||
|
query: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<XTagDto>>;
|
||||||
|
public findOne(
|
||||||
|
query: string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotEmpty(query);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Base Requirements ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
let headers: HttpHeaders = this.defaultHeaders;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Attach Tag to Params ...
|
||||||
|
params = this.addCustomParam(params, {
|
||||||
|
key: XTagParam.Query,
|
||||||
|
value: query
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// Authentication ...
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint ...
|
||||||
|
const endPointPath = this.getActionRoute(XTagServiceRoute.FindOne);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.get<XTagDto>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region FindMany ...
|
||||||
|
/**
|
||||||
|
* Detect Specified Models by Providing Label Query ...
|
||||||
|
*/
|
||||||
|
public findMany(
|
||||||
|
query: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<Array<XTagDto>>;
|
||||||
|
public findMany(
|
||||||
|
query: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<Array<XTagDto>>>;
|
||||||
|
public findMany(
|
||||||
|
query: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<Array<XTagDto>>>;
|
||||||
|
public findMany(
|
||||||
|
query: string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotEmpty(query);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Base Requirements ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
let headers: HttpHeaders = this.defaultHeaders;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Attach Tag to Params ...
|
||||||
|
params = this.addCustomParam(params, {
|
||||||
|
key: XTagParam.Query,
|
||||||
|
value: query
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// Authentication ...
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint ...
|
||||||
|
const endPointPath = this.getActionRoute(XTagServiceRoute.FindMany);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.get<Array<XTagDto>>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Query ...
|
||||||
|
/**
|
||||||
|
* Query Model ...
|
||||||
|
*
|
||||||
|
* @param query
|
||||||
|
* @param observe
|
||||||
|
* @param reportProgress
|
||||||
|
*/
|
||||||
|
public query(
|
||||||
|
query: XQueryDto,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<XQueryResultDto<XTagDto>>;
|
||||||
|
public query(
|
||||||
|
query: XQueryDto,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<XQueryResultDto<XTagDto>>>;
|
||||||
|
public query(
|
||||||
|
query: XQueryDto,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<XQueryResultDto<XTagDto>>>;
|
||||||
|
public query(
|
||||||
|
query: XQueryDto,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotNull(query);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Base Requirements ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
let headers: HttpHeaders = this.defaultHeaders;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Authentication ...
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Preparing HttpParams ...
|
||||||
|
params = this.generateXQueryHttpParams(query);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint
|
||||||
|
const endPointPath = this.getActionRoute(XTagServiceRoute.Query);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.get<XQueryResultDto<XTagDto>>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { XTagEntityService } from './services/x-tag.entity.service';
|
||||||
|
import { XTagProviderService } from './services/x-tag.provider.service';
|
||||||
|
import { XTagEntityPushService } from './services/x-tag.entity.push.service';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Export All Provided Tag related Services ...
|
||||||
|
*/
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XTagServices {
|
||||||
|
//
|
||||||
|
//#region Constructor ...
|
||||||
|
public constructor(
|
||||||
|
public tagEntityService: XTagEntityService,
|
||||||
|
public tagProviderService: XTagProviderService,
|
||||||
|
public tagEntityPushService: XTagEntityPushService
|
||||||
|
) {}
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
/**
|
||||||
|
* All Available EndPoint Routes ...
|
||||||
|
*/
|
||||||
|
export enum XTagServiceRoute {
|
||||||
|
Add = '',
|
||||||
|
All = 'All',
|
||||||
|
Get = '{id}',
|
||||||
|
Update = '{id}',
|
||||||
|
Remove = '{id}',
|
||||||
|
Query = 'Query',
|
||||||
|
GetTag = 'GetTag',
|
||||||
|
FindOne = 'FindOne',
|
||||||
|
FindMany = 'FindMany',
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All Params Which Used in Related Services ...
|
||||||
|
*/
|
||||||
|
export enum XTagParam {
|
||||||
|
Id = 'id',
|
||||||
|
Tag = 'tag',
|
||||||
|
Query = 'query'
|
||||||
|
}
|
||||||
@@ -0,0 +1,507 @@
|
|||||||
|
import {
|
||||||
|
HttpEvent,
|
||||||
|
HttpClient,
|
||||||
|
HttpParams,
|
||||||
|
HttpHeaders,
|
||||||
|
HttpResponse,
|
||||||
|
} from '@angular/common/http';
|
||||||
|
import {
|
||||||
|
X_API_CONFIG,
|
||||||
|
XBaseApiService,
|
||||||
|
XApiConfiguration,
|
||||||
|
} from 'x-framework-identity-sdk';
|
||||||
|
import { Observable } from 'rxjs';
|
||||||
|
import { Router } from '@angular/router';
|
||||||
|
import { Inject, Injectable } from '@angular/core';
|
||||||
|
import { XLocale, XValidators } from 'x-framework-core';
|
||||||
|
import { fillRouteParams } from '../../tools/x-route.tools';
|
||||||
|
import { XApiEndPoint } from '../../typings/x-endpoint.typings';
|
||||||
|
import { XTermsParam, XTermsServiceRoute } from '../x-terms.typings.dto';
|
||||||
|
import { X_SAHERELM_API_SDK_CONFIG } from '../../tokens/x-injectable-tokens';
|
||||||
|
import { XSaherElmApiSDKConfig } from '../../config/x-saherelm-api-sdk.config';
|
||||||
|
import { applyConnectionIdToHeader } from '../../typings/x-push-provider.typings';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides all Provider Actions as a Service ...
|
||||||
|
*/
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XTermsProviderService extends XBaseApiService {
|
||||||
|
//
|
||||||
|
//#region Constructor ...
|
||||||
|
constructor(
|
||||||
|
protected router: Router,
|
||||||
|
protected httpClient: HttpClient,
|
||||||
|
@Inject(X_SAHERELM_API_SDK_CONFIG) config: XSaherElmApiSDKConfig,
|
||||||
|
@Inject(X_API_CONFIG) apiConfig: XApiConfiguration
|
||||||
|
) {
|
||||||
|
super(
|
||||||
|
XApiEndPoint.TermsAndConditions,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
httpClient,
|
||||||
|
config,
|
||||||
|
apiConfig
|
||||||
|
);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Actions ...
|
||||||
|
//
|
||||||
|
//#region Get ...
|
||||||
|
/**
|
||||||
|
* Get Specified Languages Terms and Conditions ...
|
||||||
|
*
|
||||||
|
* @param language
|
||||||
|
* @param observe
|
||||||
|
* @param reportProgress
|
||||||
|
*/
|
||||||
|
public get(
|
||||||
|
language: XLocale | string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<string>;
|
||||||
|
public get(
|
||||||
|
language: XLocale | string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<string>>;
|
||||||
|
public get(
|
||||||
|
language: XLocale | string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<string>>;
|
||||||
|
public get(
|
||||||
|
language: XLocale | string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotEmpty(language);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Base Requirements ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
let headers: HttpHeaders = this.defaultHeaders;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Authentication ...
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint ...
|
||||||
|
const endPointPath = fillRouteParams(
|
||||||
|
//
|
||||||
|
// Base Route on Endpoint ...
|
||||||
|
this.getActionRoute(XTermsServiceRoute.Get),
|
||||||
|
//
|
||||||
|
// Params ...
|
||||||
|
[
|
||||||
|
{
|
||||||
|
key: XTermsParam.Language,
|
||||||
|
value: language,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.get<string>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Languages ...
|
||||||
|
/**
|
||||||
|
* Get Languages Lists which Contains Terms and Conditions ...
|
||||||
|
*
|
||||||
|
* @param observe
|
||||||
|
* @param reportProgress
|
||||||
|
*/
|
||||||
|
public getLanguages(
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<Array<string>>;
|
||||||
|
public getLanguages(
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<Array<string>>>;
|
||||||
|
public getLanguages(
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<Array<string>>>;
|
||||||
|
public getLanguages(
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Base Requirements ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
let headers: HttpHeaders = this.defaultHeaders;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Authentication ...
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint ...
|
||||||
|
const endPointPath = this.getActionRoute(XTermsServiceRoute.Languages);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.get<Array<string>>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Has ...
|
||||||
|
/**
|
||||||
|
* Check Specified Languages Terms and Conditions Exists or not ...
|
||||||
|
*
|
||||||
|
* @param language
|
||||||
|
* @param observe
|
||||||
|
* @param reportProgress
|
||||||
|
*/
|
||||||
|
public has(
|
||||||
|
language: XLocale | string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<Boolean>;
|
||||||
|
public has(
|
||||||
|
language: XLocale | string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<Boolean>>;
|
||||||
|
public has(
|
||||||
|
language: XLocale | string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<Boolean>>;
|
||||||
|
public has(
|
||||||
|
language: XLocale | string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotEmpty(language);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Base Requirements ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
let headers: HttpHeaders = this.defaultHeaders;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Authentication ...
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint ...
|
||||||
|
const endPointPath = fillRouteParams(
|
||||||
|
//
|
||||||
|
// Base Route on Endpoint ...
|
||||||
|
this.getActionRoute(XTermsServiceRoute.Has),
|
||||||
|
//
|
||||||
|
// Params ...
|
||||||
|
[
|
||||||
|
{
|
||||||
|
key: XTermsParam.Language,
|
||||||
|
value: language,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.get<boolean>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Add ...
|
||||||
|
/**
|
||||||
|
* Add Terms and Conditions For Spevified Language ...
|
||||||
|
*
|
||||||
|
* @param language
|
||||||
|
* @param terms
|
||||||
|
* @param connectionId
|
||||||
|
* @param observe
|
||||||
|
* @param reportProgress
|
||||||
|
*/
|
||||||
|
public add(
|
||||||
|
language: XLocale | string,
|
||||||
|
terms: string,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<string>;
|
||||||
|
public add(
|
||||||
|
language: XLocale | string,
|
||||||
|
terms: string,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<string>>;
|
||||||
|
public add(
|
||||||
|
language: XLocale | string,
|
||||||
|
terms: string,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<string>>;
|
||||||
|
public add(
|
||||||
|
language: XLocale | string,
|
||||||
|
terms: string,
|
||||||
|
connectionId?: string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotEmpty(terms);
|
||||||
|
XValidators.validateNotEmpty(language);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Base Requirements ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
let headers: HttpHeaders = this.defaultHeaders;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Authentication ...
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
headers = applyConnectionIdToHeader(connectionId, headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint ...
|
||||||
|
const endPointPath = fillRouteParams(
|
||||||
|
//
|
||||||
|
// Base Route on Endpoint ...
|
||||||
|
this.getActionRoute(XTermsServiceRoute.Add),
|
||||||
|
//
|
||||||
|
// Params ...
|
||||||
|
[
|
||||||
|
{
|
||||||
|
key: XTermsParam.Language,
|
||||||
|
value: language,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Add terms Query String ...
|
||||||
|
params = this.addCustomParam(params, {
|
||||||
|
key: XTermsParam.Terms,
|
||||||
|
value: terms,
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.post<string>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Update ...
|
||||||
|
/**
|
||||||
|
* Update Terms and Conditions For Spevified Language ...
|
||||||
|
*
|
||||||
|
* @param language
|
||||||
|
* @param terms
|
||||||
|
* @param connectionId
|
||||||
|
* @param observe
|
||||||
|
* @param reportProgress
|
||||||
|
*/
|
||||||
|
public update(
|
||||||
|
language: XLocale | string,
|
||||||
|
terms: string,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<boolean>;
|
||||||
|
public update(
|
||||||
|
language: XLocale | string,
|
||||||
|
terms: string,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<boolean>>;
|
||||||
|
public update(
|
||||||
|
language: XLocale | string,
|
||||||
|
terms: string,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<boolean>>;
|
||||||
|
public update(
|
||||||
|
language: XLocale | string,
|
||||||
|
terms: string,
|
||||||
|
connectionId?: string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotEmpty(terms);
|
||||||
|
XValidators.validateNotEmpty(language);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Base Requirements ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
let headers: HttpHeaders = this.defaultHeaders;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Authentication ...
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
headers = applyConnectionIdToHeader(connectionId, headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint ...
|
||||||
|
const endPointPath = fillRouteParams(
|
||||||
|
//
|
||||||
|
// Base Route on Endpoint ...
|
||||||
|
this.getActionRoute(XTermsServiceRoute.Update),
|
||||||
|
//
|
||||||
|
// Params ...
|
||||||
|
[
|
||||||
|
{
|
||||||
|
key: XTermsParam.Language,
|
||||||
|
value: language,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Add terms Query String ...
|
||||||
|
params = this.addCustomParam(params, {
|
||||||
|
key: XTermsParam.Terms,
|
||||||
|
value: terms,
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.put<boolean>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Remove ...
|
||||||
|
/**
|
||||||
|
* Remove Terms and Conditions For Spevified Language ...
|
||||||
|
*
|
||||||
|
* @param language
|
||||||
|
* @param connectionId
|
||||||
|
* @param observe
|
||||||
|
* @param reportProgress
|
||||||
|
*/
|
||||||
|
public remove(
|
||||||
|
language: XLocale | string,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'body',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<boolean>;
|
||||||
|
public remove(
|
||||||
|
language: XLocale | string,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'response',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpResponse<boolean>>;
|
||||||
|
public remove(
|
||||||
|
language: XLocale | string,
|
||||||
|
connectionId?: string,
|
||||||
|
observe?: 'events',
|
||||||
|
reportProgress?: boolean
|
||||||
|
): Observable<HttpEvent<boolean>>;
|
||||||
|
public remove(
|
||||||
|
language: XLocale | string,
|
||||||
|
connectionId?: string,
|
||||||
|
observe: any = 'body',
|
||||||
|
reportProgress: boolean = false
|
||||||
|
): Observable<any> {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
XValidators.validateNotEmpty(language);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Base Requirements ...
|
||||||
|
let params: HttpParams = null;
|
||||||
|
let headers: HttpHeaders = this.defaultHeaders;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Authentication ...
|
||||||
|
headers = this.addAuthentication(headers);
|
||||||
|
headers = this.addAcceptJson(headers);
|
||||||
|
headers = this.addContentType(headers);
|
||||||
|
headers = applyConnectionIdToHeader(connectionId, headers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Endpoint ...
|
||||||
|
const endPointPath = fillRouteParams(
|
||||||
|
//
|
||||||
|
// Base Route on Endpoint ...
|
||||||
|
this.getActionRoute(XTermsServiceRoute.Remove),
|
||||||
|
//
|
||||||
|
// Params ...
|
||||||
|
[
|
||||||
|
{
|
||||||
|
key: XTermsParam.Language,
|
||||||
|
value: language,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Result ...
|
||||||
|
return this.httpClient.delete<boolean>(endPointPath, {
|
||||||
|
withCredentials: this.apiConfig.withCredentials,
|
||||||
|
headers,
|
||||||
|
observe,
|
||||||
|
params,
|
||||||
|
reportProgress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,169 @@
|
|||||||
|
import { Subject } from 'rxjs';
|
||||||
|
import {
|
||||||
|
XBasePushService,
|
||||||
|
XBaseEntityPushAction,
|
||||||
|
IXPushServiceTokenFetcher,
|
||||||
|
XFrameworkPushServiceConfig,
|
||||||
|
X_FRAMEWORK_PUSH_SERVICE_CONFIG,
|
||||||
|
X_FRAMEWORK_PUSH_SERVICE_TOKEN_FETCHER,
|
||||||
|
} from 'x-framework-push-service';
|
||||||
|
import { parseJson } from 'x-framework-core';
|
||||||
|
import { Inject, Injectable, Optional } from '@angular/core';
|
||||||
|
import { XStringDto } from '../../strings/models/x-string.dto';
|
||||||
|
import { HttpTransportType, ITransport } from '@microsoft/signalr';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XTermsPushService extends XBasePushService {
|
||||||
|
//
|
||||||
|
//#region Props ...
|
||||||
|
onTermsAdded$ = new Subject<{
|
||||||
|
model: XStringDto;
|
||||||
|
actorId: string;
|
||||||
|
}>();
|
||||||
|
onTermsDeleted$ = new Subject<{
|
||||||
|
model: XStringDto;
|
||||||
|
actorId: string;
|
||||||
|
}>();
|
||||||
|
onTermsUpdated$ = new Subject<{
|
||||||
|
model: XStringDto;
|
||||||
|
actorId: string;
|
||||||
|
}>();
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Constructor ...
|
||||||
|
constructor(
|
||||||
|
@Inject(X_FRAMEWORK_PUSH_SERVICE_CONFIG)
|
||||||
|
public config: XFrameworkPushServiceConfig,
|
||||||
|
@Optional()
|
||||||
|
@Inject(X_FRAMEWORK_PUSH_SERVICE_TOKEN_FETCHER)
|
||||||
|
public tokenFetcher?: IXPushServiceTokenFetcher
|
||||||
|
) {
|
||||||
|
super(config, tokenFetcher);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Abstraction ...
|
||||||
|
hubName(): string {
|
||||||
|
return 'termsHub';
|
||||||
|
}
|
||||||
|
|
||||||
|
requiredAccessToken(): boolean {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
transportType(): HttpTransportType | ITransport {
|
||||||
|
return HttpTransportType.LongPolling;
|
||||||
|
}
|
||||||
|
|
||||||
|
registerSubjects(): void {
|
||||||
|
super.registerSubjects();
|
||||||
|
|
||||||
|
//
|
||||||
|
this.onTermsAdded((model: XStringDto, actorId: string) => {
|
||||||
|
this.onTermsAdded$.next({ model, actorId });
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
this.onTermsDeleted((model: XStringDto, actorId: string) => {
|
||||||
|
this.onTermsDeleted$.next({ model, actorId });
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
this.onTermsUpdated((model: XStringDto, actorId: string) => {
|
||||||
|
this.onTermsUpdated$.next({ model, actorId });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Event Listeners ...
|
||||||
|
//
|
||||||
|
//#region Onners ...
|
||||||
|
/**
|
||||||
|
* Register Terms Added Event Listener ...
|
||||||
|
*
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
public onTermsAdded(callback: (model: XStringDto, actorId: string) => any) {
|
||||||
|
//
|
||||||
|
this.on(XBaseEntityPushAction.Add, (modelJson: string, actorId: string) => {
|
||||||
|
//
|
||||||
|
const model = parseJson<XStringDto>(modelJson);
|
||||||
|
callback(model, actorId);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register Terms Deleted Event Listener ...
|
||||||
|
*
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
public onTermsDeleted(callback: (model: XStringDto, actorId: string) => any) {
|
||||||
|
//
|
||||||
|
this.on(
|
||||||
|
XBaseEntityPushAction.Delete,
|
||||||
|
(modelJson: string, actorId: string) => {
|
||||||
|
//
|
||||||
|
const model = parseJson<XStringDto>(modelJson);
|
||||||
|
callback(model, actorId);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register Terms Updated Event Listener ...
|
||||||
|
*
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
public onTermsUpdated(callback: (model: XStringDto, actorId: string) => any) {
|
||||||
|
//
|
||||||
|
this.on(
|
||||||
|
XBaseEntityPushAction.Update,
|
||||||
|
(modelJson: string, actorId: string) => {
|
||||||
|
//
|
||||||
|
const model = parseJson<XStringDto>(modelJson);
|
||||||
|
callback(model, actorId);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Offers ...
|
||||||
|
/**
|
||||||
|
* UnRegister Added Event Listener ...
|
||||||
|
*
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
public offTermsAdded(callback?: (model: XStringDto, actorId: string) => any) {
|
||||||
|
this.off(XBaseEntityPushAction.Add, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UnRegister Deleted Event Listener ...
|
||||||
|
*
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
public offTermsDeleted(
|
||||||
|
callback?: (model: XStringDto, actorId: string) => any
|
||||||
|
) {
|
||||||
|
this.off(XBaseEntityPushAction.Delete, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UnRegister Updated Event Listener ...
|
||||||
|
*
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
public offTermsUpdated(
|
||||||
|
callback?: (model: XStringDto, actorId: string) => any
|
||||||
|
) {
|
||||||
|
this.off(XBaseEntityPushAction.Update, callback);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { XTermsPushService } from './services/x-terms.push.service';
|
||||||
|
import { XTermsProviderService } from './services/x-terms.provider.service';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Export All Provided Terms related Services ...
|
||||||
|
*/
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XTermsServices {
|
||||||
|
//
|
||||||
|
//#region Constructor ...
|
||||||
|
public constructor(
|
||||||
|
public termsPushService: XTermsPushService,
|
||||||
|
public termsProviderService: XTermsProviderService
|
||||||
|
) {}
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
/**
|
||||||
|
* All Available EndPoint Routes ...
|
||||||
|
*/
|
||||||
|
export enum XTermsServiceRoute {
|
||||||
|
Add = 'Terms/{language}',
|
||||||
|
Get = 'Terms/{language}',
|
||||||
|
Update = 'Terms/{language}',
|
||||||
|
Remove = 'Terms/{language}',
|
||||||
|
Has = 'Terms/{language}/Has',
|
||||||
|
Languages = 'Terms/Languages',
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All Params Which Used in Related Services ...
|
||||||
|
*/
|
||||||
|
export enum XTermsParam {
|
||||||
|
Terms = 'terms',
|
||||||
|
Language = 'language',
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import { InjectionToken } from '@angular/core';
|
||||||
|
import { XSaherElmApiSDKConfig } from '../config/x-saherelm-api-sdk.config';
|
||||||
|
|
||||||
|
export const X_SAHERELM_API_SDK_CONFIG = new InjectionToken<XSaherElmApiSDKConfig>(
|
||||||
|
'x_config'
|
||||||
|
);
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
import { isArray, isObject } from 'x-framework-core';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* since for better handling soft deleted in database from api side the deleted
|
||||||
|
* property added to all XEntities, for better comparing objects we have to delete it.
|
||||||
|
* this method do this for us ...
|
||||||
|
*
|
||||||
|
* @param model the input object
|
||||||
|
* @returns clear object
|
||||||
|
*/
|
||||||
|
export function prepareModel<T>(model: T) {
|
||||||
|
//
|
||||||
|
if (!isObject(model) || isArray(model)) {
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
delete (model as any)['deleted'];
|
||||||
|
|
||||||
|
//
|
||||||
|
return model;
|
||||||
|
}
|
||||||
@@ -0,0 +1,286 @@
|
|||||||
|
import {
|
||||||
|
toArray,
|
||||||
|
hasChild,
|
||||||
|
XExceptionIDs,
|
||||||
|
throwException,
|
||||||
|
XOneOrManyType,
|
||||||
|
} from 'x-framework-core';
|
||||||
|
import { XUserProfileDto } from 'x-framework-identity-sdk';
|
||||||
|
import { XUserRoleInfo, XAvailableRoles } from '../typings/x-role.typings';
|
||||||
|
|
||||||
|
export function toRoleInfo(user: XUserProfileDto): XUserRoleInfo {
|
||||||
|
//
|
||||||
|
if (!user) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
const result: XUserRoleInfo = {
|
||||||
|
isAdmin: hasChild(user.roles) && user.roles.includes(XAvailableRoles.Admin),
|
||||||
|
isResponsibleManager:
|
||||||
|
hasChild(user.roles) &&
|
||||||
|
user.roles.includes(XAvailableRoles.ResponsibleManager),
|
||||||
|
isJournalist:
|
||||||
|
hasChild(user.roles) && user.roles.includes(XAvailableRoles.Journalist),
|
||||||
|
isChiefClerk:
|
||||||
|
hasChild(user.roles) && user.roles.includes(XAvailableRoles.ChiefClerk),
|
||||||
|
isChiefClerkAssistant:
|
||||||
|
hasChild(user.roles) &&
|
||||||
|
user.roles.includes(XAvailableRoles.ChiefClerkAssistant),
|
||||||
|
isActuary:
|
||||||
|
hasChild(user.roles) && user.roles.includes(XAvailableRoles.Actuary),
|
||||||
|
isActuaryAssistant:
|
||||||
|
hasChild(user.roles) &&
|
||||||
|
user.roles.includes(XAvailableRoles.ActuaryAssistant),
|
||||||
|
isReporter:
|
||||||
|
hasChild(user.roles) && user.roles.includes(XAvailableRoles.Reporter),
|
||||||
|
isReporterAssistant:
|
||||||
|
hasChild(user.roles) &&
|
||||||
|
user.roles.includes(XAvailableRoles.ReporterAssistant),
|
||||||
|
isAgent: hasChild(user.roles) && user.roles.includes(XAvailableRoles.Agent),
|
||||||
|
isUser: hasChild(user.roles) && user.roles.includes(XAvailableRoles.User),
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function toRoleInfoByRoles(roles: string[]): XUserRoleInfo {
|
||||||
|
//
|
||||||
|
if (!hasChild(roles)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
const result: XUserRoleInfo = {
|
||||||
|
isAdmin: hasChild(roles) && roles.includes(XAvailableRoles.Admin),
|
||||||
|
isResponsibleManager:
|
||||||
|
hasChild(roles) && roles.includes(XAvailableRoles.ResponsibleManager),
|
||||||
|
isJournalist: hasChild(roles) && roles.includes(XAvailableRoles.Journalist),
|
||||||
|
isChiefClerk: hasChild(roles) && roles.includes(XAvailableRoles.ChiefClerk),
|
||||||
|
isChiefClerkAssistant:
|
||||||
|
hasChild(roles) && roles.includes(XAvailableRoles.ChiefClerkAssistant),
|
||||||
|
isActuary: hasChild(roles) && roles.includes(XAvailableRoles.Actuary),
|
||||||
|
isActuaryAssistant:
|
||||||
|
hasChild(roles) && roles.includes(XAvailableRoles.ActuaryAssistant),
|
||||||
|
isReporter: hasChild(roles) && roles.includes(XAvailableRoles.Reporter),
|
||||||
|
isReporterAssistant:
|
||||||
|
hasChild(roles) && roles.includes(XAvailableRoles.ReporterAssistant),
|
||||||
|
isAgent: hasChild(roles) && roles.includes(XAvailableRoles.Agent),
|
||||||
|
isUser: hasChild(roles) && roles.includes(XAvailableRoles.User),
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getTopRoleByRoleInfo(roleInfo: XUserRoleInfo) {
|
||||||
|
//
|
||||||
|
if (!roleInfo) {
|
||||||
|
throwException(XExceptionIDs.InvalidArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (roleInfo.isAdmin) {
|
||||||
|
return XAvailableRoles.Admin;
|
||||||
|
} else if (roleInfo.isResponsibleManager) {
|
||||||
|
return XAvailableRoles.ResponsibleManager;
|
||||||
|
} else if (roleInfo.isJournalist) {
|
||||||
|
return XAvailableRoles.Journalist;
|
||||||
|
} else if (roleInfo.isChiefClerk) {
|
||||||
|
return XAvailableRoles.ChiefClerk;
|
||||||
|
} else if (roleInfo.isChiefClerkAssistant) {
|
||||||
|
return XAvailableRoles.ChiefClerkAssistant;
|
||||||
|
} else if (roleInfo.isActuary) {
|
||||||
|
return XAvailableRoles.Actuary;
|
||||||
|
} else if (roleInfo.isActuaryAssistant) {
|
||||||
|
return XAvailableRoles.ActuaryAssistant;
|
||||||
|
} else if (roleInfo.isReporter) {
|
||||||
|
return XAvailableRoles.Reporter;
|
||||||
|
} else if (roleInfo.isReporterAssistant) {
|
||||||
|
return XAvailableRoles.ReporterAssistant;
|
||||||
|
} else if (roleInfo.isAgent) {
|
||||||
|
return XAvailableRoles.Agent;
|
||||||
|
} else if (roleInfo.isUser) {
|
||||||
|
return XAvailableRoles.User;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getTopRoleByRoles(roles: string[]) {
|
||||||
|
//
|
||||||
|
const roleInfo = toRoleInfoByRoles(roles);
|
||||||
|
if (!roleInfo) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return getTopRoleByRoleInfo(roleInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getTopRoleByProfile(user: XUserProfileDto) {
|
||||||
|
//
|
||||||
|
const roleInfo = toRoleInfo(user);
|
||||||
|
if (!roleInfo) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return getTopRoleByRoleInfo(roleInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function checkIsInRoleByInfo(
|
||||||
|
roles: XOneOrManyType<XAvailableRoles>,
|
||||||
|
roleInfo: XUserRoleInfo
|
||||||
|
): boolean {
|
||||||
|
//
|
||||||
|
let result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Normalize Roles ...
|
||||||
|
const normalRoles = toArray(roles);
|
||||||
|
|
||||||
|
//
|
||||||
|
for (const role of normalRoles) {
|
||||||
|
switch (role) {
|
||||||
|
//
|
||||||
|
case XAvailableRoles.Admin:
|
||||||
|
result = result || roleInfo.isAdmin;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.ResponsibleManager:
|
||||||
|
result = result || roleInfo.isResponsibleManager;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.Journalist:
|
||||||
|
result = result || roleInfo.isJournalist;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.ChiefClerk:
|
||||||
|
result = result || roleInfo.isChiefClerk;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.ChiefClerkAssistant:
|
||||||
|
result = result || roleInfo.isChiefClerkAssistant;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.Actuary:
|
||||||
|
result = result || roleInfo.isActuary;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.ActuaryAssistant:
|
||||||
|
result = result || roleInfo.isActuaryAssistant;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.Reporter:
|
||||||
|
result = result || roleInfo.isReporter;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.ReporterAssistant:
|
||||||
|
result = result || roleInfo.isReporterAssistant;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.Agent:
|
||||||
|
result = result || roleInfo.isAgent;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.User:
|
||||||
|
result = result || roleInfo.isUser;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
default:
|
||||||
|
result = result || false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function checkIsInRoleByUser(
|
||||||
|
role: XAvailableRoles,
|
||||||
|
user: XUserProfileDto
|
||||||
|
): boolean {
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
if (!role || !user) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
const roleInfo = toRoleInfo(user);
|
||||||
|
if (!roleInfo) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
switch (role) {
|
||||||
|
//
|
||||||
|
case XAvailableRoles.Admin:
|
||||||
|
return roleInfo.isAdmin;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.ResponsibleManager:
|
||||||
|
return roleInfo.isResponsibleManager;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.Journalist:
|
||||||
|
return roleInfo.isJournalist;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.ChiefClerk:
|
||||||
|
return roleInfo.isChiefClerk;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.ChiefClerkAssistant:
|
||||||
|
return roleInfo.isChiefClerkAssistant;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.Actuary:
|
||||||
|
return roleInfo.isActuary;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.ActuaryAssistant:
|
||||||
|
return roleInfo.isActuaryAssistant;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.Reporter:
|
||||||
|
return roleInfo.isReporter;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.ReporterAssistant:
|
||||||
|
return roleInfo.isReporterAssistant;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.Agent:
|
||||||
|
return roleInfo.isAgent;
|
||||||
|
|
||||||
|
//
|
||||||
|
case XAvailableRoles.User:
|
||||||
|
return roleInfo.isUser;
|
||||||
|
|
||||||
|
//
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function extractAvaialableRoles() {
|
||||||
|
//
|
||||||
|
const AllRoles = Object.assign({}, XAvailableRoles);
|
||||||
|
let result = Object.values(AllRoles);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
import {
|
||||||
|
hasChild,
|
||||||
|
XKeyValue,
|
||||||
|
isNullOrUndefined,
|
||||||
|
isNullOrEmptyString,
|
||||||
|
} from 'x-framework-core';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare a route by replacing it's params by providing values ...
|
||||||
|
*/
|
||||||
|
export function fillRouteParams(
|
||||||
|
route: string,
|
||||||
|
params?: Array<XKeyValue<string, string>>
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
let result = '';
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
if (isNullOrEmptyString(route)) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Params Has Child ...
|
||||||
|
if (!isNullOrUndefined(params) && hasChild(params)) {
|
||||||
|
//
|
||||||
|
result = route;
|
||||||
|
for (let param of params) {
|
||||||
|
//
|
||||||
|
const key = `{${param.key}}`;
|
||||||
|
result = result.replace(key, param.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
//
|
||||||
|
//#region Custom Header and Params ...
|
||||||
|
export enum XCHeader {
|
||||||
|
Role = 'role',
|
||||||
|
ForceRole = 'forceRole',
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Params ...
|
||||||
|
/**
|
||||||
|
* Params Usually Used in Query Strings ...
|
||||||
|
*/
|
||||||
|
export enum XBaseParams {
|
||||||
|
XId = 'id',
|
||||||
|
XIds = 'ids',
|
||||||
|
XSoftDelete = 'softDelete',
|
||||||
|
XIgnoreSoftDeleteds = 'ignoreSoftDeleteds',
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* prepare all Route Params which used in Account Services Endpoints ...
|
||||||
|
*/
|
||||||
|
export enum XBaseEndPointParam {
|
||||||
|
XId = '{xId}',
|
||||||
|
XIds = '{xIds}',
|
||||||
|
XHash = '{xHash}',
|
||||||
|
XDate = '{xDate}',
|
||||||
|
XQuery = '{xQuery}',
|
||||||
|
XTitle = '{xTitle}',
|
||||||
|
XIdentifier = '{xIdentifier}',
|
||||||
|
XConnectionID = '{xConnectionId}',
|
||||||
|
XConnectionIDs = '{xConnectionIds}',
|
||||||
|
XUserSelectByParam = '{xUserSelectByParam}',
|
||||||
|
XIgnoreSoftDeleteds = '{xIgnoreSoftDeleteds}',
|
||||||
|
XUserSelectByParams = '{xUserSelectByParams}',
|
||||||
|
}
|
||||||
|
export type XBaseEndPointParams = keyof typeof XBaseEndPointParam;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All Commonly Used EndPoints Actions ...
|
||||||
|
*/
|
||||||
|
export enum XBaseEndPointAction {
|
||||||
|
//
|
||||||
|
// TODO: Complete this ...
|
||||||
|
Get = '{xId}',
|
||||||
|
GetAll = '',
|
||||||
|
FindOne = 'FindOne/{xQuery}',
|
||||||
|
FindMany = 'FindMany/{xQuery}',
|
||||||
|
Query = 'Query',
|
||||||
|
RequestPage = 'RequestPage',
|
||||||
|
Add = '',
|
||||||
|
AddOrUpdate = 'AddOrUpdate',
|
||||||
|
AddMany = 'AddMany',
|
||||||
|
Update = '{xId}',
|
||||||
|
UpdateMany = 'UpdateMany',
|
||||||
|
IsExists = '{xId}/IsExists',
|
||||||
|
Remove = '{xId}',
|
||||||
|
RemoveMany = 'RemoveMany',
|
||||||
|
}
|
||||||
|
export type XBaseEndPointActions = keyof typeof XBaseEndPointAction;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Api EndPoints ...
|
||||||
|
/**
|
||||||
|
* Represent all API End Points ...
|
||||||
|
*/
|
||||||
|
export enum XApiEndPoint {
|
||||||
|
TagsEntity = 'Entities/Tags',
|
||||||
|
TagsService = 'Services/Tags',
|
||||||
|
FilesEntity = 'Entities/Files',
|
||||||
|
FilesService = 'Services/Files',
|
||||||
|
Configurations = 'Configurations',
|
||||||
|
StringsEntity = 'Entities/Strings',
|
||||||
|
StringsService = 'Services/Strings',
|
||||||
|
WebinarsEntity = 'Entities/Webinars',
|
||||||
|
WebinarsService = 'Services/Webinars',
|
||||||
|
TermsAndConditions = 'Configurations',
|
||||||
|
}
|
||||||
|
|
||||||
|
export declare type XApiEndPoints = keyof typeof XApiEndPoint | string;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Configuration ...
|
||||||
|
export enum XConfigurationEndPoint {
|
||||||
|
}
|
||||||
|
|
||||||
|
export type XConfigurationEndPoints = keyof typeof XConfigurationEndPoint;
|
||||||
|
//#endregion
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import { HttpHeaders } from '@angular/common/http';
|
||||||
|
import { isNullOrEmptyString, isNullOrUndefined } from 'x-framework-core';
|
||||||
|
|
||||||
|
export enum XPushHeaderKeys {
|
||||||
|
ConnectionId = 'requestID',
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add Connection Id to Headers ...
|
||||||
|
*
|
||||||
|
* @param connectionId user connection id ...
|
||||||
|
* @param headers an instance of HttpHeaders ...
|
||||||
|
*
|
||||||
|
* @returns HttpHeaders instance
|
||||||
|
*/
|
||||||
|
export function applyConnectionIdToHeader(
|
||||||
|
connectionId?: string,
|
||||||
|
headers?: HttpHeaders
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
// New Instance of Headers if Not provided ...
|
||||||
|
if (isNullOrUndefined(headers)) {
|
||||||
|
headers = new HttpHeaders();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (!isNullOrEmptyString(connectionId)) {
|
||||||
|
headers = headers.set(XPushHeaderKeys.ConnectionId, connectionId);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return headers;
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
export enum XAvailableRoles {
|
||||||
|
Admin = 'admin',
|
||||||
|
ResponsibleManager = 'responsible_manager',
|
||||||
|
Journalist = 'journalist',
|
||||||
|
ChiefClerk = 'chief_clerk',
|
||||||
|
ChiefClerkAssistant = 'chief_clerk_assistant',
|
||||||
|
Actuary = 'actuary',
|
||||||
|
ActuaryAssistant = 'actuary_assistant',
|
||||||
|
Reporter = 'reporter',
|
||||||
|
ReporterAssistant = 'reporter_assistant',
|
||||||
|
Agent = 'agent',
|
||||||
|
User = 'user',
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface XUserRoleInfo {
|
||||||
|
isAdmin: boolean;
|
||||||
|
isResponsibleManager: boolean;
|
||||||
|
isJournalist: boolean;
|
||||||
|
isChiefClerk: boolean;
|
||||||
|
isChiefClerkAssistant: boolean;
|
||||||
|
isActuary: boolean;
|
||||||
|
isActuaryAssistant: boolean;
|
||||||
|
isReporter: boolean;
|
||||||
|
isReporterAssistant: boolean;
|
||||||
|
isAgent: boolean;
|
||||||
|
isUser: boolean;
|
||||||
|
}
|
||||||
@@ -0,0 +1,199 @@
|
|||||||
|
import {
|
||||||
|
XBaseDto,
|
||||||
|
typeGuard,
|
||||||
|
isSameObject,
|
||||||
|
XBaseNumberIDDto,
|
||||||
|
isNullOrUndefined,
|
||||||
|
isNullOrEmptyString,
|
||||||
|
} from 'x-framework-core';
|
||||||
|
import {
|
||||||
|
XResourceDto,
|
||||||
|
prepareResourceDtoFields,
|
||||||
|
} from '../../strings/models/x-string.dto';
|
||||||
|
import { preparePersonDtoFields, XPersonDto } from '../../models/x-person.dto';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describe Webinar Types ...
|
||||||
|
*/
|
||||||
|
export enum XWebinarType {
|
||||||
|
Public = 0,
|
||||||
|
Private = 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
export function ToWebinarType(index: number) {
|
||||||
|
//
|
||||||
|
if (index == 0) {
|
||||||
|
return XWebinarType.Public;
|
||||||
|
} else if (index == 1) {
|
||||||
|
return XWebinarType.Private;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represent a Webinar Model ...
|
||||||
|
*/
|
||||||
|
export interface XWebinarDto extends XBaseDto {
|
||||||
|
id: string;
|
||||||
|
ownerId: string;
|
||||||
|
createdOn: Date;
|
||||||
|
enabled: boolean;
|
||||||
|
type: XWebinarType;
|
||||||
|
owner?: XPersonDto;
|
||||||
|
title: XResourceDto;
|
||||||
|
description: XResourceDto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default Model ...
|
||||||
|
*/
|
||||||
|
export const defaultWebinarDto: XWebinarDto = {
|
||||||
|
id: '',
|
||||||
|
ownerId: '',
|
||||||
|
enabled: false,
|
||||||
|
type: undefined,
|
||||||
|
owner: undefined,
|
||||||
|
title: undefined,
|
||||||
|
createdOn: undefined,
|
||||||
|
description: undefined,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare Model Fields ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function prepareWebinarDtoFields(model?: XWebinarDto) {
|
||||||
|
//
|
||||||
|
if (isNullOrUndefined(model)) {
|
||||||
|
model = {
|
||||||
|
...defaultWebinarDto,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
model = {
|
||||||
|
id: isNullOrEmptyString(model.id) ? defaultWebinarDto.id : model.id,
|
||||||
|
type: isNullOrUndefined(model.type) ? defaultWebinarDto.type : model.type,
|
||||||
|
enabled: isNullOrUndefined(model.enabled)
|
||||||
|
? defaultWebinarDto.enabled
|
||||||
|
: model.enabled,
|
||||||
|
ownerId: isNullOrEmptyString(model.ownerId)
|
||||||
|
? defaultWebinarDto.ownerId
|
||||||
|
: model.ownerId,
|
||||||
|
createdOn: isNullOrUndefined(model.createdOn)
|
||||||
|
? defaultWebinarDto.createdOn
|
||||||
|
: model.createdOn,
|
||||||
|
owner: isNullOrUndefined(model.owner)
|
||||||
|
? defaultWebinarDto.owner
|
||||||
|
: preparePersonDtoFields(model.owner),
|
||||||
|
title: isNullOrUndefined(model.title)
|
||||||
|
? defaultWebinarDto.title
|
||||||
|
: prepareResourceDtoFields(model.title),
|
||||||
|
description: isNullOrUndefined(model.description)
|
||||||
|
? defaultWebinarDto.description
|
||||||
|
: prepareResourceDtoFields(model.description),
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Model is Default or not ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function isDefaultWebinarModel(model?: XWebinarDto) {
|
||||||
|
return isSameObject(prepareWebinarDtoFields(model), defaultWebinarDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Webinar Subscriber Model ...
|
||||||
|
*/
|
||||||
|
export interface XWebinarSubscriberDto extends XBaseNumberIDDto {
|
||||||
|
webinarId: string;
|
||||||
|
subscribedOn: Date;
|
||||||
|
subscriberId: string;
|
||||||
|
subscriber: XPersonDto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default Model ...
|
||||||
|
*/
|
||||||
|
export const defaultWebinarSubscriberDto: XWebinarSubscriberDto = {
|
||||||
|
id: undefined,
|
||||||
|
webinarId: '',
|
||||||
|
subscriberId: '',
|
||||||
|
subscriber: undefined,
|
||||||
|
subscribedOn: undefined,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare Model Fields ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function prepareWebinarSubscriberDtoFields(
|
||||||
|
model?: XWebinarSubscriberDto
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
if (isNullOrUndefined(model)) {
|
||||||
|
model = {
|
||||||
|
...defaultWebinarSubscriberDto,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
model = {
|
||||||
|
id:
|
||||||
|
isNullOrUndefined(model.id) || model.id <= 0
|
||||||
|
? defaultWebinarSubscriberDto.id
|
||||||
|
: model.id,
|
||||||
|
webinarId: isNullOrEmptyString(model.webinarId)
|
||||||
|
? defaultWebinarSubscriberDto.webinarId
|
||||||
|
: model.webinarId,
|
||||||
|
subscriberId: isNullOrEmptyString(model.subscriberId)
|
||||||
|
? defaultWebinarSubscriberDto.subscriberId
|
||||||
|
: model.subscriberId,
|
||||||
|
subscribedOn: isNullOrUndefined(model.subscribedOn)
|
||||||
|
? defaultWebinarSubscriberDto.subscribedOn
|
||||||
|
: model.subscribedOn,
|
||||||
|
subscriber: isNullOrUndefined(model.subscriber)
|
||||||
|
? defaultWebinarSubscriberDto.subscriber
|
||||||
|
: preparePersonDtoFields(model.subscriber),
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Model is Default or not ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function isDefaultWebinarSubscriberDto(model?: XWebinarSubscriberDto) {
|
||||||
|
return isSameObject(
|
||||||
|
prepareWebinarSubscriberDtoFields(model),
|
||||||
|
defaultWebinarSubscriberDto
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Model Type Guard ...
|
||||||
|
*/
|
||||||
|
export const isXWebinarDto = typeGuard<XWebinarDto>([
|
||||||
|
'id',
|
||||||
|
'ownerId',
|
||||||
|
'type',
|
||||||
|
'createdOn',
|
||||||
|
'description',
|
||||||
|
'title',
|
||||||
|
]);
|
||||||
+167
@@ -0,0 +1,167 @@
|
|||||||
|
import { Subject } from 'rxjs';
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { isNullOrUndefined, parseJson } from 'x-framework-core';
|
||||||
|
import { XWebinarEntityPushAction } from '../x-webinar.typings';
|
||||||
|
import { XBaseEntityPushService } from 'x-framework-push-service';
|
||||||
|
import { HttpTransportType, ITransport } from '@microsoft/signalr';
|
||||||
|
import { XWebinarDto, XWebinarSubscriberDto } from '../models/x-webinar.dto';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XWebinarEntityPushService extends XBaseEntityPushService<XWebinarDto> {
|
||||||
|
//
|
||||||
|
//#region Props ...
|
||||||
|
onSubscribed$ = new Subject<{
|
||||||
|
model: XWebinarSubscriberDto;
|
||||||
|
actorId: string;
|
||||||
|
}>();
|
||||||
|
onUnsubscribed$ = new Subject<{
|
||||||
|
model: XWebinarSubscriberDto;
|
||||||
|
actorId: string;
|
||||||
|
}>();
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Abstracts ...
|
||||||
|
hubName(): string {
|
||||||
|
return 'webinarEntityHub';
|
||||||
|
}
|
||||||
|
|
||||||
|
requiredAccessToken(): boolean {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
transportType(): HttpTransportType | ITransport {
|
||||||
|
return HttpTransportType.LongPolling;
|
||||||
|
}
|
||||||
|
|
||||||
|
registerSubjects(): void {
|
||||||
|
super.registerSubjects();
|
||||||
|
|
||||||
|
//
|
||||||
|
this.onSubscribed((model: XWebinarSubscriberDto, actorId: string) => {
|
||||||
|
this.onSubscribed$.next({ model, actorId });
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
this.onUnsubscribed((model: XWebinarSubscriberDto, actorId: string) => {
|
||||||
|
this.onUnsubscribed$.next({ model, actorId });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Actions ...
|
||||||
|
/**
|
||||||
|
* Fire New Subscriber Action ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
public async subscribe(model: XWebinarSubscriberDto) {
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
let isValid = !isNullOrUndefined(model);
|
||||||
|
if (!isValid) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
await this.invoke(
|
||||||
|
XWebinarEntityPushAction.Subscribe,
|
||||||
|
JSON.stringify(model)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fire Unsubscribe Action ...
|
||||||
|
*
|
||||||
|
* @param model
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
public async unsubscribe(model: XWebinarSubscriberDto) {
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
let isValid = !isNullOrUndefined(model);
|
||||||
|
if (!isValid) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
await this.invoke(
|
||||||
|
XWebinarEntityPushAction.Unsubscribe,
|
||||||
|
JSON.stringify(model)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Event Listeners ...
|
||||||
|
//
|
||||||
|
//#region Onners ...
|
||||||
|
/**
|
||||||
|
* Register Subscribe Event Listener ...
|
||||||
|
*
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
public onSubscribed(
|
||||||
|
callback: (model: XWebinarSubscriberDto, actorId: string) => any
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
this.on(
|
||||||
|
XWebinarEntityPushAction.Subscribe,
|
||||||
|
(modelJson: string, actorId: string) => {
|
||||||
|
//
|
||||||
|
const model = parseJson<XWebinarSubscriberDto>(modelJson);
|
||||||
|
callback(model, actorId);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register Unsubscribe Event Listener ...
|
||||||
|
*
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
public onUnsubscribed(
|
||||||
|
callback: (model: XWebinarSubscriberDto, actorId: string) => any
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
this.on(
|
||||||
|
XWebinarEntityPushAction.Unsubscribe,
|
||||||
|
(modelJson: string, actorId: string) => {
|
||||||
|
//
|
||||||
|
const model = parseJson<XWebinarSubscriberDto>(modelJson);
|
||||||
|
callback(model, actorId);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Offers ...
|
||||||
|
/**
|
||||||
|
* UnRegister Subscribe Event Listener ...
|
||||||
|
*
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
public offSubscribed(
|
||||||
|
callback?: (model: XWebinarSubscriberDto, actorId: string) => any
|
||||||
|
) {
|
||||||
|
this.off(XWebinarEntityPushAction.Subscribe, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UnRegister Unsubscribe Event Listener ...
|
||||||
|
*
|
||||||
|
* @param callback
|
||||||
|
*/
|
||||||
|
public offUnsubscribed(
|
||||||
|
callback?: (model: XWebinarSubscriberDto, actorId: string) => any
|
||||||
|
) {
|
||||||
|
this.off(XWebinarEntityPushAction.Unsubscribe, callback);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
import { Router } from '@angular/router';
|
||||||
|
import { HttpClient } from '@angular/common/http';
|
||||||
|
import { Inject, Injectable } from '@angular/core';
|
||||||
|
import { XWebinarDto } from '../models/x-webinar.dto';
|
||||||
|
import { XApiEndPoint } from '../../typings/x-endpoint.typings';
|
||||||
|
import { XBaseEntityService } from '../../base/x-base-entity.service';
|
||||||
|
import { X_API_CONFIG, XApiConfiguration } from 'x-framework-identity-sdk';
|
||||||
|
import { X_SAHERELM_API_SDK_CONFIG } from '../../tokens/x-injectable-tokens';
|
||||||
|
import { XSaherElmApiSDKConfig } from '../../config/x-saherelm-api-sdk.config';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides all Entity Actions as a Service ...
|
||||||
|
*/
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XWebinarEntityService extends XBaseEntityService<
|
||||||
|
XWebinarDto,
|
||||||
|
string
|
||||||
|
> {
|
||||||
|
//
|
||||||
|
//#region Constructor ...
|
||||||
|
constructor(
|
||||||
|
protected router: Router,
|
||||||
|
protected httpClient: HttpClient,
|
||||||
|
@Inject(X_SAHERELM_API_SDK_CONFIG) config: XSaherElmApiSDKConfig,
|
||||||
|
@Inject(X_API_CONFIG) apiConfig: XApiConfiguration
|
||||||
|
) {
|
||||||
|
super(
|
||||||
|
XApiEndPoint.WebinarsEntity,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
httpClient,
|
||||||
|
config,
|
||||||
|
apiConfig
|
||||||
|
);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,260 @@
|
|||||||
|
import { Subject } from 'rxjs';
|
||||||
|
import {
|
||||||
|
XRTCPeerService,
|
||||||
|
XHubConnectionDto,
|
||||||
|
XBaseWebRTCService,
|
||||||
|
IXPushServiceTokenFetcher,
|
||||||
|
XFrameworkPushServiceConfig,
|
||||||
|
X_FRAMEWORK_PUSH_SERVICE_CONFIG,
|
||||||
|
X_FRAMEWORK_PUSH_SERVICE_TOKEN_FETCHER,
|
||||||
|
} from 'x-framework-push-service';
|
||||||
|
import { isNullOrEmptyString } from 'x-framework-core';
|
||||||
|
import { XWebinarPushAction } from '../x-webinar.typings';
|
||||||
|
import { Inject, Injectable, Optional } from '@angular/core';
|
||||||
|
import { HttpTransportType, ITransport } from '@microsoft/signalr';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XWebinarPushService extends XBaseWebRTCService {
|
||||||
|
//
|
||||||
|
//#region Props ...
|
||||||
|
onViewerJoined$ = new Subject<{
|
||||||
|
viewerId: string;
|
||||||
|
webinarId: string;
|
||||||
|
userId: string;
|
||||||
|
username?: string;
|
||||||
|
}>();
|
||||||
|
onViewerLeaved$ = new Subject<{
|
||||||
|
viewerId: string;
|
||||||
|
webinarId: string;
|
||||||
|
userId: string;
|
||||||
|
username?: string;
|
||||||
|
}>();
|
||||||
|
onWebinarOpened$ = new Subject<string>();
|
||||||
|
onWebinarClosed$ = new Subject<string>();
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Constructor ...
|
||||||
|
constructor(
|
||||||
|
public rtcPeerService: XRTCPeerService,
|
||||||
|
@Inject(X_FRAMEWORK_PUSH_SERVICE_CONFIG)
|
||||||
|
public config: XFrameworkPushServiceConfig,
|
||||||
|
@Optional()
|
||||||
|
@Inject(X_FRAMEWORK_PUSH_SERVICE_TOKEN_FETCHER)
|
||||||
|
public tokenFetcher?: IXPushServiceTokenFetcher
|
||||||
|
) {
|
||||||
|
super(config, tokenFetcher);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Abstracts ...
|
||||||
|
hubName(): string {
|
||||||
|
return 'webinarHub';
|
||||||
|
}
|
||||||
|
|
||||||
|
requiredAccessToken(): boolean {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
transportType(): HttpTransportType | ITransport {
|
||||||
|
return HttpTransportType.ServerSentEvents;
|
||||||
|
}
|
||||||
|
|
||||||
|
skipNegotiation: false
|
||||||
|
|
||||||
|
registerSubjects(): void {
|
||||||
|
super.registerSubjects();
|
||||||
|
|
||||||
|
//
|
||||||
|
this.onWebinarClosed((webinarId: string) => {
|
||||||
|
this.onWebinarClosed$.next(webinarId);
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
this.onWebinarClosed((webinarId: string) => {
|
||||||
|
this.onWebinarClosed$.next(webinarId);
|
||||||
|
});
|
||||||
|
|
||||||
|
//
|
||||||
|
this.onViewerJoined(
|
||||||
|
(
|
||||||
|
viewerId: string,
|
||||||
|
webinarId: string,
|
||||||
|
userId: string,
|
||||||
|
username?: string
|
||||||
|
) => {
|
||||||
|
//
|
||||||
|
this.onViewerJoined$.next({
|
||||||
|
userId,
|
||||||
|
viewerId,
|
||||||
|
username,
|
||||||
|
webinarId,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
this.onViewerLeaved(
|
||||||
|
(
|
||||||
|
viewerId: string,
|
||||||
|
webinarId: string,
|
||||||
|
userId: string,
|
||||||
|
username?: string
|
||||||
|
) => {
|
||||||
|
//
|
||||||
|
this.onViewerLeaved$.next({
|
||||||
|
userId,
|
||||||
|
viewerId,
|
||||||
|
username,
|
||||||
|
webinarId,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Actions ...
|
||||||
|
public async openWebinar(webinarId: string) {
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
if (isNullOrEmptyString(webinarId)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
await this.invoke(XWebinarPushAction.WebinarOpened, webinarId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async closeWebinar(webinarId: string) {
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
if (isNullOrEmptyString(webinarId)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
await this.invoke(XWebinarPushAction.WebinarClosed, webinarId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async joinWebinar(webinarId: string) {
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
if (isNullOrEmptyString(webinarId)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
await this.invoke(XWebinarPushAction.ViewerJoined, webinarId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async leaveWebinar(webinarId: string) {
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
if (isNullOrEmptyString(webinarId)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
await this.invoke(XWebinarPushAction.ViewerLeaved, webinarId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async webinarVisitors(webinarId: string) {
|
||||||
|
//
|
||||||
|
let result: Array<XHubConnectionDto> = [];
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
if (isNullOrEmptyString(webinarId)) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = await this.invoke<Array<XHubConnectionDto>>(XWebinarPushAction.WebinarVisitors, webinarId);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async sendMessage(webinarId: string, message: string) {
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
if (isNullOrEmptyString(webinarId)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
await this.invoke(XWebinarPushAction.Message, webinarId, message);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Event Handlers ...
|
||||||
|
//
|
||||||
|
//#region Onners ...
|
||||||
|
public onWebinarOpened(callback: (webinarId: string) => any) {
|
||||||
|
this.on(XWebinarPushAction.WebinarOpened, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
public onWebinarClosed(callback: (webinarId?: string) => any) {
|
||||||
|
this.on(XWebinarPushAction.WebinarClosed, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
public onViewerJoined(
|
||||||
|
callback: (
|
||||||
|
connectionId: string,
|
||||||
|
webinarId: string,
|
||||||
|
userId: string,
|
||||||
|
username?: string
|
||||||
|
) => any
|
||||||
|
) {
|
||||||
|
this.on(XWebinarPushAction.ViewerJoined, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
public onViewerLeaved(
|
||||||
|
callback: (
|
||||||
|
connectionId: string,
|
||||||
|
webinarId: string,
|
||||||
|
userId: string,
|
||||||
|
username?: string
|
||||||
|
) => any
|
||||||
|
) {
|
||||||
|
this.on(XWebinarPushAction.ViewerLeaved, callback);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//
|
||||||
|
//#region Offers ...
|
||||||
|
public offWebinarOpened(callback?: (webinarId: string) => any) {
|
||||||
|
this.off(XWebinarPushAction.WebinarOpened, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
public offWebinarClosed(callback?: (webinarId?: string) => any) {
|
||||||
|
this.off(XWebinarPushAction.WebinarClosed, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
public offViewerJoined(
|
||||||
|
callback?: (
|
||||||
|
connectionId: string,
|
||||||
|
webinarId: string,
|
||||||
|
userId: string,
|
||||||
|
username?: string
|
||||||
|
) => any
|
||||||
|
) {
|
||||||
|
this.off(XWebinarPushAction.ViewerJoined, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
public offViewerLeaved(
|
||||||
|
callback?: (
|
||||||
|
connectionId: string,
|
||||||
|
webinarId: string,
|
||||||
|
userId: string,
|
||||||
|
username?: string
|
||||||
|
) => any
|
||||||
|
) {
|
||||||
|
this.off(XWebinarPushAction.ViewerLeaved, callback);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
+39
@@ -0,0 +1,39 @@
|
|||||||
|
import { Router } from '@angular/router';
|
||||||
|
import { HttpClient } from '@angular/common/http';
|
||||||
|
import { Inject, Injectable } from '@angular/core';
|
||||||
|
import { XWebinarSubscriberDto } from '../models/x-webinar.dto';
|
||||||
|
import { XApiEndPoint } from '../../typings/x-endpoint.typings';
|
||||||
|
import { XBaseEntityService } from '../../base/x-base-entity.service';
|
||||||
|
import { X_API_CONFIG, XApiConfiguration } from 'x-framework-identity-sdk';
|
||||||
|
import { X_SAHERELM_API_SDK_CONFIG } from '../../tokens/x-injectable-tokens';
|
||||||
|
import { XSaherElmApiSDKConfig } from '../../config/x-saherelm-api-sdk.config';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides all Entity Actions as a Service ...
|
||||||
|
*/
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XWebinarSubscriberEntityService extends XBaseEntityService<
|
||||||
|
XWebinarSubscriberDto,
|
||||||
|
number
|
||||||
|
> {
|
||||||
|
//
|
||||||
|
//#region Constructor ...
|
||||||
|
constructor(
|
||||||
|
protected router: Router,
|
||||||
|
protected httpClient: HttpClient,
|
||||||
|
@Inject(X_SAHERELM_API_SDK_CONFIG) config: XSaherElmApiSDKConfig,
|
||||||
|
@Inject(X_API_CONFIG) apiConfig: XApiConfiguration
|
||||||
|
) {
|
||||||
|
super(
|
||||||
|
XApiEndPoint.WebinarsEntity,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
httpClient,
|
||||||
|
config,
|
||||||
|
apiConfig
|
||||||
|
);
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { XWebinarPushService } from './services/x-webinar.push.service';
|
||||||
|
import { XWebinarEntityService } from './services/x-webinar.entity.service';
|
||||||
|
import { XWebinarProviderService } from './services/x-webinar.provider.service';
|
||||||
|
import { XWebinarEntityPushService } from './services/x-webinar.entity.push.service';
|
||||||
|
import { XWebinarSubscriberEntityService } from './services/x-webinarsubscriber.entity.service';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Export All Provided Webinar related Services ...
|
||||||
|
*/
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XWebinarServices {
|
||||||
|
//
|
||||||
|
//#region Constructor ...
|
||||||
|
public constructor(
|
||||||
|
public webinarPushService: XWebinarPushService,
|
||||||
|
public webinarEntityService: XWebinarEntityService,
|
||||||
|
public webinarProviderService: XWebinarProviderService,
|
||||||
|
public webinarEntityPushService: XWebinarEntityPushService,
|
||||||
|
public webinarSubscriberEntityService: XWebinarSubscriberEntityService
|
||||||
|
) {}
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
/**
|
||||||
|
* All Available EndPoint Routes ...
|
||||||
|
*/
|
||||||
|
export enum XWebinarServiceRoute {
|
||||||
|
CreateWebinar = '',
|
||||||
|
GetWebinar = '{id}',
|
||||||
|
GetWebinars = 'All',
|
||||||
|
UpdateWebinar = '{id}',
|
||||||
|
RemoveWebinar = '{id}',
|
||||||
|
QueryWebinars = 'Query',
|
||||||
|
GetFiles = '{id}/Files',
|
||||||
|
GetTags = '{id}/Tags',
|
||||||
|
AttachTags = '{id}/Tags',
|
||||||
|
DetachTags = '{id}/Tags',
|
||||||
|
RemoveFiles = '{id}/Files',
|
||||||
|
UploadFiles = '{id}/Files',
|
||||||
|
QueryOwnedWebinars = 'Query/Owned',
|
||||||
|
GetSubscribers = '{id}/Subscribers',
|
||||||
|
QueryJoinableWebinars = 'Query/Joinable',
|
||||||
|
StreamFile = '{id}/Files/{fileId}/Stream',
|
||||||
|
Subscribe = '{id}/Subscribe/{subscriberId}',
|
||||||
|
QuerySubscribers = '{id}/Subscribers/Query',
|
||||||
|
DownloadFile = '{id}/Files/{fileId}/Download',
|
||||||
|
Unsubscribe = '{id}/Unsubscribe/{subscriberId}',
|
||||||
|
GetSubscriber = '{id}/Subscriber/{subscriberId}',
|
||||||
|
IsSubscribed = '{id}/IsSubscribed/{subscriberId}',
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All Params Which Used in Related Services ...
|
||||||
|
*/
|
||||||
|
export enum XWebinarParam {
|
||||||
|
Id = 'id',
|
||||||
|
Ids = 'ids',
|
||||||
|
Tags = 'tags',
|
||||||
|
Files = 'files',
|
||||||
|
FileId = 'fileId',
|
||||||
|
SubscriberId = 'subscriberId',
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Webinar Hub Actions ...
|
||||||
|
*/
|
||||||
|
export enum XWebinarPushAction {
|
||||||
|
/// <summary>
|
||||||
|
/// When a Webinar is Available to Join ...
|
||||||
|
/// </summary>
|
||||||
|
WebinarOpened = 'WebinarOpened',
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// When a Webinar Closed ...
|
||||||
|
/// </summary>
|
||||||
|
WebinarClosed = 'WebinarClosed',
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// When a Viewer is Joined to Webinar ...
|
||||||
|
/// </summary>
|
||||||
|
ViewerJoined = 'ViewerJoined',
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// When a Webinar Subscriber Leaved a Webinar ...
|
||||||
|
/// </summary>
|
||||||
|
ViewerLeaved = 'ViewerLeaved',
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieve Specified Webinar Visitors ...
|
||||||
|
/// </summary>
|
||||||
|
WebinarVisitors = 'WebinarVisitors',
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Send a Message to Webinar ...
|
||||||
|
/// </summary>
|
||||||
|
Message = 'Message',
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Webinar Entity Hub Actions ...
|
||||||
|
*/
|
||||||
|
export enum XWebinarEntityPushAction {
|
||||||
|
Subscribe = 'Subscribe',
|
||||||
|
Unsubscribe = 'Unsubscribe',
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { HttpClientModule } from '@angular/common/http';
|
||||||
|
import { XFrameworkCoreModule } from 'x-framework-core';
|
||||||
|
import { XFrameworkServicesModule } from 'x-framework-services';
|
||||||
|
import { XFrameworkIdentitySdkModule } from 'x-framework-identity-sdk';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [],
|
||||||
|
imports: [
|
||||||
|
CommonModule,
|
||||||
|
HttpClientModule,
|
||||||
|
XFrameworkCoreModule,
|
||||||
|
XFrameworkServicesModule,
|
||||||
|
XFrameworkIdentitySdkModule,
|
||||||
|
],
|
||||||
|
exports: [
|
||||||
|
CommonModule,
|
||||||
|
HttpClientModule,
|
||||||
|
XFrameworkCoreModule,
|
||||||
|
XFrameworkServicesModule,
|
||||||
|
XFrameworkIdentitySdkModule,
|
||||||
|
],
|
||||||
|
providers: [],
|
||||||
|
})
|
||||||
|
export class XSaherElmApiSdkModule {}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import { XLoggable } from 'x-framework-core';
|
||||||
|
import { Inject, Injectable } from '@angular/core';
|
||||||
|
import { XTagServices } from './tags/x-tag.services';
|
||||||
|
import { XFileServices } from './files/x-file.services';
|
||||||
|
import { XTermsServices } from './terms/x-terms.service';
|
||||||
|
import { XStringServices } from './strings/x-string.services';
|
||||||
|
import { XWebinarServices } from './webinars/x-webinar.services';
|
||||||
|
import { X_SAHERELM_API_SDK_CONFIG } from './tokens/x-injectable-tokens';
|
||||||
|
import { XSaherElmApiSDKConfig } from './config/x-saherelm-api-sdk.config';
|
||||||
|
import { XConfigurationsService } from './configurations/x-configurations.service';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root',
|
||||||
|
})
|
||||||
|
export class XSaherElmAPIService extends XLoggable {
|
||||||
|
//
|
||||||
|
//#region Constructor ...
|
||||||
|
constructor(
|
||||||
|
public tags: XTagServices,
|
||||||
|
public files: XFileServices,
|
||||||
|
public terms: XTermsServices,
|
||||||
|
public strings: XStringServices,
|
||||||
|
public webinars: XWebinarServices,
|
||||||
|
@Inject(X_SAHERELM_API_SDK_CONFIG)
|
||||||
|
public config: XSaherElmApiSDKConfig,
|
||||||
|
public configurationService: XConfigurationsService
|
||||||
|
) {
|
||||||
|
super(config);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* Public API Surface of x-framework-api-sdk
|
||||||
|
*/
|
||||||
|
//
|
||||||
|
// Base ...
|
||||||
|
export * from './lib/base/x-base.guard';
|
||||||
|
export * from './lib/base/x-base-entity.service';
|
||||||
|
export * from './lib/base/i-x-entity-actions.interface';
|
||||||
|
|
||||||
|
//
|
||||||
|
// Config ...
|
||||||
|
export * from './lib/config/x-saherelm-api-sdk.config';
|
||||||
|
|
||||||
|
//
|
||||||
|
// Models ...
|
||||||
|
export * from './lib/models/x-person.dto';
|
||||||
|
export * from './lib/models/x-reference.dto';
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tokens ...
|
||||||
|
export * from './lib/tokens/x-injectable-tokens';
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tools ...
|
||||||
|
export * from './lib/tools/x-role.tools';
|
||||||
|
export * from './lib/tools/x-model.tools';
|
||||||
|
export * from './lib/tools/x-route.tools';
|
||||||
|
|
||||||
|
//
|
||||||
|
// Services ...
|
||||||
|
export * from './lib/services/x-push-token-fetcher.service';
|
||||||
|
|
||||||
|
//
|
||||||
|
// Typings ...
|
||||||
|
export * from './lib/typings/x-role.typings';
|
||||||
|
export * from './lib/strings/x-string.typings';
|
||||||
|
export * from './lib/typings/x-endpoint.typings';
|
||||||
|
export * from './lib/typings/x-push-provider.typings';
|
||||||
|
|
||||||
|
//
|
||||||
|
// Guards ...
|
||||||
|
export * from './lib/guards/user.guard';
|
||||||
|
export * from './lib/guards/admin.guard';
|
||||||
|
export * from './lib/guards/agent.guard';
|
||||||
|
export * from './lib/guards/admin-or-agent.guard';
|
||||||
|
|
||||||
|
//
|
||||||
|
// Strings ...
|
||||||
|
export * from './lib/strings/x-string.typings';
|
||||||
|
export * from './lib/strings/x-string.services';
|
||||||
|
export * from './lib/strings/models/x-string.dto';
|
||||||
|
export * from './lib/configurations/x-configurations.service';
|
||||||
|
export * from './lib/strings/services/x-string.entity.service';
|
||||||
|
export * from './lib/strings/services/x-string.provider.service';
|
||||||
|
export * from './lib/strings/services/x-string.entity.push.service';
|
||||||
|
|
||||||
|
//
|
||||||
|
// Terms ...
|
||||||
|
export * from './lib/terms/x-terms.service';
|
||||||
|
export * from './lib/terms/x-terms.typings.dto';
|
||||||
|
export * from './lib/terms/services/x-terms.push.service';
|
||||||
|
export * from './lib/terms/services/x-terms.provider.service';
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tags ...
|
||||||
|
export * from './lib/tags/x-tag.typings';
|
||||||
|
export * from './lib/tags/x-tag.services';
|
||||||
|
export * from './lib/tags/models/x-tag.dto';
|
||||||
|
export * from './lib/tags/services/x-tag.entity.service';
|
||||||
|
export * from './lib/tags/services/x-tag.provider.service';
|
||||||
|
export * from './lib/tags/services/x-tag.entity.push.service';
|
||||||
|
|
||||||
|
//
|
||||||
|
// Files ...
|
||||||
|
export * from './lib/files/x-file.typings';
|
||||||
|
export * from './lib/files/x-file.services';
|
||||||
|
export * from './lib/files/models/x-file.dto';
|
||||||
|
export * from './lib/files/services/x-file.entity.service';
|
||||||
|
export * from './lib/files/services/x-file.provider.service';
|
||||||
|
export * from './lib/files/services/x-file.entity.push.service';
|
||||||
|
|
||||||
|
//
|
||||||
|
// Webinars ...
|
||||||
|
export * from './lib/webinars/x-webinar.typings';
|
||||||
|
export * from './lib/webinars/x-webinar.services';
|
||||||
|
export * from './lib/webinars/models/x-webinar.dto';
|
||||||
|
export * from './lib/webinars/services/x-webinar.push.service';
|
||||||
|
export * from './lib/webinars/services/x-webinar.entity.service';
|
||||||
|
export * from './lib/webinars/services/x-webinar.provider.service';
|
||||||
|
export * from './lib/webinars/services/x-webinar.entity.push.service';
|
||||||
|
export * from './lib/webinars/services/x-webinarsubscriber.entity.service';
|
||||||
|
|
||||||
|
//
|
||||||
|
// Module Service ...
|
||||||
|
export * from './lib/x-saherelm-api.service';
|
||||||
|
|
||||||
|
//
|
||||||
|
// Module ...
|
||||||
|
export * from './lib/x-saherelm-api-sdk.module';
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"extends": "./tsconfig.lib.json",
|
||||||
|
"angularCompilerOptions": {
|
||||||
|
"enableIvy": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
/* To learn more about this file see: https://angular.io/config/tsconfig. */
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../out-tsc/lib",
|
||||||
|
"target": "es2015",
|
||||||
|
"declaration": true,
|
||||||
|
"declarationMap": true,
|
||||||
|
"inlineSources": true,
|
||||||
|
"types": [],
|
||||||
|
"lib": [
|
||||||
|
"dom",
|
||||||
|
"es2018"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"src/test.ts",
|
||||||
|
"**/*.spec.ts"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
/* To learn more about this file see: https://angular.io/config/tsconfig. */
|
||||||
|
{
|
||||||
|
"extends": "./tsconfig.lib.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"declarationMap": false
|
||||||
|
},
|
||||||
|
"angularCompilerOptions": {
|
||||||
|
"compilationMode": "partial"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
/* To learn more about this file see: https://angular.io/config/tsconfig. */
|
||||||
|
{
|
||||||
|
"compileOnSave": false,
|
||||||
|
"compilerOptions": {
|
||||||
|
"strict": true,
|
||||||
|
"baseUrl": "./",
|
||||||
|
"sourceMap": true,
|
||||||
|
"target": "es2017",
|
||||||
|
"module": "es2020",
|
||||||
|
"declaration": false,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"noImplicitAny": true,
|
||||||
|
"importHelpers": true,
|
||||||
|
"strictNullChecks": false,
|
||||||
|
"noImplicitReturns": true,
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"downlevelIteration": true,
|
||||||
|
"outDir": "./dist/out-tsc",
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"noFallthroughCasesInSwitch": true,
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
|
"lib": [
|
||||||
|
"es2018",
|
||||||
|
"dom"
|
||||||
|
],
|
||||||
|
"paths": {
|
||||||
|
"x-saherelm-api-sdk": [
|
||||||
|
"dist/x-saherelm-api-sdk/x-saherelm-api-sdk",
|
||||||
|
"dist/x-saherelm-api-sdk"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"angularCompilerOptions": {
|
||||||
|
"strictTemplates": true,
|
||||||
|
"strictInjectionParameters": true,
|
||||||
|
"strictInputAccessModifiers": true,
|
||||||
|
"enableI18nLegacyMessageIdFormat": false
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user