Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DMP-4381: Automatically update createdBy and lastModifiedBy when persisting entities to the database #2308

Open
wants to merge 37 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
1677f48
Updated lastModifiedBy and createdBy to auto update based on entity l…
Ben-Edwards-cgi Nov 22, 2024
3098af6
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Nov 22, 2024
c9fa327
Applied review comments
Ben-Edwards-cgi Nov 25, 2024
e4ab4b1
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Nov 25, 2024
001009b
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Nov 26, 2024
50fe7a6
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Nov 26, 2024
0c05c24
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Nov 27, 2024
b5e877c
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Nov 27, 2024
eaa05ad
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Nov 28, 2024
d8b4f06
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Nov 29, 2024
01db930
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Dec 2, 2024
90c1ad2
Applied review comments
Ben-Edwards-cgi Dec 4, 2024
531a450
Fixed typo
Ben-Edwards-cgi Dec 5, 2024
3ce05ef
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Dec 6, 2024
5ea0748
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Dec 6, 2024
7ce5bbc
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Dec 6, 2024
4cf8620
Added integration test
Ben-Edwards-cgi Dec 9, 2024
2a0110e
Updated how we update createdBy and LastModifiedBy
Ben-Edwards-cgi Dec 9, 2024
7914ce0
Fixed circular reference
Ben-Edwards-cgi Dec 9, 2024
08545fc
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Dec 9, 2024
02606b7
Fixed test
Ben-Edwards-cgi Dec 9, 2024
f5989d0
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Dec 10, 2024
7f37da8
Fixed issue with integration tests
Ben-Edwards-cgi Dec 10, 2024
c94111e
Fixed issue with integration tests
Ben-Edwards-cgi Dec 10, 2024
80aa299
Test fixes
Ben-Edwards-cgi Dec 10, 2024
6aed390
Fixed style
Ben-Edwards-cgi Dec 10, 2024
ff6d5a6
Disabled beforeUpdate to check tests
Ben-Edwards-cgi Dec 10, 2024
66589bd
Tmp changes to verify integration tests
Ben-Edwards-cgi Dec 10, 2024
17bd661
Tmp changes to verify integration tests
Ben-Edwards-cgi Dec 10, 2024
895e710
Reverted a few tmp changes
Ben-Edwards-cgi Dec 10, 2024
3b32154
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Dec 11, 2024
8d11520
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Dec 11, 2024
f6af92b
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Dec 11, 2024
62dc14d
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Dec 12, 2024
b8df67c
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Jan 3, 2025
1354d27
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Jan 6, 2025
d737541
Merge branch 'master' into DMP-4381
Ben-Edwards-cgi Jan 6, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ void closeHibernateSession() {
void testFindTransformedMediaWithoutAnyParameters() {
List<TransformedMediaEntity> transformedMediaEntityList
= transformedMediaRepository.findTransformedMedia(
null, null, null,
null, null, null, null, null);
null, null, null,
null, null, null, null, null);
Assertions.assertEquals(generatedMediaEntities.size(), transformedMediaEntityList.size());
Assertions.assertTrue(transformedMediaStub.getTransformedMediaIds(transformedMediaEntityList)
.containsAll(transformedMediaStub.getTransformedMediaIds(generatedMediaEntities)));
Expand All @@ -52,8 +52,8 @@ void testFindTransformedMediaWithoutAnyParameters() {
void testFindTransformedMediaWithId() {
List<TransformedMediaEntity> transformedMediaEntityList
= transformedMediaRepository.findTransformedMedia(
generatedMediaEntities.get(0).getMediaRequest().getId(),
null, null, null, null, null, null, null);
generatedMediaEntities.get(0).getMediaRequest().getId(),
null, null, null, null, null, null, null);
Assertions.assertEquals(1, transformedMediaEntityList.size());
Assertions.assertEquals(generatedMediaEntities.get(0).getId(), transformedMediaEntityList.size());
}
Expand All @@ -62,7 +62,7 @@ void testFindTransformedMediaWithId() {
void testFindTransformedMediaWithCaseNumber() {
List<TransformedMediaEntity> transformedMediaEntityList
= transformedMediaRepository.findTransformedMedia(
null, generatedMediaEntities.get(3).getMediaRequest().getHearing().getCourtCase().getCaseNumber(), null, null, null, null, null, null);
null, generatedMediaEntities.get(3).getMediaRequest().getHearing().getCourtCase().getCaseNumber(), null, null, null, null, null, null);
Assertions.assertEquals(1, transformedMediaEntityList.size());
Assertions.assertEquals(transformedMediaEntityList.get(0).getId(), generatedMediaEntities.get(3).getId());
}
Expand All @@ -72,8 +72,8 @@ void testFindTransformedMediaWithCourtDisplayNameSubstringPrefixMatchOne() {
int nameMatchIndex = 13;
List<TransformedMediaEntity> transformedMediaEntityList
= transformedMediaRepository.findTransformedMedia(
null, null,
TransformedMediaSubStringQueryEnum.COURT_HOUSE.getQueryStringPrefix(Integer.toString(nameMatchIndex)), null, null, null, null, null);
null, null,
TransformedMediaSubStringQueryEnum.COURT_HOUSE.getQueryStringPrefix(Integer.toString(nameMatchIndex)), null, null, null, null, null);
Assertions.assertEquals(1, transformedMediaEntityList.size());
Assertions.assertEquals(generatedMediaEntities.get(nameMatchIndex).getId(), transformedMediaEntityList.get(0).getId());
}
Expand All @@ -95,8 +95,8 @@ void testFindTransformedMediaWithCourtDisplayNameSubstringPostFixMatchOne() {
int nameMatchIndex = 13;
List<TransformedMediaEntity> transformedMediaEntityList
= transformedMediaRepository.findTransformedMedia(
null, null,
TransformedMediaSubStringQueryEnum.COURT_HOUSE.getQueryStringPostfix(Integer.toString(nameMatchIndex)), null, null, null, null, null);
null, null,
TransformedMediaSubStringQueryEnum.COURT_HOUSE.getQueryStringPostfix(Integer.toString(nameMatchIndex)), null, null, null, null, null);
Assertions.assertEquals(1, transformedMediaEntityList.size());
Assertions.assertEquals(generatedMediaEntities.get(nameMatchIndex).getId(), transformedMediaEntityList.get(0).getId());
}
Expand All @@ -117,8 +117,8 @@ void testFindTransformedMediaWithCourtDisplayNameCaseInsensitiveSubstringPostFix
void testFindTransformedMediaWithCourtDisplayNameSubstringMatchAll() {
List<TransformedMediaEntity> transformedMediaEntityList
= transformedMediaRepository.findTransformedMedia(
null, null,
TransformedMediaSubStringQueryEnum.COURT_HOUSE.getQueryStringPrefix(), null, null, null, null, null);
null, null,
TransformedMediaSubStringQueryEnum.COURT_HOUSE.getQueryStringPrefix(), null, null, null, null, null);
Assertions.assertEquals(GENERATION_COUNT, transformedMediaEntityList.size());
Assertions.assertTrue(transformedMediaStub.getTransformedMediaIds(transformedMediaEntityList)
.containsAll(transformedMediaStub.getTransformedMediaIds(generatedMediaEntities)));
Expand All @@ -128,8 +128,8 @@ void testFindTransformedMediaWithCourtDisplayNameSubstringMatchAll() {
void testFindTransformedMediaWithHearingDate() {
List<TransformedMediaEntity> transformedMediaEntityList
= transformedMediaRepository.findTransformedMedia(
null, null, null,
generatedMediaEntities.get(3).getMediaRequest().getHearing().getHearingDate(), null, null, null, null);
null, null, null,
generatedMediaEntities.get(3).getMediaRequest().getHearing().getHearingDate(), null, null, null, null);
Assertions.assertEquals(1, transformedMediaEntityList.size());
Assertions.assertEquals(generatedMediaEntities.get(3).getId(), transformedMediaEntityList.get(0).getId());
}
Expand All @@ -139,8 +139,8 @@ void testFindTransformedMediaWithOwnerExact() {
int nameMatchIndex = 3;
List<TransformedMediaEntity> transformedMediaEntityList
= transformedMediaRepository.findTransformedMedia(
null, null, null, null,
TransformedMediaSubStringQueryEnum.OWNER.getQueryString(Integer.toString(nameMatchIndex)), null, null, null);
null, null, null, null,
TransformedMediaSubStringQueryEnum.OWNER.getQueryString(Integer.toString(nameMatchIndex)), null, null, null);
Assertions.assertEquals(1, transformedMediaEntityList.size());
Assertions.assertEquals(generatedMediaEntities.get(nameMatchIndex).getId(), transformedMediaEntityList.get(0).getId());
}
Expand All @@ -150,8 +150,8 @@ void testFindTransformedMediaWithOwnerPrefix() {
int nameMatchIndex = 13;
List<TransformedMediaEntity> transformedMediaEntityList
= transformedMediaRepository.findTransformedMedia(
null, null, null, null,
TransformedMediaSubStringQueryEnum.OWNER.getQueryStringPostfix(Integer.toString(nameMatchIndex)), null, null, null);
null, null, null, null,
TransformedMediaSubStringQueryEnum.OWNER.getQueryStringPostfix(Integer.toString(nameMatchIndex)), null, null, null);

