From ec777257909b66ed5201f00f54cc970e79144ecf Mon Sep 17 00:00:00 2001 From: Leslie Tilton <23057410+Banrion@users.noreply.github.com> Date: Wed, 12 Nov 2025 14:21:15 -0600 Subject: [PATCH] Member details model updates --- .../models/api/member-details.api.ts | 33 ++++++++++++++ .../models/data/member-details.data.ts | 30 +++++++++++++ .../models/domain/member-details.ts | 34 +++++++++++++++ .../models/view/member-details.view.ts | 43 +++++++++++++++++++ 4 files changed, 140 insertions(+) create mode 100644 bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/api/member-details.api.ts create mode 100644 bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/data/member-details.data.ts create mode 100644 bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/domain/member-details.ts create mode 100644 bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/view/member-details.view.ts diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/api/member-details.api.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/api/member-details.api.ts new file mode 100644 index 00000000000..0f3dc6f92c5 --- /dev/null +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/api/member-details.api.ts @@ -0,0 +1,33 @@ +import { BaseResponse } from "@bitwarden/common/models/response/base.response"; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { MemberDetailsData } from "../data/member-details.data"; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { MemberDetails } from "../domain/member-details"; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { MemberDetailsView } from "../view/member-details.view"; + +/** + * Converts a MemberDetails API response + * + * - See {@link MemberDetails} for domain model + * - See {@link MemberDetailsData} for data model + * - See {@link MemberDetailsView} from View Model + */ +export class MemberDetailsApi extends BaseResponse { + userGuid: string; + userName: string; + email: string; + cipherId: string; + + constructor(data: any = null) { + super(data); + if (data == null) { + return; + } + this.userGuid = this.getResponseProperty("userGuid"); + this.userName = this.getResponseProperty("userName"); + this.email = this.getResponseProperty("email"); + this.cipherId = this.getResponseProperty("cipherId"); + } +} diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/data/member-details.data.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/data/member-details.data.ts new file mode 100644 index 00000000000..cefc749682f --- /dev/null +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/data/member-details.data.ts @@ -0,0 +1,30 @@ +import { MemberDetailsApi } from "../api/member-details.api"; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { MemberDetails } from "../domain/member-details"; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { MemberDetailsView } from "../view/member-details.view"; + +/** + * Serializable data model for member details in risk insights report + * + * - See {@link MemberDetails} for domain model + * - See {@link MemberDetailsApi} for API model + * - See {@link MemberDetailsView} from View Model + */ +export class MemberDetailsData { + userGuid: string; + userName: string; + email: string; + cipherId: string; + + constructor(data?: MemberDetailsApi) { + if (data == null) { + return; + } + + this.userGuid = data.userGuid; + this.userName = data.userName; + this.email = data.email; + this.cipherId = data.cipherId; + } +} diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/domain/member-details.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/domain/member-details.ts new file mode 100644 index 00000000000..b5704c8f27d --- /dev/null +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/domain/member-details.ts @@ -0,0 +1,34 @@ +import { EncString } from "@bitwarden/common/key-management/crypto/models/enc-string"; +import Domain from "@bitwarden/common/platform/models/domain/domain-base"; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { MemberDetailsApi } from "../api/member-details.api"; +import { MemberDetailsData } from "../data/member-details.data"; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { MemberDetailsView } from "../view/member-details.view"; + +/** + * Domain model for Member Details in Risk Insights containing encrypted properties + * + * - See {@link MemberDetailsApi} for API model + * - See {@link MemberDetailsData} for data model + * - See {@link MemberDetailsView} from View Model + */ +export class MemberDetails extends Domain { + userGuid: EncString = new EncString(""); + userName: EncString = new EncString(""); + email: EncString = new EncString(""); + cipherId: EncString = new EncString(""); + + constructor(data?: MemberDetailsData) { + super(); + if (data == null) { + return; + } + + this.userGuid = new EncString(data.userGuid); + this.userName = new EncString(data.userName); + this.email = new EncString(data.email); + this.cipherId = new EncString(data.cipherId); + } +} diff --git a/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/view/member-details.view.ts b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/view/member-details.view.ts new file mode 100644 index 00000000000..7d4434a8a7e --- /dev/null +++ b/bitwarden_license/bit-common/src/dirt/reports/risk-insights/models/view/member-details.view.ts @@ -0,0 +1,43 @@ +import { Jsonify } from "type-fest"; + +import { View } from "@bitwarden/common/models/view/view"; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { MemberDetailsApi } from "../api/member-details.api"; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { MemberDetailsData } from "../data/member-details.data"; +import { MemberDetails } from "../domain/member-details"; + +/** + * View model for Member Details in Risk Insights containing decrypted properties + * + * - See {@link MemberDetails} for domain model + * - See {@link MemberDetailsData} for data model + * - See {@link MemberDetailsApi} for API model + */ +export class MemberDetailsView implements View { + userGuid: string = ""; + userName: string = ""; + email: string = ""; + cipherId: string = ""; + + constructor(m?: MemberDetails) { + if (m == null) { + return; + } + } + + toJSON() { + return this; + } + + static fromJSON( + obj: Partial> | undefined, + ): MemberDetailsView | undefined { + return Object.assign(new MemberDetailsView(), obj); + } + + // [TODO] SDK Mapping + // toSdkMemberDetailsView(): SdkMemberDetailsView {} + // static fromMemberDetailsView(obj?: SdkMemberDetailsView): MemberDetailsView | undefined {} +}