{"version":3,"file":"user-avatar.repository-URD3yjeE.js","sources":["../../../src/packages/user/user/repository/avatar/user-avatar.server.data-source.ts","../../../src/packages/user/user/repository/avatar/user-avatar.repository.ts"],"sourcesContent":["import type { SetAvatarRequestModel } 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 type { UmbDataSourceErrorResponse } from '@umbraco-cms/backoffice/repository';\r\nimport { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';\r\n\r\nexport class UmbUserAvatarServerDataSource {\r\n\t#host: UmbControllerHost;\r\n\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tthis.#host = host;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates an avatar for the user with the given id based on a temporary uploaded file\r\n\t * @param {string} unique\r\n\t * @param {string} fileUnique\r\n\t * @returns {*} {Promise}\r\n\t * @memberof UmbUserServerDataSource\r\n\t */\r\n\tcreateAvatar(unique: string, fileUnique: string): Promise {\r\n\t\tconst requestBody: SetAvatarRequestModel = {\r\n\t\t\tfile: {\r\n\t\t\t\tid: fileUnique,\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\treturn tryExecuteAndNotify(this.#host, UserService.postUserAvatarById({ id: unique, requestBody }));\r\n\t}\r\n\r\n\t/**\r\n\t * Deletes the avatar for the user with the given id\r\n\t * @param {string} unique\r\n\t * @returns {*} {Promise}\r\n\t * @memberof UmbUserServerDataSource\r\n\t */\r\n\tdeleteAvatar(unique: string): Promise {\r\n\t\treturn tryExecuteAndNotify(this.#host, UserService.deleteUserAvatarById({ id: unique }));\r\n\t}\r\n}\r\n","import { UmbUserRepositoryBase } from '../user-repository-base.js';\r\nimport { UmbUserAvatarServerDataSource } from './user-avatar.server.data-source.js';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { UmbId } from '@umbraco-cms/backoffice/id';\r\nimport { UmbTemporaryFileRepository } from '@umbraco-cms/backoffice/temporary-file';\r\n\r\nexport class UmbUserAvatarRepository extends UmbUserRepositoryBase {\r\n\t#temporaryFileRepository: UmbTemporaryFileRepository;\r\n\t#avatarSource: UmbUserAvatarServerDataSource;\r\n\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tsuper(host);\r\n\r\n\t\tthis.#avatarSource = new UmbUserAvatarServerDataSource(host);\r\n\t\tthis.#temporaryFileRepository = new UmbTemporaryFileRepository(host);\r\n\t}\r\n\r\n\t/**\r\n\t * Uploads an avatar for the user with the given id\r\n\t * @param {string} userUnique\r\n\t * @param {File} file\r\n\t * @returns {Promise}\r\n\t * @memberof UmbUserRepository\r\n\t */\r\n\tasync uploadAvatar(userUnique: string, file: File) {\r\n\t\tif (!userUnique) throw new Error('Id is missing');\r\n\t\tawait this.init;\r\n\r\n\t\t// upload temp file\r\n\t\tconst fileId = UmbId.new();\r\n\t\tawait this.#temporaryFileRepository.upload(fileId, file);\r\n\r\n\t\t// assign temp file to avatar\r\n\t\tconst { error } = await this.#avatarSource.createAvatar(userUnique, fileId);\r\n\r\n\t\tif (!error) {\r\n\t\t\t// TODO: update store + current user\r\n\t\t\tconst localUrl = URL.createObjectURL(file);\r\n\r\n\t\t\t// The server returns 5 different sizes of the avatar, so we need to mimick that here\r\n\t\t\tthis.detailStore?.updateItem(userUnique, { avatarUrls: [localUrl, localUrl, localUrl, localUrl, localUrl] });\r\n\r\n\t\t\tconst notification = { data: { message: `Avatar uploaded` } };\r\n\t\t\tthis.notificationContext?.peek('positive', notification);\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n\r\n\t/**\r\n\t * Removes the avatar for the user with the given id\r\n\t * @param {string} userUnique\r\n\t * @returns {Promise}\r\n\t * @memberof UmbUserRepository\r\n\t */\r\n\tasync deleteAvatar(userUnique: string) {\r\n\t\tif (!userUnique) throw new Error('Id is missing');\r\n\t\tawait this.init;\r\n\r\n\t\tconst { error } = await this.#avatarSource.deleteAvatar(userUnique);\r\n\r\n\t\tif (!error) {\r\n\t\t\tthis.detailStore?.updateItem(userUnique, { avatarUrls: [] });\r\n\r\n\t\t\tconst notification = { data: { message: `Avatar deleted` } };\r\n\t\t\tthis.notificationContext?.peek('positive', notification);\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n\r\n\toverride destroy() {\r\n\t\tsuper.destroy();\r\n\t}\r\n}\r\n\r\nexport default UmbUserAvatarRepository;\r\n"],"names":["UmbUserAvatarServerDataSource","#host","host","unique","fileUnique","requestBody","tryExecuteAndNotify","UserService","UmbUserAvatarRepository","UmbUserRepositoryBase","#temporaryFileRepository","#avatarSource","UmbTemporaryFileRepository","userUnique","file","fileId","UmbId","error","localUrl","notification"],"mappings":";;;;;AAMO,MAAMA,EAA8B;AAAA,EAC1CC;AAAA,EAEA,YAAYC,GAAyB;AACpC,SAAKD,KAAQC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUd,aAAaC,GAAgBC,GAAyD;AACrF,UAAMC,IAAqC;AAAA,MAC1C,MAAM;AAAA,QACL,IAAID;AAAA,MAAA;AAAA,IAEN;AAEO,WAAAE,EAAoB,KAAKL,IAAOM,EAAY,mBAAmB,EAAE,IAAIJ,GAAQ,aAAAE,EAAY,CAAC,CAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASnG,aAAaF,GAAqD;AAC1D,WAAAG,EAAoB,KAAKL,IAAOM,EAAY,qBAAqB,EAAE,IAAIJ,EAAO,CAAC,CAAC;AAAA,EAAA;AAEzF;ACjCO,MAAMK,UAAgCC,EAAsB;AAAA,EAClEC;AAAA,EACAC;AAAA,EAEA,YAAYT,GAAyB;AACpC,UAAMA,CAAI,GAEL,KAAAS,KAAgB,IAAIX,EAA8BE,CAAI,GACtD,KAAAQ,KAA2B,IAAIE,EAA2BV,CAAI;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUpE,MAAM,aAAaW,GAAoBC,GAAY;AAClD,QAAI,CAACD,EAAkB,OAAA,IAAI,MAAM,eAAe;AAChD,UAAM,KAAK;AAGL,UAAAE,IAASC,EAAM,IAAI;AACzB,UAAM,KAAKN,GAAyB,OAAOK,GAAQD,CAAI;AAGjD,UAAA,EAAE,OAAAG,MAAU,MAAM,KAAKN,GAAc,aAAaE,GAAYE,CAAM;AAE1E,QAAI,CAACE,GAAO;AAEL,YAAAC,IAAW,IAAI,gBAAgBJ,CAAI;AAGzC,WAAK,aAAa,WAAWD,GAAY,EAAE,YAAY,CAACK,GAAUA,GAAUA,GAAUA,GAAUA,CAAQ,EAAA,CAAG;AAE3G,YAAMC,IAAe,EAAE,MAAM,EAAE,SAAS,oBAAoB;AACvD,WAAA,qBAAqB,KAAK,YAAYA,CAAY;AAAA,IAAA;AAGxD,WAAO,EAAE,OAAAF,EAAM;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAShB,MAAM,aAAaJ,GAAoB;AACtC,QAAI,CAACA,EAAkB,OAAA,IAAI,MAAM,eAAe;AAChD,UAAM,KAAK;AAEX,UAAM,EAAE,OAAAI,EAAM,IAAI,MAAM,KAAKN,GAAc,aAAaE,CAAU;AAElE,QAAI,CAACI,GAAO;AACX,WAAK,aAAa,WAAWJ,GAAY,EAAE,YAAY,CAAA,GAAI;AAE3D,YAAMM,IAAe,EAAE,MAAM,EAAE,SAAS,mBAAmB;AACtD,WAAA,qBAAqB,KAAK,YAAYA,CAAY;AAAA,IAAA;AAGxD,WAAO,EAAE,OAAAF,EAAM;AAAA,EAAA;AAAA,EAGP,UAAU;AAClB,UAAM,QAAQ;AAAA,EAAA;AAEhB;"}