59 lines
2.0 KiB
TypeScript
59 lines
2.0 KiB
TypeScript
import { Controller, Get, Query, UseGuards } from '@nestjs/common';
|
|
import { ApiBearerAuth, ApiOAuth2, ApiTags } from '@nestjs/swagger';
|
|
import { Privileges } from 'src/decorators/privileges.decorator';
|
|
import { Scopes } from 'src/decorators/scopes.decorator';
|
|
import { OAuth2Guard } from 'src/guards/oauth2.guard';
|
|
import { PrivilegesGuard } from 'src/guards/privileges.guard';
|
|
import { ScopesGuard } from 'src/guards/scopes.guard';
|
|
import { AuditAction } from 'src/modules/objects/audit/audit.enum';
|
|
import { AuditSearchClause } from 'src/modules/objects/audit/audit.interfaces';
|
|
import { AuditService } from 'src/modules/objects/audit/audit.service';
|
|
import { FormUtilityService } from 'src/modules/utility/services/form-utility.service';
|
|
import { PaginationService } from 'src/modules/utility/services/paginate.service';
|
|
import { PageOptions } from 'src/types/pagination.interfaces';
|
|
|
|
@ApiBearerAuth()
|
|
@ApiTags('admin')
|
|
@ApiOAuth2(['management'])
|
|
@Controller('/api/admin/audit')
|
|
@UseGuards(OAuth2Guard, PrivilegesGuard, ScopesGuard)
|
|
export class AuditAdminController {
|
|
constructor(
|
|
private _paginate: PaginationService,
|
|
private _form: FormUtilityService,
|
|
private _audit: AuditService,
|
|
) {}
|
|
|
|
/**
|
|
* Get a list of all audit logs or search for a specific log
|
|
* @param search Search and pagination options
|
|
* @returns Paginated audit list
|
|
*/
|
|
@Get('')
|
|
@Scopes('management')
|
|
@Privileges('admin', 'admin:audit')
|
|
async userList(@Query() search: AuditSearchClause & PageOptions) {
|
|
const resultCount = await this._audit.searchForAuditCount(search);
|
|
|
|
const pagination = this._paginate.paginate(search, resultCount);
|
|
|
|
const [list] = await this._audit.searchForAudit(
|
|
pagination.pageSize,
|
|
pagination.offset,
|
|
search,
|
|
);
|
|
|
|
return {
|
|
pagination,
|
|
list: this._form.stripObjectArray(list, ['password']),
|
|
};
|
|
}
|
|
|
|
@Get('filter')
|
|
@Scopes('management')
|
|
@Privileges('admin', 'admin:audit')
|
|
async filterList() {
|
|
return Object.values(AuditAction);
|
|
}
|
|
}
|