Find one auditlog endpoint and remove payload from findMany endpoint

This commit is contained in:
Fernando Chavez 2022-12-23 11:54:32 +01:00
parent a32ddfe058
commit a60014d949
5 changed files with 67 additions and 4 deletions

View File

@ -3,7 +3,7 @@
const { validateFindMany } = require('../validation/audit-logs');
module.exports = {
async getAuditLogs(ctx) {
async findMany(ctx) {
const { query } = ctx.request;
await validateFindMany(query);
@ -12,4 +12,13 @@ module.exports = {
ctx.body = body;
},
async findOne(ctx) {
const { id } = ctx.params;
const auditLogs = strapi.container.get('audit-logs');
const body = await auditLogs.findOne(id);
ctx.body = body;
},
};

View File

@ -47,7 +47,16 @@ module.exports = {
{
method: 'GET',
path: '/audit-logs',
handler: 'auditLogs.getAuditLogs',
handler: 'auditLogs.findMany',
config: {
// @TODO: Check to right permissions
policies: ['admin::isAuthenticatedAdmin'],
},
},
{
method: 'GET',
path: '/audit-logs/:id',
handler: 'auditLogs.findOne',
config: {
// @TODO: Check to right permissions
policies: ['admin::isAuthenticatedAdmin'],

View File

@ -45,6 +45,7 @@ describe('Audit logs service', () => {
const mockAddContentType = jest.fn();
const mockEntityServiceCreate = jest.fn();
const mockEntityServiceFindPage = jest.fn();
const mockEntityServiceFindOne = jest.fn();
const mockGet = jest.fn((name) => {
if (name === 'content-types') {
return {
@ -68,6 +69,7 @@ describe('Audit logs service', () => {
entityService: {
create: mockEntityServiceCreate,
findPage: mockEntityServiceFindPage,
findOne: mockEntityServiceFindOne,
},
eventHub: createEventHub(),
requestContext: {
@ -164,12 +166,33 @@ describe('Audit logs service', () => {
await strapi.eventHub.emit('entry.create', { meta: 'test' });
const params = { page: 1, pageSize: 10, order: 'createdAt:DESC', populate: ['user'] };
const params = { page: 1, pageSize: 10, order: 'createdAt:DESC' };
const result = await auditLogsService.findMany(params);
expect(mockEntityServiceFindPage).toHaveBeenCalledTimes(1);
expect(mockEntityServiceFindPage).toHaveBeenCalledWith('admin::audit-log', params);
expect(mockEntityServiceFindPage).toHaveBeenCalledWith('admin::audit-log', {
...params,
populate: ['user'],
fields: ['action', 'date'],
});
expect(result).toEqual({ results: [], pagination: {} });
});
it('should find one audit log with the right params', async () => {
const auditLogsService = createAuditLogsService(strapi);
await auditLogsService.register();
mockEntityServiceFindOne.mockResolvedValueOnce({ id: 1 });
await strapi.eventHub.emit('entry.create', { meta: 'test' });
const result = await auditLogsService.findOne(1);
expect(mockEntityServiceFindOne).toHaveBeenCalledTimes(1);
expect(mockEntityServiceFindOne).toHaveBeenCalledWith('admin::audit-log', 1, {
populate: ['user'],
fields: ['action', 'date', 'payload'],
});
expect(result).toEqual({ id: 1, user: null });
});
});
});

View File

@ -93,6 +93,20 @@ const createAuditLogsService = (strapi) => {
};
},
async findOne(id) {
const result = await this._provider.findOne(id);
if (!result) {
return null;
}
const { user, ...rest } = result;
return {
...rest,
user: user ? getService('user').sanitizeUser(user) : null,
};
},
unsubscribe() {
if (this._eventHubUnsubscribe) {
this._eventHubUnsubscribe();

View File

@ -22,9 +22,17 @@ const provider = {
findMany(query) {
return strapi.entityService.findPage('admin::audit-log', {
populate: ['user'],
fields: ['action', 'date'],
...query,
});
},
findOne(id) {
return strapi.entityService.findOne('admin::audit-log', id, {
populate: ['user'],
fields: ['action', 'date', 'payload'],
});
},
};
},
};