Skip to content

Commit

Permalink
Dmp 2895 transcription documents mark for deletion (#1940)
Browse files Browse the repository at this point in the history
  • Loading branch information
mestebanez authored Sep 9, 2024
1 parent 1ca2ca0 commit 84298d9
Show file tree
Hide file tree
Showing 10 changed files with 360 additions and 6 deletions.
35 changes: 33 additions & 2 deletions ModernisedDarts.postman_collection.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"info": {
"_postman_id": "c0ffce99-a96d-499f-b555-19937e81910b",
"_postman_id": "5b8f9be9-b1c5-4fd0-bb8a-5c916191bb6e",
"name": "ModernisedDarts",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
"_exporter_id": "15829068",
"_collection_link": "https://speeding-resonance-716248.postman.co/workspace/darts-workspace2~8cfe3af4-319e-46ad-920e-2ba6cc1f253b/collection/15829068-c0ffce99-a96d-499f-b555-19937e81910b?action=share&source=collection_link&creator=15829068"
"_collection_link": "https://speeding-resonance-716248.postman.co/workspace/darts-workspace~7b348c54-cda1-41d9-aca3-fe24f04ce206/collection/15829068-5b8f9be9-b1c5-4fd0-bb8a-5c916191bb6e?action=share&source=collection_link&creator=15829068"
},
"item": [
{
Expand Down Expand Up @@ -2603,6 +2603,37 @@
},
"response": []
},
{
"name": "/admin/transcription-documents/marked-for-deletion",
"protocolProfileBehavior": {
"disableBodyPruning": true
},
"request": {
"method": "GET",
"header": [
{
"key": "accept",
"value": "*/*"
}
],
"body": {
"mode": "formdata",
"formdata": []
},
"url": {
"raw": "{{serverUrl}}/admin/transcription-documents/marked-for-deletion",
"host": [
"{{serverUrl}}"
],
"path": [
"admin",
"transcription-documents",
"marked-for-deletion"
]
}
},
"response": []
},
{
"name": "/transcriptions/{transcription_id}/document",
"request": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import uk.gov.hmcts.darts.testutils.stubs.TranscriptionStub;
import uk.gov.hmcts.darts.transcriptions.enums.TranscriptionStatusEnum;
import uk.gov.hmcts.darts.transcriptions.exception.TranscriptionApiError;
import uk.gov.hmcts.darts.transcriptions.model.AdminMarkedForDeletionResponseItem;
import uk.gov.hmcts.darts.transcriptions.model.GetTranscriptionDetailAdminResponse;
import uk.gov.hmcts.darts.transcriptions.model.GetTranscriptionDocumentByIdResponse;
import uk.gov.hmcts.darts.transcriptions.model.Problem;
Expand Down Expand Up @@ -59,6 +60,9 @@ class TranscriptionControllerAdminGetTranscriptionIntTest extends IntegrationBas

private static final String ENDPOINT_GET_DOCUMENT_ID = "/admin/transcription-documents/";

private static final String ENDPOINT_DOCUMENT_MARKED_FOR_DELETION = "/admin/transcription-documents/marked-for-deletion";


@Autowired
private SuperAdminUserStub superAdminUserStub;

Expand Down Expand Up @@ -542,6 +546,39 @@ void testSearchForTranscriptionDocumentByIdAuthorisationProblem() throws Excepti
.andReturn();
}

@Test
@Disabled("Impacted by V1_364_*.sql")
void testGetTranscriptionDocumentMarkedForDeletionWithResults() throws Exception {
// TODO: Resume when all test disablements are re-enabled. See https://tools.hmcts.net/jira/browse/DMP-3821
}

@Test
void testGetTranscriptionDocumentMarkedForDeletionNoResults() throws Exception {
superAdminUserStub.givenUserIsAuthorised(userIdentity);

MvcResult mvcResult = mockMvc.perform(get(ENDPOINT_DOCUMENT_MARKED_FOR_DELETION)
.header("Content-Type", "application/json"))
.andExpect(status().is2xxSuccessful())
.andReturn();

AdminMarkedForDeletionResponseItem[] responses = objectMapper.readValue(
mvcResult.getResponse().getContentAsString(),
AdminMarkedForDeletionResponseItem[].class
);
assertEquals(0, responses.length);
assertEquals(200, mvcResult.getResponse().getStatus());
}

@Test
void testGetTranscriptionDocumentMarkedForDeletionNotSuperAdmin() throws Exception {
superAdminUserStub.givenUserIsAuthorised(userIdentity, SecurityRoleEnum.SUPER_USER);

mockMvc.perform(get(ENDPOINT_DOCUMENT_MARKED_FOR_DELETION)
.header("Content-Type", "application/json"))
.andExpect(status().isForbidden())
.andReturn();
}


private TranscriptionDocumentEntity getTranscriptionDocumentEntity(Integer id, List<TranscriptionDocumentEntity> transformedMediaEntityList) {
return transformedMediaEntityList.stream().filter(e -> e.getId().equals(id)).findFirst().get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,15 @@ List<TranscriptionDocumentResult> findTranscriptionMedia(String caseNumber,
OffsetDateTime requestedAtTo,
Boolean isManualTranscription,
String owner);



@Query("""
SELECT t
FROM TranscriptionDocumentEntity t
JOIN t.adminActions ae
JOIN ae.objectHiddenReason hr
WHERE ae.markedForManualDeletion = false AND hr.markedForDeletion = true
""")
List<TranscriptionDocumentEntity> getMarkedForDeletion();
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import uk.gov.hmcts.darts.common.component.validation.Validator;
import uk.gov.hmcts.darts.common.enums.SecurityRoleEnum;
import uk.gov.hmcts.darts.transcriptions.http.api.TranscriptionApi;
import uk.gov.hmcts.darts.transcriptions.model.AdminMarkedForDeletionResponseItem;
import uk.gov.hmcts.darts.transcriptions.model.AttachTranscriptResponse;
import uk.gov.hmcts.darts.transcriptions.model.DownloadTranscriptResponse;
import uk.gov.hmcts.darts.transcriptions.model.GetTranscriptionByIdResponse;
Expand Down Expand Up @@ -276,4 +277,14 @@ public ResponseEntity<TranscriptionDocumentHideResponse> hideTranscriptionDocume
= adminTranscriptionSearchService.hideOrShowTranscriptionDocumentById(transcriptionDocumentId, transcriptionDocumentHideRequest);
return new ResponseEntity<>(response, HttpStatus.OK);
}

@Override
@SecurityRequirement(name = SECURITY_SCHEMES_BEARER_AUTH)
@Authorisation(contextId = ANY_ENTITY_ID,
globalAccessSecurityRoles = {SUPER_ADMIN})
public ResponseEntity<List<AdminMarkedForDeletionResponseItem>> getTranscriptionDocumentsMarkedForDeletion() {
List<AdminMarkedForDeletionResponseItem> response
= transcriptionService.adminGetTranscriptionDocumentsMarkedForDeletion();
return new ResponseEntity<>(response, HttpStatus.OK);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,15 @@
import uk.gov.hmcts.darts.transcriptions.exception.TranscriptionApiError;
import uk.gov.hmcts.darts.transcriptions.model.AdminAction;
import uk.gov.hmcts.darts.transcriptions.model.AdminActionResponse;
import uk.gov.hmcts.darts.transcriptions.model.AdminMarkedForDeletionResponseItem;
import uk.gov.hmcts.darts.transcriptions.model.CaseResponseDetails;
import uk.gov.hmcts.darts.transcriptions.model.CourthouseResponseDetails;
import uk.gov.hmcts.darts.transcriptions.model.CourtroomResponseDetails;
import uk.gov.hmcts.darts.transcriptions.model.GetTranscriptionByIdResponse;
import uk.gov.hmcts.darts.transcriptions.model.GetTranscriptionDetailAdminResponse;
import uk.gov.hmcts.darts.transcriptions.model.GetTranscriptionDocumentByIdResponse;
import uk.gov.hmcts.darts.transcriptions.model.GetTranscriptionWorkflowsResponse;
import uk.gov.hmcts.darts.transcriptions.model.HearingResponseDetails;
import uk.gov.hmcts.darts.transcriptions.model.ReportingRestriction;
import uk.gov.hmcts.darts.transcriptions.model.Requestor;
import uk.gov.hmcts.darts.transcriptions.model.SearchTranscriptionDocumentResponse;
Expand All @@ -35,6 +40,7 @@
import uk.gov.hmcts.darts.transcriptions.model.SearchTranscriptionDocumentResponseHearing;
import uk.gov.hmcts.darts.transcriptions.model.TranscriptionDocumentHideResponse;
import uk.gov.hmcts.darts.transcriptions.model.TranscriptionDocumentResult;
import uk.gov.hmcts.darts.transcriptions.model.TranscriptionResponseDetails;
import uk.gov.hmcts.darts.transcriptions.model.TranscriptionTypeResponse;
import uk.gov.hmcts.darts.transcriptions.model.TranscriptionUrgencyDetails;
import uk.gov.hmcts.darts.transcriptions.model.TranscriptionUrgencyResponse;
Expand Down Expand Up @@ -362,14 +368,22 @@ public GetTranscriptionDocumentByIdResponse getSearchByTranscriptionDocumentId(T
.checksum(entity.getChecksum())
.lastModifiedAt(entity.getLastModifiedTimestamp())
.lastModifiedBy(entity.getLastModifiedBy().getId())
.adminAction(buildAdminAction(entity));
.adminAction(buildAdminActionForHiddenValue(entity));
}

private AdminAction buildAdminAction(TranscriptionDocumentEntity entity) {
private AdminAction buildAdminActionForHiddenValue(TranscriptionDocumentEntity entity) {
if (entity.getAdminActions().isEmpty() || !entity.isHidden()) {
return null;
}

return buildAdminAction(entity);
}

private AdminAction buildAdminAction(TranscriptionDocumentEntity entity) {
if (entity.getAdminActions().isEmpty()) {
return null;
}

var action = entity.getAdminActions().get(0); // assume only 1 exists
return new AdminAction()
.comments(action.getComments())
Expand All @@ -381,6 +395,7 @@ private AdminAction buildAdminAction(TranscriptionDocumentEntity entity) {
.markedForManualDeletionAt(action.getMarkedForManualDelDateTime())
.ticketReference(action.getTicketReference())
.markedForManualDeletionById(action.getMarkedForManualDelBy().getId());

}

public TranscriptionDocumentHideResponse mapHideOrShowResponse(TranscriptionDocumentEntity entity, ObjectAdminActionEntity objectAdminActionEntity) {
Expand All @@ -406,4 +421,47 @@ public TranscriptionDocumentHideResponse mapHideOrShowResponse(TranscriptionDocu
return response;
}

public AdminMarkedForDeletionResponseItem mapTranscriptionDocumentMarkedForDeletion(TranscriptionDocumentEntity transcriptionDocumentEntity) {
AdminMarkedForDeletionResponseItem response = new AdminMarkedForDeletionResponseItem();

response.setTranscriptionDocumentId(transcriptionDocumentEntity.getId());

AdminAction adminAction = buildAdminAction(transcriptionDocumentEntity);

// if the hearing is null then dont read any associated information
if (transcriptionDocumentEntity.getTranscription().getHearing() != null) {
CaseResponseDetails caseResponseDetails = new CaseResponseDetails();
caseResponseDetails.setId(transcriptionDocumentEntity.getTranscription().getHearing().getCourtCase().getId());
caseResponseDetails.setCaseNumber(transcriptionDocumentEntity.getTranscription().getHearing().getCourtCase().getCaseNumber());

HearingEntity hearingEntity = transcriptionDocumentEntity.getTranscription().getHearing();

CourthouseResponseDetails courthouseResponseDetails = new CourthouseResponseDetails();
courthouseResponseDetails.setId(hearingEntity.getCourtroom().getCourthouse().getId());
courthouseResponseDetails.setDisplayName(hearingEntity.getCourtroom().getCourthouse().getDisplayName());

CourtroomResponseDetails courtroomResponseDetails = new CourtroomResponseDetails();
courtroomResponseDetails.setId(hearingEntity.getCourtroom().getId());
courtroomResponseDetails.setName(hearingEntity.getCourtroom().getName());

HearingResponseDetails hearingResponseDetails = new HearingResponseDetails();
hearingResponseDetails.setId(transcriptionDocumentEntity.getTranscription().getHearing().getId());
hearingResponseDetails.setHearingDate(hearingEntity.getHearingDate());

response.setCourthouse(courthouseResponseDetails);
response.setCourtroom(courtroomResponseDetails);
response.setHearing(hearingResponseDetails);
response.setCase(caseResponseDetails);
}

TranscriptionResponseDetails transcriptionResponseDetails = new TranscriptionResponseDetails();
transcriptionResponseDetails.setId(transcriptionDocumentEntity.getTranscription().getId());

response.setAdminAction(adminAction);
response.setTranscription(transcriptionResponseDetails);
response.setTranscriptionDocumentId(transcriptionDocumentEntity.getId());

return response;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import uk.gov.hmcts.darts.common.entity.TranscriptionStatusEntity;
import uk.gov.hmcts.darts.common.entity.TranscriptionWorkflowEntity;
import uk.gov.hmcts.darts.common.entity.UserAccountEntity;
import uk.gov.hmcts.darts.transcriptions.model.AdminMarkedForDeletionResponseItem;
import uk.gov.hmcts.darts.transcriptions.model.AttachTranscriptResponse;
import uk.gov.hmcts.darts.transcriptions.model.DownloadTranscriptResponse;
import uk.gov.hmcts.darts.transcriptions.model.GetTranscriptionByIdResponse;
Expand Down Expand Up @@ -72,4 +73,6 @@ TranscriptionWorkflowEntity saveTranscriptionWorkflow(UserAccountEntity userAcco

List<Integer> rollbackUserTranscriptions(UserAccountEntity entity);

List<AdminMarkedForDeletionResponseItem> adminGetTranscriptionDocumentsMarkedForDeletion();

}
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import uk.gov.hmcts.darts.transcriptions.exception.TranscriptionApiError;
import uk.gov.hmcts.darts.transcriptions.helper.UpdateTranscriptionEntityHelper;
import uk.gov.hmcts.darts.transcriptions.mapper.TranscriptionResponseMapper;
import uk.gov.hmcts.darts.transcriptions.model.AdminMarkedForDeletionResponseItem;
import uk.gov.hmcts.darts.transcriptions.model.AttachTranscriptResponse;
import uk.gov.hmcts.darts.transcriptions.model.DownloadTranscriptResponse;
import uk.gov.hmcts.darts.transcriptions.model.GetTranscriptionByIdResponse;
Expand Down Expand Up @@ -612,6 +613,17 @@ public List<Integer> rollbackUserTranscriptions(UserAccountEntity entity) {
return transcriptionIds;
}

@Override
public List<AdminMarkedForDeletionResponseItem> adminGetTranscriptionDocumentsMarkedForDeletion() {
List<TranscriptionDocumentEntity> transcriptionDocumentEntities = transcriptionDocumentRepository.getMarkedForDeletion();
List<AdminMarkedForDeletionResponseItem> transcriptionResponsesLst = new ArrayList<>();
for (TranscriptionDocumentEntity entity : transcriptionDocumentEntities) {
transcriptionResponsesLst.add(transcriptionResponseMapper.mapTranscriptionDocumentMarkedForDeletion(entity));
}

return transcriptionResponsesLst;
}

private List<TranscriptionEntity> processTranscriptionUpdates(List<UpdateTranscriptionsItem> request) {
List<TranscriptionEntity> foundTranscriptionEntities = transcriptionRepository.findByIdIn(getTranscriptionIdsForRequest(request));
final List<TranscriptionEntity> validated = new ArrayList<>();
Expand Down
78 changes: 77 additions & 1 deletion src/main/resources/openapi/transcriptions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -867,7 +867,6 @@ paths:
schema:
allOf:
- $ref: './problem.yaml'

/admin/transcription-documents/{transcription_document_id}:
get:
tags:
Expand Down Expand Up @@ -952,6 +951,21 @@ paths:
schema:
allOf:
- $ref: './problem.yaml'
/admin/transcription-documents/marked-for-deletion:
get:
tags:
- Transcription
summary: Get transcription documents marked for deletion
operationId: getTranscriptionDocumentsMarkedForDeletion
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/AdminMarkedForDeletionResponseItem'

components:
schemas:
Expand Down Expand Up @@ -1706,6 +1720,68 @@ components:
type: string
description: 'The comments for the admin action'

TranscriptionResponseDetails:
type: object
properties:
id:
type: integer
description: 'The transcription document id'

CaseResponseDetails:
type: object
properties:
id:
type: integer
description: 'The case id'
case_number:
type: string
description: 'The case number'

CourthouseResponseDetails:
type: object
properties:
id:
type: integer
display_name:
type: string

CourtroomResponseDetails:
type: object
properties:
id:
type: integer
name:
type: string

HearingResponseDetails:
type: object
properties:
id:
type: integer
description: 'The case id'
hearing_date:
type: date
description: 'The case number'

AdminMarkedForDeletionResponseItem:
type: object
properties:
transcription_document_id:
type: integer
description: 'The transcription document id'
transcription:
$ref: '#/components/schemas/TranscriptionResponseDetails'
case:
$ref: '#/components/schemas/CaseResponseDetails'
hearing:
$ref: '#/components/schemas/HearingResponseDetails'
courthouse:
$ref: '#/components/schemas/CourthouseResponseDetails'
courtroom:
$ref: '#/components/schemas/CourtroomResponseDetails'
admin_action:
$ref: '#/components/schemas/AdminAction'

TranscriptionsErrorCode:
type: string
enum:
Expand Down
Loading

0 comments on commit 84298d9

Please sign in to comment.