diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/audit-log/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/audit-log/index.ts new file mode 100644 index 0000000000..b8d46eff26 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/audit-log/index.ts @@ -0,0 +1 @@ +export { UmbDocumentAuditLogRepository } from './repository/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/audit-log/repository/document-audit-log.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/audit-log/repository/document-audit-log.repository.ts new file mode 100644 index 0000000000..6666954243 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/audit-log/repository/document-audit-log.repository.ts @@ -0,0 +1,34 @@ +import type { UmbAuditLogRequestArgs } from '../types.js'; +import { UmbDocumentAuditLogServerDataSource } from './document-audit-log.server.data-source.js'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository'; + +/** + * Repository for the document audit log + * @export + * @class UmbDocumentAuditLogRepository + * @extends {UmbRepositoryBase} + */ +export class UmbDocumentAuditLogRepository extends UmbRepositoryBase { + #dataSource: UmbDocumentAuditLogServerDataSource; + + /** + * Creates an instance of UmbDocumentAuditLogRepository. + * @param {UmbControllerHost} host + * @memberof UmbDocumentAuditLogRepository + */ + constructor(host: UmbControllerHost) { + super(host); + this.#dataSource = new UmbDocumentAuditLogServerDataSource(host); + } + + /** + * Request the audit log for a document + * @param {UmbAuditLogRequestArgs} args + * @return {*} + * @memberof UmbDocumentAuditLogRepository + */ + async requestAuditLog(args: UmbAuditLogRequestArgs) { + return this.#dataSource.getAuditLog(args); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/audit-log/repository/document-audit-log.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/audit-log/repository/document-audit-log.server.data-source.ts new file mode 100644 index 0000000000..f35b3587ef --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/audit-log/repository/document-audit-log.server.data-source.ts @@ -0,0 +1,57 @@ +import type { UmbAuditLogRequestArgs } from '../types.js'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { DocumentService } from '@umbraco-cms/backoffice/external/backend-api'; +import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; + +/** + * Server data source for the document audit log + * @export + * @class UmbAuditLogServerDataSource + */ +export class UmbDocumentAuditLogServerDataSource { + #host: UmbControllerHost; + + /** + * Creates an instance of UmbAuditLogServerDataSource. + * @param {UmbControllerHost} host + * @memberof UmbAuditLogServerDataSource + */ + constructor(host: UmbControllerHost) { + this.#host = host; + } + + /** + * Get the audit log for a document + * @param {UmbAuditLogRequestArgs} args + * @return {*} + * @memberof UmbDocumentAuditLogServerDataSource + */ + async getAuditLog(args: UmbAuditLogRequestArgs) { + const { data, error } = await tryExecuteAndNotify( + this.#host, + DocumentService.getDocumentByIdAuditLog({ + id: args.unique, + orderDirection: args.orderDirection, + sinceDate: args.sinceDate, + skip: args.skip, + take: args.take, + }), + ); + + if (data) { + const mappedItems = data.items.map((item) => { + return { + user: item.user ? { unique: item.user.id } : null, + timestamp: item.timestamp, + logType: item.logType, + comment: item.comment, + parameters: item.parameters, + }; + }); + + return { data: { items: mappedItems, total: data.total } }; + } + + return { error }; + } +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/audit-log/repository/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/audit-log/repository/index.ts new file mode 100644 index 0000000000..3b931d3592 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/audit-log/repository/index.ts @@ -0,0 +1 @@ +export { UmbDocumentAuditLogRepository } from './document-audit-log.repository.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/audit-log/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/audit-log/types.ts new file mode 100644 index 0000000000..62f9072b8d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/audit-log/types.ts @@ -0,0 +1,18 @@ +import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; +import type { UmbDirectionType } from '@umbraco-cms/backoffice/utils'; + +export interface UmbAuditLogRequestArgs { + unique: string; + orderDirection?: UmbDirectionType; + sinceDate?: string; + skip?: number; + take?: number; +} + +export interface UmbDocumentAuditLogModel { + user: UmbReferenceByUnique; + timestamp: string; + logType: AuditTypeModel; + comment?: string | null; + parameters?: string | null; +}