{"version":3,"file":"user-detail.server.data-source-BRoeyWo4.js","sources":["../../../src/packages/user/user/repository/detail/user-detail.server.data-source.ts"],"sourcesContent":["import type { UmbUserDetailModel, UmbUserStartNodesModel } from '../../types.js';\r\nimport { UMB_USER_ENTITY_TYPE } from '../../entity.js';\r\nimport { UmbUserKind } from '../../utils/index.js';\r\nimport { UmbId } from '@umbraco-cms/backoffice/id';\r\nimport type { UmbDetailDataSource } from '@umbraco-cms/backoffice/repository';\r\nimport type {\r\n\tCreateUserRequestModel,\r\n\tUpdateUserRequestModel,\r\n\tUserKindModel,\r\n} from '@umbraco-cms/backoffice/external/backend-api';\r\nimport { UserService } from '@umbraco-cms/backoffice/external/backend-api';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';\r\n\r\n/**\r\n * A data source for the User that fetches data from the server\r\n * @class UmbUserServerDataSource\r\n * @implements {RepositoryDetailDataSource}\r\n */\r\nexport class UmbUserServerDataSource implements UmbDetailDataSource {\r\n\t#host: UmbControllerHost;\r\n\r\n\t/**\r\n\t * Creates an instance of UmbUserServerDataSource.\r\n\t * @param {UmbControllerHost} host - The controller host for this controller to be appended to\r\n\t * @memberof UmbUserServerDataSource\r\n\t */\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tthis.#host = host;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new User scaffold\r\n\t * @param {(string | null)} parentUnique\r\n\t * @returns { CreateUserRequestModel }\r\n\t * @memberof UmbUserServerDataSource\r\n\t */\r\n\tasync createScaffold() {\r\n\t\tconst data: UmbUserDetailModel = {\r\n\t\t\tavatarUrls: [],\r\n\t\t\tcreateDate: null,\r\n\t\t\tdocumentStartNodeUniques: [],\r\n\t\t\temail: '',\r\n\t\t\tentityType: UMB_USER_ENTITY_TYPE,\r\n\t\t\tfailedLoginAttempts: 0,\r\n\t\t\thasDocumentRootAccess: false,\r\n\t\t\thasMediaRootAccess: false,\r\n\t\t\tisAdmin: false,\r\n\t\t\tkind: UmbUserKind.DEFAULT,\r\n\t\t\tlanguageIsoCode: '',\r\n\t\t\tlastLockoutDate: null,\r\n\t\t\tlastLoginDate: null,\r\n\t\t\tlastPasswordChangeDate: null,\r\n\t\t\tmediaStartNodeUniques: [],\r\n\t\t\tname: '',\r\n\t\t\tstate: null,\r\n\t\t\tunique: UmbId.new(),\r\n\t\t\tupdateDate: null,\r\n\t\t\tuserGroupUniques: [],\r\n\t\t\tuserName: '',\r\n\t\t};\r\n\r\n\t\treturn { data };\r\n\t}\r\n\r\n\t/**\r\n\t * Fetches a User with the given id from the server\r\n\t * @param {string} unique\r\n\t * @returns {*}\r\n\t * @memberof UmbUserServerDataSource\r\n\t */\r\n\tasync read(unique: string) {\r\n\t\tif (!unique) throw new Error('Unique is missing');\r\n\r\n\t\tconst { data, error } = await tryExecuteAndNotify(this.#host, UserService.getUserById({ id: unique }));\r\n\r\n\t\tif (error || !data) {\r\n\t\t\treturn { error };\r\n\t\t}\r\n\r\n\t\t// TODO: make data mapper to prevent errors\r\n\t\tconst user: UmbUserDetailModel = {\r\n\t\t\tavatarUrls: data.avatarUrls,\r\n\t\t\tcreateDate: data.createDate,\r\n\t\t\thasDocumentRootAccess: data.hasDocumentRootAccess,\r\n\t\t\tdocumentStartNodeUniques: data.documentStartNodeIds.map((node) => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tunique: node.id,\r\n\t\t\t\t};\r\n\t\t\t}),\r\n\t\t\temail: data.email,\r\n\t\t\tentityType: UMB_USER_ENTITY_TYPE,\r\n\t\t\tfailedLoginAttempts: data.failedLoginAttempts,\r\n\t\t\tisAdmin: data.isAdmin,\r\n\t\t\tkind: data.kind,\r\n\t\t\tlanguageIsoCode: data.languageIsoCode || null,\r\n\t\t\tlastLockoutDate: data.lastLockoutDate || null,\r\n\t\t\tlastLoginDate: data.lastLoginDate || null,\r\n\t\t\tlastPasswordChangeDate: data.lastPasswordChangeDate || null,\r\n\t\t\thasMediaRootAccess: data.hasMediaRootAccess,\r\n\t\t\tmediaStartNodeUniques: data.mediaStartNodeIds.map((node) => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tunique: node.id,\r\n\t\t\t\t};\r\n\t\t\t}),\r\n\t\t\tname: data.name,\r\n\t\t\tstate: data.state,\r\n\t\t\tunique: data.id,\r\n\t\t\tupdateDate: data.updateDate,\r\n\t\t\tuserGroupUniques: data.userGroupIds.map((reference) => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tunique: reference.id,\r\n\t\t\t\t};\r\n\t\t\t}),\r\n\t\t\tuserName: data.userName,\r\n\t\t};\r\n\r\n\t\treturn { data: user };\r\n\t}\r\n\r\n\t/**\r\n\t * Inserts a new User on the server\r\n\t * @param {UmbUserDetailModel} model\r\n\t * @returns {*}\r\n\t * @memberof UmbUserServerDataSource\r\n\t */\r\n\tasync create(model: UmbUserDetailModel) {\r\n\t\tif (!model) throw new Error('User is missing');\r\n\r\n\t\t// TODO: make data mapper to prevent errors\r\n\t\tconst requestBody: CreateUserRequestModel = {\r\n\t\t\temail: model.email,\r\n\t\t\tname: model.name,\r\n\t\t\tuserGroupIds: model.userGroupUniques.map((reference) => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tid: reference.unique,\r\n\t\t\t\t};\r\n\t\t\t}),\r\n\t\t\tuserName: model.userName,\r\n\t\t\tkind: model.kind as UserKindModel,\r\n\t\t};\r\n\r\n\t\tconst { data, error } = await tryExecuteAndNotify(\r\n\t\t\tthis.#host,\r\n\t\t\tUserService.postUser({\r\n\t\t\t\trequestBody,\r\n\t\t\t}),\r\n\t\t);\r\n\r\n\t\tif (data) {\r\n\t\t\treturn this.read(data);\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n\r\n\t/**\r\n\t * Updates a User on the server\r\n\t * @param {UmbUserDetailModel} User\r\n\t * @param model\r\n\t * @returns {*}\r\n\t * @memberof UmbUserServerDataSource\r\n\t */\r\n\tasync update(model: UmbUserDetailModel) {\r\n\t\tif (!model.unique) throw new Error('Unique is missing');\r\n\r\n\t\t// TODO: make data mapper to prevent errors\r\n\t\tconst requestBody: UpdateUserRequestModel = {\r\n\t\t\tdocumentStartNodeIds: model.documentStartNodeUniques.map((node) => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tid: node.unique,\r\n\t\t\t\t};\r\n\t\t\t}),\r\n\t\t\temail: model.email,\r\n\t\t\thasDocumentRootAccess: model.hasDocumentRootAccess,\r\n\t\t\thasMediaRootAccess: model.hasMediaRootAccess,\r\n\t\t\tlanguageIsoCode: model.languageIsoCode || '',\r\n\t\t\tmediaStartNodeIds: model.mediaStartNodeUniques.map((node) => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tid: node.unique,\r\n\t\t\t\t};\r\n\t\t\t}),\r\n\t\t\tname: model.name,\r\n\t\t\tuserGroupIds: model.userGroupUniques.map((reference) => {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tid: reference.unique,\r\n\t\t\t\t};\r\n\t\t\t}),\r\n\t\t\tuserName: model.userName,\r\n\t\t};\r\n\r\n\t\tconst { error } = await tryExecuteAndNotify(\r\n\t\t\tthis.#host,\r\n\t\t\tUserService.putUserById({\r\n\t\t\t\tid: model.unique,\r\n\t\t\t\trequestBody,\r\n\t\t\t}),\r\n\t\t);\r\n\r\n\t\tif (!error) {\r\n\t\t\treturn this.read(model.unique);\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n\r\n\t/**\r\n\t * Deletes a User on the server\r\n\t * @param {string} unique\r\n\t * @returns {*}\r\n\t * @memberof UmbUserServerDataSource\r\n\t */\r\n\tasync delete(unique: string) {\r\n\t\tif (!unique) throw new Error('Unique is missing');\r\n\r\n\t\treturn tryExecuteAndNotify(\r\n\t\t\tthis.#host,\r\n\t\t\tUserService.deleteUserById({\r\n\t\t\t\tid: unique,\r\n\t\t\t}),\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Calculates the start nodes for the User\r\n\t * @param {string} unique\r\n\t * @returns {*}\r\n\t * @memberof UmbUserServerDataSource\r\n\t */\r\n\tasync calculateStartNodes(unique: string) {\r\n\t\tif (!unique) throw new Error('Unique is missing');\r\n\r\n\t\tconst { data, error } = await tryExecuteAndNotify(\r\n\t\t\tthis.#host,\r\n\t\t\tUserService.getUserByIdCalculateStartNodes({\r\n\t\t\t\tid: unique,\r\n\t\t\t}),\r\n\t\t);\r\n\r\n\t\tif (data) {\r\n\t\t\tconst calculatedStartNodes: UmbUserStartNodesModel = {\r\n\t\t\t\thasDocumentRootAccess: data.hasDocumentRootAccess,\r\n\t\t\t\tdocumentStartNodeUniques: data.documentStartNodeIds.map((node) => {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tunique: node.id,\r\n\t\t\t\t\t};\r\n\t\t\t\t}),\r\n\t\t\t\thasMediaRootAccess: data.hasMediaRootAccess,\r\n\t\t\t\tmediaStartNodeUniques: data.mediaStartNodeIds.map((node) => {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tunique: node.id,\r\n\t\t\t\t\t};\r\n\t\t\t\t}),\r\n\t\t\t};\r\n\r\n\t\t\treturn { data: calculatedStartNodes };\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n}\r\n"],"names":["UmbUserServerDataSource","#host","host","UMB_USER_ENTITY_TYPE","UmbUserKind","UmbId","unique","data","error","tryExecuteAndNotify","UserService","node","reference","model","requestBody"],"mappings":";;;;AAmBO,MAAMA,EAA2E;AAAA,EACvFC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAYC,GAAyB;AACpC,SAAKD,KAAQC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASd,MAAM,iBAAiB;AAyBtB,WAAO,EAAE,MAxBwB;AAAA,MAChC,YAAY,CAAC;AAAA,MACb,YAAY;AAAA,MACZ,0BAA0B,CAAC;AAAA,MAC3B,OAAO;AAAA,MACP,YAAYC;AAAA,MACZ,qBAAqB;AAAA,MACrB,uBAAuB;AAAA,MACvB,oBAAoB;AAAA,MACpB,SAAS;AAAA,MACT,MAAMC,EAAY;AAAA,MAClB,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,eAAe;AAAA,MACf,wBAAwB;AAAA,MACxB,uBAAuB,CAAC;AAAA,MACxB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQC,EAAM,IAAI;AAAA,MAClB,YAAY;AAAA,MACZ,kBAAkB,CAAC;AAAA,MACnB,UAAU;AAAA,IACX,EAEc;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASf,MAAM,KAAKC,GAAgB;AAC1B,QAAI,CAACA,EAAc,OAAA,IAAI,MAAM,mBAAmB;AAEhD,UAAM,EAAE,MAAAC,GAAM,OAAAC,MAAU,MAAMC,EAAoB,KAAKR,IAAOS,EAAY,YAAY,EAAE,IAAIJ,EAAQ,CAAA,CAAC;AAEjG,WAAAE,KAAS,CAACD,IACN,EAAE,OAAAC,EAAM,IAwCT,EAAE,MApCwB;AAAA,MAChC,YAAYD,EAAK;AAAA,MACjB,YAAYA,EAAK;AAAA,MACjB,uBAAuBA,EAAK;AAAA,MAC5B,0BAA0BA,EAAK,qBAAqB,IAAI,CAACI,OACjD;AAAA,QACN,QAAQA,EAAK;AAAA,MACd,EACA;AAAA,MACD,OAAOJ,EAAK;AAAA,MACZ,YAAYJ;AAAA,MACZ,qBAAqBI,EAAK;AAAA,MAC1B,SAASA,EAAK;AAAA,MACd,MAAMA,EAAK;AAAA,MACX,iBAAiBA,EAAK,mBAAmB;AAAA,MACzC,iBAAiBA,EAAK,mBAAmB;AAAA,MACzC,eAAeA,EAAK,iBAAiB;AAAA,MACrC,wBAAwBA,EAAK,0BAA0B;AAAA,MACvD,oBAAoBA,EAAK;AAAA,MACzB,uBAAuBA,EAAK,kBAAkB,IAAI,CAACI,OAC3C;AAAA,QACN,QAAQA,EAAK;AAAA,MACd,EACA;AAAA,MACD,MAAMJ,EAAK;AAAA,MACX,OAAOA,EAAK;AAAA,MACZ,QAAQA,EAAK;AAAA,MACb,YAAYA,EAAK;AAAA,MACjB,kBAAkBA,EAAK,aAAa,IAAI,CAACK,OACjC;AAAA,QACN,QAAQA,EAAU;AAAA,MACnB,EACA;AAAA,MACD,UAAUL,EAAK;AAAA,IAChB,EAEoB;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASrB,MAAM,OAAOM,GAA2B;AACvC,QAAI,CAACA,EAAa,OAAA,IAAI,MAAM,iBAAiB;AAG7C,UAAMC,IAAsC;AAAA,MAC3C,OAAOD,EAAM;AAAA,MACb,MAAMA,EAAM;AAAA,MACZ,cAAcA,EAAM,iBAAiB,IAAI,CAACD,OAClC;AAAA,QACN,IAAIA,EAAU;AAAA,MACf,EACA;AAAA,MACD,UAAUC,EAAM;AAAA,MAChB,MAAMA,EAAM;AAAA,IACb,GAEM,EAAE,MAAAN,GAAM,OAAAC,EAAM,IAAI,MAAMC;AAAA,MAC7B,KAAKR;AAAA,MACLS,EAAY,SAAS;AAAA,QACpB,aAAAI;AAAA,MACA,CAAA;AAAA,IACF;AAEA,WAAIP,IACI,KAAK,KAAKA,CAAI,IAGf,EAAE,OAAAC,EAAM;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUhB,MAAM,OAAOK,GAA2B;AACvC,QAAI,CAACA,EAAM,OAAc,OAAA,IAAI,MAAM,mBAAmB;AAGtD,UAAMC,IAAsC;AAAA,MAC3C,sBAAsBD,EAAM,yBAAyB,IAAI,CAACF,OAClD;AAAA,QACN,IAAIA,EAAK;AAAA,MACV,EACA;AAAA,MACD,OAAOE,EAAM;AAAA,MACb,uBAAuBA,EAAM;AAAA,MAC7B,oBAAoBA,EAAM;AAAA,MAC1B,iBAAiBA,EAAM,mBAAmB;AAAA,MAC1C,mBAAmBA,EAAM,sBAAsB,IAAI,CAACF,OAC5C;AAAA,QACN,IAAIA,EAAK;AAAA,MACV,EACA;AAAA,MACD,MAAME,EAAM;AAAA,MACZ,cAAcA,EAAM,iBAAiB,IAAI,CAACD,OAClC;AAAA,QACN,IAAIA,EAAU;AAAA,MACf,EACA;AAAA,MACD,UAAUC,EAAM;AAAA,IACjB,GAEM,EAAE,OAAAL,EAAM,IAAI,MAAMC;AAAA,MACvB,KAAKR;AAAA,MACLS,EAAY,YAAY;AAAA,QACvB,IAAIG,EAAM;AAAA,QACV,aAAAC;AAAA,MACA,CAAA;AAAA,IACF;AAEA,WAAKN,IAIE,EAAE,OAAAA,EAAM,IAHP,KAAK,KAAKK,EAAM,MAAM;AAAA,EAGf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAShB,MAAM,OAAOP,GAAgB;AAC5B,QAAI,CAACA,EAAc,OAAA,IAAI,MAAM,mBAAmB;AAEzC,WAAAG;AAAA,MACN,KAAKR;AAAA,MACLS,EAAY,eAAe;AAAA,QAC1B,IAAIJ;AAAA,MACJ,CAAA;AAAA,IACF;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,MAAM,oBAAoBA,GAAgB;AACzC,QAAI,CAACA,EAAc,OAAA,IAAI,MAAM,mBAAmB;AAEhD,UAAM,EAAE,MAAAC,GAAM,OAAAC,EAAM,IAAI,MAAMC;AAAA,MAC7B,KAAKR;AAAA,MACLS,EAAY,+BAA+B;AAAA,QAC1C,IAAIJ;AAAA,MACJ,CAAA;AAAA,IACF;AAEA,WAAIC,IAgBI,EAAE,MAf4C;AAAA,MACpD,uBAAuBA,EAAK;AAAA,MAC5B,0BAA0BA,EAAK,qBAAqB,IAAI,CAACI,OACjD;AAAA,QACN,QAAQA,EAAK;AAAA,MACd,EACA;AAAA,MACD,oBAAoBJ,EAAK;AAAA,MACzB,uBAAuBA,EAAK,kBAAkB,IAAI,CAACI,OAC3C;AAAA,QACN,QAAQA,EAAK;AAAA,MACd,EACA;AAAA,IACF,EAEoC,IAG9B,EAAE,OAAAH,EAAM;AAAA,EAAA;AAEjB;"}