Assertions.assertEquals(1, transformedMediaEntityList.size());
Assertions.assertEquals(generatedMediaEntities.get(nameMatchIndex).getId(), transformedMediaEntityList.get(0).getId());
Expand Down Expand Up @@ -196,8 +196,8 @@ void testFindTransformedMediaWithOwnerCaseInsensitivePostfix() {
void testFindTransformedMediaWithOwnerSubstringMatchAll() {
List<TransformedMediaEntity> transformedMediaEntityList
= transformedMediaRepository.findTransformedMedia(
null, null, null, null,
TransformedMediaSubStringQueryEnum.OWNER.getQueryStringPostfix(), null, null, null);
null, null, null, null,
TransformedMediaSubStringQueryEnum.OWNER.getQueryStringPostfix(), null, null, null);
Assertions.assertEquals(GENERATION_COUNT, transformedMediaEntityList.size());
Assertions.assertTrue(transformedMediaStub
.getTransformedMediaIds(transformedMediaEntityList)
Expand All @@ -209,8 +209,8 @@ void testFindTransformedMediaWithRequestedByExact() {
int nameMatchIndex = 13;
List<TransformedMediaEntity> transformedMediaEntityList
= transformedMediaRepository.findTransformedMedia(
null, null, null, null, null,
TransformedMediaSubStringQueryEnum.REQUESTED_BY.getQueryString(Integer.toString(nameMatchIndex)), null, null);
null, null, null, null, null,
TransformedMediaSubStringQueryEnum.REQUESTED_BY.getQueryString(Integer.toString(nameMatchIndex)), null, null);
Assertions.assertEquals(1, transformedMediaEntityList.size());
Assertions.assertEquals(generatedMediaEntities.get(nameMatchIndex).getId(), transformedMediaEntityList.get(0).getId());
}
Expand All @@ -220,8 +220,8 @@ void testFindTransformedMediaWithRequestedByPrefix() {
int nameMatchIndex = 13;
List<TransformedMediaEntity> transformedMediaEntityList
= transformedMediaRepository.findTransformedMedia(
null, null, null, null, null,
TransformedMediaSubStringQueryEnum.REQUESTED_BY.getQueryStringPrefix(Integer.toString(13)), null, null);
null, null, null, null, null,
TransformedMediaSubStringQueryEnum.REQUESTED_BY.getQueryStringPrefix(Integer.toString(13)), null, null);
Assertions.assertEquals(1, transformedMediaEntityList.size());
Assertions.assertEquals(generatedMediaEntities.get(nameMatchIndex).getId(), transformedMediaEntityList.get(0).getId());
}
Expand Down Expand Up @@ -263,8 +263,8 @@ void testFindTransformedMediaWithRequestedByCaseInsensitivePostfix() {
void testFindTransformedMediaWithRequestedBySubstringMatchAll() {
List<TransformedMediaEntity> transformedMediaEntityList
= transformedMediaRepository.findTransformedMedia(
null, null, null, null, null,
TransformedMediaSubStringQueryEnum.REQUESTED_BY.getQueryStringPostfix(), null, null);
null, null, null, null, null,
TransformedMediaSubStringQueryEnum.REQUESTED_BY.getQueryStringPostfix(), null, null);
Assertions.assertEquals(GENERATION_COUNT, transformedMediaEntityList.size());
Assertions.assertTrue(transformedMediaStub
.getTransformedMediaIds(transformedMediaEntityList)
Expand All @@ -276,9 +276,9 @@ void testFindTransformedMediaWithRequestedAtFromAndRequestedAtToSameDay() {
int fromAtPosition = 3;
List<TransformedMediaEntity> transformedMediaEntityList
= transformedMediaRepository.findTransformedMedia(
null, null, null, null, null, null,
generatedMediaEntities.get(fromAtPosition).getMediaRequest().getCreatedDateTime(),
generatedMediaEntities.get(fromAtPosition).getMediaRequest().getCreatedDateTime());
null, null, null, null, null, null,
generatedMediaEntities.get(fromAtPosition).getMediaRequest().getCreatedDateTime(),
generatedMediaEntities.get(fromAtPosition).getMediaRequest().getCreatedDateTime());
Assertions.assertEquals(1, transformedMediaEntityList.size());
Assertions.assertEquals(generatedMediaEntities
.get(fromAtPosition).getId(), transformedMediaEntityList.get(0).getId());
Expand All @@ -289,8 +289,8 @@ void testFindTransformedMediaWithRequestedAtFrom() {
int fromAtPosition = 3;
List<TransformedMediaEntity> transformedMediaEntityList
= transformedMediaRepository.findTransformedMedia(
null, null, null, null, null,
null, generatedMediaEntities.get(fromAtPosition).getMediaRequest().getCreatedDateTime(), null);
null, null, null, null, null,
null, generatedMediaEntities.get(fromAtPosition).getMediaRequest().getCreatedDateTime(), null);
Assertions.assertEquals(GENERATION_COUNT - fromAtPosition, transformedMediaEntityList.size());
Assertions.assertTrue(transformedMediaStub
.getTransformedMediaIds(transformedMediaEntityList)
Expand All @@ -314,13 +314,15 @@ void testFindTransformedMediaWithAllQueryParameters() {
TransformedMediaEntity transformedMediaEntityFind = generatedMediaEntities.get(1);
List<TransformedMediaEntity> transformedMediaEntityList
= transformedMediaRepository.findTransformedMedia(transformedMediaEntityFind.getMediaRequest().getId(), transformedMediaEntityFind.getMediaRequest()
.getHearing().getCourtCase().getCaseNumber(), transformedMediaEntityFind.getMediaRequest()
.getHearing().getCourtroom().getCourthouse().getDisplayName(), transformedMediaEntityFind.getMediaRequest()
.getHearing().getHearingDate(), transformedMediaEntityFind.getMediaRequest()
.getCurrentOwner().getUserFullName(), transformedMediaEntityFind.getCreatedBy().getUserFullName(), transformedMediaEntityFind.getMediaRequest()
.getCreatedBy().getCreatedDateTime(), generatedMediaEntities.get(1).getCreatedDateTime());
.getHearing().getCourtCase().getCaseNumber(), transformedMediaEntityFind.getMediaRequest()
.getHearing().getCourtroom().getCourthouse().getDisplayName(),
transformedMediaEntityFind.getMediaRequest()
.getHearing().getHearingDate(), transformedMediaEntityFind.getMediaRequest()
.getCurrentOwner().getUserFullName(),
transformedMediaEntityFind.getCreatedBy().getUserFullName(),
transformedMediaEntityFind.getMediaRequest()
.getCreatedBy().getCreatedDateTime(), generatedMediaEntities.get(1).getCreatedDateTime());
Assertions.assertEquals(1, transformedMediaEntityList.size());
Assertions.assertEquals(transformedMediaEntityFind.getId(), transformedMediaEntityList.get(0).getId());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@
import uk.gov.hmcts.darts.audiorequests.model.AudioRequestType;
import uk.gov.hmcts.darts.common.entity.TransformedMediaEntity;
import uk.gov.hmcts.darts.common.entity.TransientObjectDirectoryEntity;
import uk.gov.hmcts.darts.common.entity.UserAccountEntity;
import uk.gov.hmcts.darts.testutils.IntegrationBase;

import java.time.OffsetDateTime;
import java.util.UUID;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
Expand All @@ -37,14 +39,17 @@ void shouldSaveTransientDataLocation() {

MediaRequestEntity mediaRequestEntity = mediaRequestService.getMediaRequestEntityById(mediaRequestEntity1.getId());
UUID blobId = UUID.fromString("f744a74f-83c0-47e4-8bb2-2fd4d2b68647");

UserAccountEntity userAccount = dartsDatabase.getUserAccountStub().createAuthorisedIntegrationTestUser(false, "NEWCASTLE");
chrisbellingham-hmcts marked this conversation as resolved.
Show resolved Hide resolved
givenBearerTokenExists(userAccount.getEmailAddress());
TransformedMediaEntity transformedMediaEntity = transformedMediaHelper.createTransformedMediaEntity(
mediaRequestEntity,
"aFilename",
mediaRequestEntity.getStartTime(),
mediaRequestEntity.getEndTime(),
1000L
);
assertThat(transformedMediaEntity.getCreatedBy()).isEqualTo(mediaRequestEntity.getCreatedBy());
assertThat(transformedMediaEntity.getLastModifiedBy()).isEqualTo(mediaRequestEntity.getCreatedBy());
TransientObjectDirectoryEntity transientObjectDirectoryEntity = transientObjectDirectoryService.saveTransientObjectDirectoryEntity(
transformedMediaEntity,
blobId
Expand All @@ -62,5 +67,4 @@ void shouldSaveTransientDataLocation() {
.isAfter(OffsetDateTime.parse("2023-07-06T16:05:00.000Z")));
assertNotNull(transientObjectDirectoryEntity.getLastModifiedBy());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
import uk.gov.hmcts.darts.testutils.stubs.DartsDatabaseStub;
import uk.gov.hmcts.darts.testutils.stubs.DartsPersistence;

import java.util.List;

/**
* Base class for integration tests running against a containerized Postgres with Testcontainers.
*/
Expand Down Expand Up @@ -50,6 +52,7 @@ public class PostgresIntegrationBase {
).withDatabaseName("darts")
.withUsername("darts")
.withPassword("darts");
POSTGRES.setPortBindings(List.of("5433:5432"));
}

@DynamicPropertySource
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,4 +101,4 @@ public void updateCreatedByLastModifiedBy(CreatedModifiedBaseEntity createdModif
public void saveAll(List<CaseManagementRetentionEntity> caseManagementRetentionsWithEvents) {
caseManagementRetentionsWithEvents.forEach(this::save);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -96,14 +96,15 @@ public TransformedMediaEntity createTransformedMediaEntity(MediaRequestEntity me
entity.setOutputFilename(filename);
entity.setStartTime(startTime);
entity.setEndTime(endTime);
entity.setCreatedBy(mediaRequest.getCreatedBy());
entity.setLastModifiedBy(mediaRequest.getCreatedBy());
entity.setCreatedBy(mediaRequest.getCreatedBy());
entity.setOutputFormat(audioRequestOutputFormat);
if (nonNull(fileSize)) {
entity.setOutputFilesize(fileSize.intValue());
}
transformedMediaRepository.save(entity);
return entity;
//Ensures createdBy / LastModified does not get overridden by the @CreatedBy / @LastModifiedBy annotation
TransformedMediaEntity savedTM = transformedMediaRepository.save(entity);
return savedTM;
chrisbellingham-hmcts marked this conversation as resolved.
Show resolved Hide resolved
}

@SuppressWarnings({"PMD.CognitiveComplexity"})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,6 @@ public interface UserIdentity {
boolean userHasGlobalAccess(Set<SecurityRoleEnum> globalAccessRolest);

List<Integer> getListOfCourthouseIdsUserHasAccessTo();

Jwt getJwt();
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public UserAccountEntity getUserAccount(Jwt jwt) {
return userAccount;
}

private Jwt getJwt() {
public Jwt getJwt() {
if (SecurityContextHolder.getContext().getAuthentication() != null) {
if (SecurityContextHolder.getContext().getAuthentication().getPrincipal() instanceof Jwt jwt) {
return jwt;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
package uk.gov.hmcts.darts.common.entity.base;

import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.FetchType;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.MappedSuperclass;
import jakarta.persistence.Transient;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.envers.NotAudited;
import uk.gov.hmcts.darts.common.entity.UserAccountEntity;
import uk.gov.hmcts.darts.common.entity.listener.UserAuditListener;

import java.time.OffsetDateTime;

@MappedSuperclass
@Getter
@Setter
public class CreatedBaseEntity {
@EntityListeners(UserAuditListener.class)
public class CreatedBaseEntity implements CreatedBy {
@CreationTimestamp
@Column(name = "created_ts")
private OffsetDateTime createdDateTime;
Expand All @@ -26,4 +30,11 @@ public class CreatedBaseEntity {
@JoinColumn(name = "created_by")
private UserAccountEntity createdBy;

public void setCreatedBy(UserAccountEntity userAccount) {
this.createdBy = userAccount;
this.skipUserAudit = true;//As this was manualy set we should not override it
}

@Transient
private transient boolean skipUserAudit = true;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package uk.gov.hmcts.darts.common.entity.base;

import uk.gov.hmcts.darts.common.entity.UserAccountEntity;

import java.time.OffsetDateTime;

public interface CreatedBy {
UserAccountEntity getCreatedBy();

void setCreatedBy(UserAccountEntity userAccount);

void setCreatedDateTime(OffsetDateTime now);

boolean isSkipUserAudit();

void setSkipUserAudit(boolean value);
}
Loading
Loading