AuditController.java
- package no.nav.data.common.auditing;
- import io.swagger.v3.oas.annotations.Operation;
- import io.swagger.v3.oas.annotations.responses.ApiResponse;
- import io.swagger.v3.oas.annotations.tags.Tag;
- import lombok.extern.slf4j.Slf4j;
- import no.nav.data.common.auditing.domain.AuditVersion;
- import no.nav.data.common.auditing.domain.AuditVersionRepository;
- import no.nav.data.common.auditing.domain.MailLogRepository;
- import no.nav.data.common.auditing.dto.AuditLogResponse;
- import no.nav.data.common.auditing.dto.AuditResponse;
- import no.nav.data.common.auditing.dto.MailLogResponse;
- import no.nav.data.common.rest.PageParameters;
- import no.nav.data.common.rest.RestResponsePage;
- import no.nav.data.common.security.azure.support.MailLog;
- import no.nav.data.common.storage.StorageService;
- import no.nav.data.common.storage.domain.GenericStorage;
- import org.springdoc.core.annotations.ParameterObject;
- import org.springframework.data.domain.Page;
- import org.springframework.data.domain.Pageable;
- import org.springframework.http.HttpStatus;
- import org.springframework.http.ResponseEntity;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.RestController;
- import java.util.List;
- import java.util.UUID;
- import static no.nav.data.common.utils.StreamUtils.convert;
- @Slf4j
- @RestController
- @RequestMapping("/audit")
- @Tag(name = "Audit")
- public class AuditController {
- private final AuditVersionRepository repository;
- private final StorageService storage;
- private final MailLogRepository mailLogRepository;
- public AuditController(AuditVersionRepository repository, StorageService storage, MailLogRepository mailLogRepository) {
- this.repository = repository;
- this.storage = storage;
- this.mailLogRepository = mailLogRepository;
- }
- @Operation(summary = "Get Audit log")
- @ApiResponse(description = "Audit log fetched")
- @GetMapping
- public ResponseEntity<RestResponsePage<AuditResponse>> getAll(@ParameterObject PageParameters paging, @RequestParam(required = false) String table) {
- log.info("Received request for Audit {} table {}", paging, table);
- Pageable pageable = paging.createSortedPageByFieldDescending(AuditVersion.Fields.time);
- Page<AuditResponse> page;
- if (table != null) {
- page = repository.findByTable(table, pageable).map(AuditVersion::convertToResponse);
- } else {
- page = repository.findAll(pageable).map(AuditVersion::convertToResponse);
- }
- return new ResponseEntity<>(new RestResponsePage<>(page), HttpStatus.OK);
- }
- @Operation(summary = "Get Audit log for object")
- @ApiResponse(description = "Audit log fetched")
- @GetMapping("/log/{id}")
- public ResponseEntity<AuditLogResponse> findForId(@PathVariable String id) {
- log.info("Received request for Audit with the id={}", id);
- List<AuditVersion> log = repository.findByTableIdOrderByTimeDesc(id);
- return new ResponseEntity<>(new AuditLogResponse(id, convert(log, AuditVersion::convertToResponse)), HttpStatus.OK);
- }
- @Operation(summary = "Get mail log")
- @ApiResponse(description = "Mail log fetched")
- @GetMapping("/maillog")
- public ResponseEntity<RestResponsePage<MailLogResponse>> getAllMailLog(@ParameterObject PageParameters paging,
- @RequestParam(name = "filterOutUpdates", required = false, defaultValue = "false") boolean filterOutUpdates) {
- log.info("Received request for MailLog {}", paging);
- Pageable pageable = paging.createSortedPageByFieldDescending("LAST_MODIFIED_DATE");
- var page = (filterOutUpdates ? mailLogRepository.findAllNonUpdates(pageable) : mailLogRepository.findAll(pageable))
- .map(GenericStorage::toMailLog).map(MailLog::convertToResponse);
- return new ResponseEntity<>(new RestResponsePage<>(page), HttpStatus.OK);
- }
- @Operation(summary = "Get mail log for id")
- @ApiResponse(description = "Audit log fetched")
- @GetMapping("/maillog/{id}")
- public ResponseEntity<MailLogResponse> findMailLog(@PathVariable UUID id) {
- log.info("Received request for MailLog with the id={}", id);
- return new ResponseEntity<>(storage.get(id, MailLog.class).convertToResponse(), HttpStatus.OK);
- }
- @Operation(summary = "Get mail log for user")
- @ApiResponse(description = "Mail log fetched")
- @GetMapping("/maillog/user/{user}")
- public ResponseEntity<RestResponsePage<MailLogResponse>> getMailLogForUser(@PathVariable String user) {
- log.info("Received request for MailLog for user {}", user);
- var list = mailLogRepository.findByTo(user);
- return new ResponseEntity<>(new RestResponsePage<>(convert(list, gs -> gs.toMailLog().convertToResponse())), HttpStatus.OK);
- }
- static class AuditLogPage extends RestResponsePage<AuditResponse> {
- }
- static class MailLogPage extends RestResponsePage<MailLogResponse> {
- }
- }