From 9f5570ca6a4879352c39ceaf82bd3fca10038df5 Mon Sep 17 00:00:00 2001 From: Erik Tiekstra Date: Tue, 4 May 2021 15:47:03 +0200 Subject: [PATCH] Added Pega API --- angular.json | 11 +++ .../src/app/data/models/employee.model.ts | 16 +++++ .../models/pega/employee-reponse.model.ts | 10 +++ .../employees-list.component.html | 2 +- .../pages/employees/employees.component.html | 4 +- .../participants/participants.component.html | 2 +- .../app/services/api/employee.service copy.ts | 69 +++++++++++++++++++ .../src/app/services/api/employee.service.ts | 18 +++-- .../src/environments/environment.pega.ts | 7 ++ apps/dafa-web/src/environments/environment.ts | 14 +--- openshift/dev/Jenkinsfile | 2 +- package.json | 2 + 12 files changed, 129 insertions(+), 28 deletions(-) create mode 100644 apps/dafa-web/src/app/data/models/pega/employee-reponse.model.ts create mode 100644 apps/dafa-web/src/app/services/api/employee.service copy.ts create mode 100644 apps/dafa-web/src/environments/environment.pega.ts diff --git a/angular.json b/angular.json index 9a5c864..c58e00f 100644 --- a/angular.json +++ b/angular.json @@ -82,6 +82,14 @@ "maximumError": "10kb" } ] + }, + "pega": { + "fileReplacements": [ + { + "replace": "apps/dafa-web/src/environments/environment.ts", + "with": "apps/dafa-web/src/environments/environment.pega.ts" + } + ] } } }, @@ -94,6 +102,9 @@ "configurations": { "production": { "browserTarget": "dafa-web:build:production" + }, + "pega": { + "browserTarget": "dafa-web:build:pega" } } }, diff --git a/apps/dafa-web/src/app/data/models/employee.model.ts b/apps/dafa-web/src/app/data/models/employee.model.ts index a5be300..1433797 100644 --- a/apps/dafa-web/src/app/data/models/employee.model.ts +++ b/apps/dafa-web/src/app/data/models/employee.model.ts @@ -1,5 +1,6 @@ import { Agency } from '@dafa-models/agency.model'; import { Participant } from './participant.model'; +import { EmployeeReponse } from './pega/employee-reponse.model'; export interface Employee { id: string; @@ -25,3 +26,18 @@ export interface EmployeeDetail extends Employee { agencies: Agency[]; participants: Participant[]; } + +export function mapEmployeeReponseToEmployee(data: EmployeeReponse): Employee { + const names = data.pyUserName.split(' '); + + return { + id: data.pyUserIdentifier, + employeeId: data.pyUserIdentifier, + lastName: names.pop() || 'Doe', + firstName: names.join(' ') || 'John', + utforandeverksamhet: '', + active: true, + service: '', + fullName: data.pyUserName, + }; +} diff --git a/apps/dafa-web/src/app/data/models/pega/employee-reponse.model.ts b/apps/dafa-web/src/app/data/models/pega/employee-reponse.model.ts new file mode 100644 index 0000000..c36e5fb --- /dev/null +++ b/apps/dafa-web/src/app/data/models/pega/employee-reponse.model.ts @@ -0,0 +1,10 @@ +export interface EmployeeReponse { + pxObjClass: string; + pyAccessGroup: string; + pyLabel: string; + pyPosition: string; + pyReportTo: string; + pyUserIdentifier: string; + pyUserName: string; + pyWorkGroup: string; +} diff --git a/apps/dafa-web/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.html b/apps/dafa-web/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.html index 11ccb9f..99f235e 100644 --- a/apps/dafa-web/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.html +++ b/apps/dafa-web/src/app/pages/administration/pages/employees/components/employees-list/employees-list.component.html @@ -52,7 +52,7 @@ [afCurrentResultEnd]="currentResultEnd" [afTotalResults]="employees.length" (afOnPageChange)="handlePagination($event.detail)" - af-result-name="deltagare" + af-result-name="medarbetare" > diff --git a/apps/dafa-web/src/app/pages/administration/pages/employees/employees.component.html b/apps/dafa-web/src/app/pages/administration/pages/employees/employees.component.html index ed02b9d..63395be 100644 --- a/apps/dafa-web/src/app/pages/administration/pages/employees/employees.component.html +++ b/apps/dafa-web/src/app/pages/administration/pages/employees/employees.component.html @@ -15,8 +15,8 @@
diff --git a/apps/dafa-web/src/app/pages/participants/participants.component.html b/apps/dafa-web/src/app/pages/participants/participants.component.html index 025f3fb..974383d 100644 --- a/apps/dafa-web/src/app/pages/participants/participants.component.html +++ b/apps/dafa-web/src/app/pages/participants/participants.component.html @@ -10,7 +10,7 @@
diff --git a/apps/dafa-web/src/app/services/api/employee.service copy.ts b/apps/dafa-web/src/app/services/api/employee.service copy.ts new file mode 100644 index 0000000..38e298b --- /dev/null +++ b/apps/dafa-web/src/app/services/api/employee.service copy.ts @@ -0,0 +1,69 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { environment } from '@dafa-environment'; +import { Employee, EmployeeDetail } from '@dafa-models/employee.model'; +import { SortBy } from '@dafa-models/sort-by.model'; +import { sort } from '@dafa-utils/sort.util'; +import { BehaviorSubject, combineLatest, Observable, throwError } from 'rxjs'; +import { catchError, map } from 'rxjs/operators'; + +function filterEmployees(employees: Employee[], searchFilter: string): Employee[] { + return employees.filter(person => { + const searchValueExistsInName = person.fullName.toLowerCase().includes(searchFilter.toLowerCase()); + + return searchValueExistsInName; + }); +} + +@Injectable({ + providedIn: 'root', +}) +export class EmployeeService { + private _employeesApiUrl = `${environment.apiBase}/employees`; + private _allEmployees$: Observable = this.httpClient.get(this._employeesApiUrl, { + params: { _embed: 'participants' }, + }); + + private _employeesSortBy$ = new BehaviorSubject({ key: 'fullName', reverse: false }); + public employeesSortBy$: Observable = this._employeesSortBy$.asObservable(); + private _searchFilter$ = new BehaviorSubject(''); + public searchFilter$: Observable = this._searchFilter$.asObservable(); + + private _filteredEmployees$: Observable = combineLatest([this._allEmployees$, this._searchFilter$]).pipe( + map(([employees, searchFilter]) => filterEmployees(employees, searchFilter)) + ); + + public filteredEmployees$: Observable = combineLatest([ + this._filteredEmployees$, + this._employeesSortBy$, + ]).pipe( + map(([employees, sortBy]) => { + return sortBy ? sort(employees, sortBy) : employees; + }) + ); + + constructor(private httpClient: HttpClient) {} + + public getDetailedEmployeeData(id: string): Observable { + return this.httpClient.get(`${this._employeesApiUrl}/${id}`, { params: { _embed: 'participants' } }); + } + + public setSearchFilter(value: string) { + this._searchFilter$.next(value); + } + + public setEmployeesSortKey(key: keyof Employee) { + const currentSortBy = this._employeesSortBy$.getValue(); + const reverse = currentSortBy?.key === key ? !currentSortBy.reverse : false; + this._employeesSortBy$.next({ key, reverse }); + } + + public createAccount(employeesData: EmployeeDetail): Observable { + return this.httpClient.post(this._employeesApiUrl, employeesData).pipe( + map(data => data.id), + catchError(error => { + return throwError(error); + }) + ); + } +} diff --git a/apps/dafa-web/src/app/services/api/employee.service.ts b/apps/dafa-web/src/app/services/api/employee.service.ts index 38e298b..4102808 100644 --- a/apps/dafa-web/src/app/services/api/employee.service.ts +++ b/apps/dafa-web/src/app/services/api/employee.service.ts @@ -1,28 +1,26 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { environment } from '@dafa-environment'; -import { Employee, EmployeeDetail } from '@dafa-models/employee.model'; +import { Employee, EmployeeDetail, mapEmployeeReponseToEmployee } from '@dafa-models/employee.model'; import { SortBy } from '@dafa-models/sort-by.model'; import { sort } from '@dafa-utils/sort.util'; import { BehaviorSubject, combineLatest, Observable, throwError } from 'rxjs'; import { catchError, map } from 'rxjs/operators'; function filterEmployees(employees: Employee[], searchFilter: string): Employee[] { - return employees.filter(person => { - const searchValueExistsInName = person.fullName.toLowerCase().includes(searchFilter.toLowerCase()); - - return searchValueExistsInName; - }); + return employees.filter(person => person.fullName.toLowerCase().includes(searchFilter.toLowerCase())); } @Injectable({ providedIn: 'root', }) export class EmployeeService { - private _employeesApiUrl = `${environment.apiBase}/employees`; - private _allEmployees$: Observable = this.httpClient.get(this._employeesApiUrl, { - params: { _embed: 'participants' }, - }); + private _employeesApiUrl = `${environment.apiBase}/D_pxOperatorsList`; + private _allEmployees$: Observable = this.httpClient + .get(this._employeesApiUrl, { + headers: environment.apiHeaders, + }) + .pipe(map(({ pxResults }) => pxResults.map(result => mapEmployeeReponseToEmployee(result)))); private _employeesSortBy$ = new BehaviorSubject({ key: 'fullName', reverse: false }); public employeesSortBy$: Observable = this._employeesSortBy$.asObservable(); diff --git a/apps/dafa-web/src/environments/environment.pega.ts b/apps/dafa-web/src/environments/environment.pega.ts new file mode 100644 index 0000000..3276c6e --- /dev/null +++ b/apps/dafa-web/src/environments/environment.pega.ts @@ -0,0 +1,7 @@ +export const environment = { + production: false, + apiBase: 'https://dafa-utv.tocp.arbetsformedlingen.se/prweb/api/v1/data', + apiHeaders: { + Authorization: 'Basic dGVzdHVzZXIxOmRhZmFAMTIz', // user: testuser1, password: dafa@123 + }, +}; diff --git a/apps/dafa-web/src/environments/environment.ts b/apps/dafa-web/src/environments/environment.ts index 4ea4927..6a90298 100644 --- a/apps/dafa-web/src/environments/environment.ts +++ b/apps/dafa-web/src/environments/environment.ts @@ -1,17 +1,5 @@ -// This file can be replaced during build by using the `fileReplacements` array. -// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. -// The list of file replacements can be found in `angular.json`. - export const environment = { production: false, apiBase: '/api', + apiHeaders: {}, }; - -/* - * For easier debugging in development mode, you can import the following file - * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. - * - * This import should be commented out in production mode because it will have a negative impact - * on performance if an error is thrown. - */ -// import 'zone.js/dist/zone-error'; // Included with Angular CLI. diff --git a/openshift/dev/Jenkinsfile b/openshift/dev/Jenkinsfile index 56d257c..74bb4e6 100644 --- a/openshift/dev/Jenkinsfile +++ b/openshift/dev/Jenkinsfile @@ -97,7 +97,7 @@ pipeline { echo '### Building application... ###' sh ''' - npm run build:dafa + npm run build:pega cp nginx/nginx.conf ${NGINX_PATH} #cp -r nginx/* ${NGINX_PATH} diff --git a/package.json b/package.json index e84ac75..147666d 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,10 @@ "nx": "nx", "start": "ng serve", "start:dafa": "ng serve dafa-web", + "start:pega": "ng serve dafa-web --configuration pega", "build": "ng build", "build:dafa": "ng build dafa-web", + "build:pega": "ng build dafa-web --configuration pega", "test": "ng test", "test:dafa": "ng test dafa-web", "lint": "nx workspace-lint && ng lint",