Skip to content

Commit

Permalink
feat(*): add reusable auditEvent object to create an audit event
Browse files Browse the repository at this point in the history
  • Loading branch information
malaw-moj committed Feb 20, 2025
1 parent 95df647 commit 1119c32
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 36 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package uk.gov.justice.digital.hmpps.learnerrecordsapi.config

import uk.gov.justice.hmpps.sqs.audit.HmppsAuditEvent
import java.time.Instant
import java.util.UUID

object AuditEvent {

val learnerRecordsApi = "learner-records-api"
val subjectTypeRead = "Read"
val readRequestReceived = "Read Request Received"

fun createAuditEvent(userName: String, requestParams: String): HmppsAuditEvent {
val hmppsLRSEvent = HmppsAuditEvent(
readRequestReceived,
"From $userName",
subjectTypeRead,
UUID.randomUUID().toString(),
Instant.now(),
userName,
learnerRecordsApi,
requestParams,
)
return hmppsLRSEvent
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,14 @@ import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestHeader
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import uk.gov.justice.digital.hmpps.learnerrecordsapi.config.AuditEvent.createAuditEvent
import uk.gov.justice.digital.hmpps.learnerrecordsapi.logging.LoggerUtil
import uk.gov.justice.digital.hmpps.learnerrecordsapi.logging.LoggerUtil.log
import uk.gov.justice.digital.hmpps.learnerrecordsapi.models.request.LearnerEventsRequest
import uk.gov.justice.digital.hmpps.learnerrecordsapi.models.response.LearnerEventsResponse
import uk.gov.justice.digital.hmpps.learnerrecordsapi.openapi.LearnerEventsApi
import uk.gov.justice.digital.hmpps.learnerrecordsapi.service.LearnerEventsService
import uk.gov.justice.hmpps.sqs.audit.HmppsAuditEvent
import uk.gov.justice.hmpps.sqs.audit.HmppsAuditService
import java.time.Instant
import java.util.*

@RestController
@PreAuthorize("hasRole('ROLE_LEARNER_RECORDS_SEARCH__RO')")
Expand All @@ -31,28 +29,14 @@ class LearnerEventsResource(

val logger = LoggerUtil.getLogger<LearnerEventsResource>()

val learnerRecordsApi = "learner-records-api"
val subjectTypeRead = "Read"
val readRequestReceived = "Read Request Received"

@PostMapping
@Tag(name = "Learning Events")
@LearnerEventsApi
suspend fun findByUln(
@RequestBody @Valid learnerEventsRequest: LearnerEventsRequest,
@RequestHeader("X-Username", required = true) userName: String,
): ResponseEntity<LearnerEventsResponse> {
val hmppsLRSEvent = HmppsAuditEvent(
readRequestReceived,
"From $userName",
subjectTypeRead,
UUID.randomUUID().toString(),
Instant.now(),
userName,
learnerRecordsApi,
learnerEventsRequest.toString(),
)
auditService.publishEvent(hmppsLRSEvent)
auditService.publishEvent(createAuditEvent(userName, learnerEventsRequest.toString()))
logger.log("Received a post request to learner events endpoint", learnerEventsRequest)
val learnerEventsResponse = learnerEventsService.getLearningEvents(learnerEventsRequest, userName)
return ResponseEntity.status(HttpStatus.OK).body(learnerEventsResponse)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,14 @@ import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestHeader
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import uk.gov.justice.digital.hmpps.learnerrecordsapi.config.AuditEvent.createAuditEvent
import uk.gov.justice.digital.hmpps.learnerrecordsapi.logging.LoggerUtil
import uk.gov.justice.digital.hmpps.learnerrecordsapi.logging.LoggerUtil.log
import uk.gov.justice.digital.hmpps.learnerrecordsapi.models.request.LearnersRequest
import uk.gov.justice.digital.hmpps.learnerrecordsapi.models.response.LearnersResponse
import uk.gov.justice.digital.hmpps.learnerrecordsapi.openapi.FindByDemographicApi
import uk.gov.justice.digital.hmpps.learnerrecordsapi.service.LearnersService
import uk.gov.justice.hmpps.sqs.audit.HmppsAuditEvent
import uk.gov.justice.hmpps.sqs.audit.HmppsAuditService
import java.time.Instant
import java.util.UUID

@RestController
@PreAuthorize("hasRole('ROLE_LEARNER_RECORDS_SEARCH__RO')")
Expand All @@ -30,9 +28,6 @@ class LearnersResource(
) {

val logger = LoggerUtil.getLogger<LearnersResource>()
val learnerRecordsApi = "learner-records-api"
val subjectTypeRead = "Read"
val readRequestReceived = "Read Request Received"

@PostMapping
@Tag(name = "Learners")
Expand All @@ -42,17 +37,7 @@ class LearnersResource(
@RequestHeader("X-Username", required = true) userName: String,
): ResponseEntity<LearnersResponse> {
logger.log("Received a post request to learners endpoint", findLearnerByDemographicsRequest)
val hmppsLRSEvent = HmppsAuditEvent(
readRequestReceived,
"From $userName",
subjectTypeRead,
UUID.randomUUID().toString(),
Instant.now(),
userName,
learnerRecordsApi,
findLearnerByDemographicsRequest.toString(),
)
auditService.publishEvent(hmppsLRSEvent)
auditService.publishEvent(createAuditEvent(userName, findLearnerByDemographicsRequest.toString()))
val learnersResponse = learnersService.getLearners(findLearnerByDemographicsRequest, userName)
return ResponseEntity.status(HttpStatus.OK).body(learnersResponse)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package uk.gov.justice.digital.hmpps.learnerrecordsapi.config

import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Test
import uk.gov.justice.digital.hmpps.learnerrecordsapi.models.request.Gender
import uk.gov.justice.digital.hmpps.learnerrecordsapi.models.request.LearnersRequest
import java.time.Instant
import java.time.LocalDate

class AuditEventTest {

@Test
fun `should create Audit Event when correct set of parameters are passed`() {
val request = LearnersRequest(
givenName = "Firstname",
familyName = "Lastname",
dateOfBirth = LocalDate.of(1990, 1, 1),
gender = Gender.valueOf("MALE"),
lastKnownPostCode = "NE2 2AS",
emailAddress = "test@example.com",
)
val hmppsAuditEvent = AuditEvent.createAuditEvent("User", request.toString())
assertEquals("learner-records-api", hmppsAuditEvent.service)
assertEquals("Read", hmppsAuditEvent.subjectType)
assertEquals("Read Request Received", hmppsAuditEvent.what)
assertEquals("User", hmppsAuditEvent.who)
assertThat(hmppsAuditEvent.`when`).isBeforeOrEqualTo(Instant.now())
assertTrue(hmppsAuditEvent.details.toString().contains("NE2 2AS"))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ class OpenApiDocsTest : IntegrationTestBase() {
.expectBody()
.jsonPath("$.paths[*][*][?(!@.security)]")
.value<List<Any>> { list ->
// Assert that the list has only 6 items since there are 6 test endpoints
// Assert that the list has only 12 items since there are 6 test endpoints
assertThat(list).hasSize(12)
}
}
Expand Down

0 comments on commit 1119c32

Please sign in to comment.