From bfe409305ce24840659f622400dd9e9f737f8f62 Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Wed, 4 Dec 2024 15:47:30 +0200 Subject: [PATCH 1/2] RED-9580 - use new user stats endpoint for everything related to User Management --- .../modules/admin/services/admin-dialog.service.ts | 8 +++++++- .../modules/admin/services/user-stats.service.ts | 10 ++++++++++ .../app/services/dossiers/dossier-stats.service.ts | 2 +- libs/red-domain/src/lib/users/constants.ts | 1 + libs/red-domain/src/lib/users/index.ts | 3 +++ libs/red-domain/src/lib/users/user-stats.model.ts | 13 +++++++++++++ libs/red-domain/src/lib/users/user-stats.ts | 5 +++++ 7 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 apps/red-ui/src/app/modules/admin/services/user-stats.service.ts create mode 100644 libs/red-domain/src/lib/users/constants.ts create mode 100644 libs/red-domain/src/lib/users/user-stats.model.ts create mode 100644 libs/red-domain/src/lib/users/user-stats.ts diff --git a/apps/red-ui/src/app/modules/admin/services/admin-dialog.service.ts b/apps/red-ui/src/app/modules/admin/services/admin-dialog.service.ts index 1ba3e00fc..943cb8852 100644 --- a/apps/red-ui/src/app/modules/admin/services/admin-dialog.service.ts +++ b/apps/red-ui/src/app/modules/admin/services/admin-dialog.service.ts @@ -22,6 +22,8 @@ import { ConfigureCertificateDialogComponent } from '../dialogs/configure-digita import { EditColorDialogComponent } from '../dialogs/edit-color-dialog/edit-color-dialog.component'; import { SmtpAuthDialogComponent } from '../dialogs/smtp-auth-dialog/smtp-auth-dialog.component'; import { UploadDictionaryDialogComponent } from '../dialogs/upload-dictionary-dialog/upload-dictionary-dialog.component'; +import { UserStatsService } from './user-stats.service'; +import { result } from 'lodash-es'; type DialogType = | 'confirm' @@ -73,12 +75,16 @@ export class AdminDialogService extends DialogService { private readonly _activeDossiersService: ActiveDossiersService, private readonly _loadingService: LoadingService, private readonly _userService: UserService, + private readonly _userStatsService: UserStatsService, private readonly _reportTemplateService: ReportTemplateService, ) { super(_dialog); } - deleteUsers(userIds: string[], cb?: () => Promise | void): void { + async deleteUsers(userIds: string[], cb?: () => Promise | void): Promise { + // const result = await firstValueFrom(this._userStatsService.getFor(userIds)); + // console.log('result: ', result); + const data: IConfirmationDialogData = { title: _('confirm-delete-users.title'), question: _('confirm-delete-users.warning'), diff --git a/apps/red-ui/src/app/modules/admin/services/user-stats.service.ts b/apps/red-ui/src/app/modules/admin/services/user-stats.service.ts new file mode 100644 index 000000000..437648cac --- /dev/null +++ b/apps/red-ui/src/app/modules/admin/services/user-stats.service.ts @@ -0,0 +1,10 @@ +import { StatsService } from '@iqser/common-ui'; +import { IUserStats, USER_ID, UserStats } from '@red/domain'; +import { Injectable } from '@angular/core'; + +@Injectable({ providedIn: 'root' }) +export class UserStatsService extends StatsService { + protected readonly _primaryKey = USER_ID; + protected readonly _entityClass = UserStats; + protected readonly _defaultModelPath = 'user-stats'; +} diff --git a/apps/red-ui/src/app/services/dossiers/dossier-stats.service.ts b/apps/red-ui/src/app/services/dossiers/dossier-stats.service.ts index 1a2856eea..139f9e126 100644 --- a/apps/red-ui/src/app/services/dossiers/dossier-stats.service.ts +++ b/apps/red-ui/src/app/services/dossiers/dossier-stats.service.ts @@ -1,6 +1,6 @@ import { inject, Injectable } from '@angular/core'; import { StatsService } from '@iqser/common-ui'; -import { DashboardStats, DOSSIER_ID, DossierStats, IDossierStats } from '@red/domain'; +import { DOSSIER_ID, DossierStats, IDossierStats } from '@red/domain'; import { Observable, of } from 'rxjs'; import { UserService } from '@users/user.service'; import { NGXLogger } from 'ngx-logger'; diff --git a/libs/red-domain/src/lib/users/constants.ts b/libs/red-domain/src/lib/users/constants.ts new file mode 100644 index 000000000..f733950f5 --- /dev/null +++ b/libs/red-domain/src/lib/users/constants.ts @@ -0,0 +1 @@ +export const USER_ID = 'userId'; diff --git a/libs/red-domain/src/lib/users/index.ts b/libs/red-domain/src/lib/users/index.ts index b66d5cb35..50135cdbc 100644 --- a/libs/red-domain/src/lib/users/index.ts +++ b/libs/red-domain/src/lib/users/index.ts @@ -1,3 +1,6 @@ export * from './user.model'; export * from './profile'; export * from './types'; +export * from './user-stats'; +export * from './user-stats.model'; +export * from './constants'; diff --git a/libs/red-domain/src/lib/users/user-stats.model.ts b/libs/red-domain/src/lib/users/user-stats.model.ts new file mode 100644 index 000000000..da1b608ca --- /dev/null +++ b/libs/red-domain/src/lib/users/user-stats.model.ts @@ -0,0 +1,13 @@ +import { IUserStats } from './user-stats'; + +export class UserStats implements IUserStats { + readonly numberOfDossierMemberships: number; + readonly numberOfDossierOwnerships: number; + readonly numberOfAssignedFiles: number; + + constructor(userStats: IUserStats) { + this.numberOfAssignedFiles = userStats.numberOfAssignedFiles; + this.numberOfDossierOwnerships = userStats.numberOfAssignedFiles; + this.numberOfAssignedFiles = userStats.numberOfAssignedFiles; + } +} diff --git a/libs/red-domain/src/lib/users/user-stats.ts b/libs/red-domain/src/lib/users/user-stats.ts new file mode 100644 index 000000000..2613777f2 --- /dev/null +++ b/libs/red-domain/src/lib/users/user-stats.ts @@ -0,0 +1,5 @@ +export interface IUserStats { + numberOfDossierMemberships: number; + numberOfDossierOwnerships: number; + numberOfAssignedFiles: number; +} From af7a45d7397d018bb4964476c34071ec7d796771 Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Fri, 13 Dec 2024 12:03:17 +0200 Subject: [PATCH 2/2] RED-9580 - added getOne method for stats service to call new users stats endpoint and updated data from "delete user dialog" with new backend data --- .../app/modules/admin/services/admin-dialog.service.ts | 9 ++++++--- apps/red-ui/src/assets/i18n/redact/en.json | 2 +- apps/red-ui/src/assets/i18n/scm/en.json | 2 +- libs/common-ui | 2 +- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/apps/red-ui/src/app/modules/admin/services/admin-dialog.service.ts b/apps/red-ui/src/app/modules/admin/services/admin-dialog.service.ts index 943cb8852..75da1652e 100644 --- a/apps/red-ui/src/app/modules/admin/services/admin-dialog.service.ts +++ b/apps/red-ui/src/app/modules/admin/services/admin-dialog.service.ts @@ -82,8 +82,7 @@ export class AdminDialogService extends DialogService { } async deleteUsers(userIds: string[], cb?: () => Promise | void): Promise { - // const result = await firstValueFrom(this._userStatsService.getFor(userIds)); - // console.log('result: ', result); + const userStats = await firstValueFrom(this._userStatsService.getOne(userIds[0])); const data: IConfirmationDialogData = { title: _('confirm-delete-users.title'), @@ -91,7 +90,11 @@ export class AdminDialogService extends DialogService { confirmationText: _('confirm-delete-users.delete'), denyText: _('confirm-delete-users.cancel'), titleColor: TitleColors.WARN, - translateParams: { usersCount: 1, dossiersCount: this._getUsersDossiersCount(userIds) }, + translateParams: { + usersCount: 1, + dossiersCount: userStats.numberOfDossierOwnerships, + documentsCount: userStats.numberOfAssignedFiles, + }, checkboxes: [ { value: false, label: _('confirm-delete-users.impacted-dossiers') }, { value: false, label: _('confirm-delete-users.impacted-documents') }, diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index be2d24c2d..e0115ef7e 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -642,7 +642,7 @@ "confirm-delete-users": { "cancel": "Keep {usersCount, plural, one{user} other{users}}", "delete": "Delete {usersCount, plural, one{user} other{users}}", - "impacted-documents": "All documents pending review from the {usersCount, plural, one{user} other{users}} will be impacted", + "impacted-documents": "{documentsCount} {documentsCount, plural, one{document} other{documents}} will be impacted", "impacted-dossiers": "{dossiersCount} {dossiersCount, plural, one{dossier} other{dossiers}} will be impacted", "title": "Delete {usersCount, plural, one{user} other{users}} from workspace", "toast-error": "Please confirm that you understand the consequences of this action.", diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index a90fa21d7..faaf2073e 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -642,7 +642,7 @@ "confirm-delete-users": { "cancel": "Keep {usersCount, plural, one{user} other{users}}", "delete": "Delete {usersCount, plural, one{user} other{users}}", - "impacted-documents": "All documents pending review from the {usersCount, plural, one{user} other{users}} will be impacted", + "impacted-documents": "{documentsCount} {documentsCount, plural, one{document} other{documents}} will be impacted", "impacted-dossiers": "{dossiersCount} {dossiersCount, plural, one{dossier} other{dossiers}} will be impacted", "title": "Delete {usersCount, plural, one{user} other{users}} from workspace", "toast-error": "Please confirm that you understand the consequences of this action.", diff --git a/libs/common-ui b/libs/common-ui index 58382ddfe..fc8be33dc 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit 58382ddfeed1d6d4d61f03abd1bbb0dd840afa94 +Subproject commit fc8be33dc6d33642ae207b6ae4c17a6ec254d11a