Skip to content

Commit

Permalink
MODCON-56 implemented get publication results
Browse files Browse the repository at this point in the history
  • Loading branch information
grabsefx committed Jul 10, 2023
1 parent c413597 commit d3fd55f
Show file tree
Hide file tree
Showing 7 changed files with 128 additions and 3 deletions.
18 changes: 17 additions & 1 deletion descriptors/ModuleDescriptor-template.json
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,16 @@
],
"modulePermissions": []
},
{
"methods": [
"GET"
],
"pathPattern": "/consortia/{consortiumId}/publications/{publicationId}/results",
"permissionsRequired": [
"consortia.publications-results.item.get"
],
"modulePermissions": []
},
{
"methods": [
"GET"
Expand Down Expand Up @@ -308,7 +318,8 @@
"consortia.sharing-instances.item.get",
"consortia.sharing-instances.collection.get",
"consortia.publications.item.post",
"consortia.publications.item.get"
"consortia.publications.item.get",
"consortia.publications-results.item.get"
]
},
{
Expand Down Expand Up @@ -351,6 +362,11 @@
"displayName": "publish coordinator get publication details request",
"description": "publish coordinator get publication details request"
},
{
"permissionName": "consortia.publications-results.item.get",
"displayName": "publish coordinator results",
"description": "publish coordinator results"
},
{
"permissionName": "consortia.user-tenants.collection.get",
"displayName": "get user tenants",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.folio.consortia.domain.dto.PublicationDetailsResponse;
import org.folio.consortia.domain.dto.PublicationRequest;
import org.folio.consortia.domain.dto.PublicationResponse;
import org.folio.consortia.domain.dto.PublicationResultCollection;
import org.folio.consortia.service.PublicationService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
Expand All @@ -28,4 +29,9 @@ public ResponseEntity<PublicationResponse> publishRequests(UUID consortiumId, Pu
public ResponseEntity<PublicationDetailsResponse> getPublicationDetails(UUID consortiumId, UUID publicationId){
return ResponseEntity.ok(publishCoordinatorService.getPublicationDetails(consortiumId, publicationId));
}

@Override
public ResponseEntity<PublicationResultCollection> getPublicationResults(UUID consortiumId, UUID publicationId) {
return ResponseEntity.ok(publishCoordinatorService.getPublicationResults(consortiumId, publicationId));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@
import org.folio.consortia.domain.dto.PublicationDetailsResponse;
import org.folio.consortia.domain.dto.PublicationRequest;
import org.folio.consortia.domain.dto.PublicationResponse;
import org.folio.consortia.domain.dto.PublicationResultCollection;

public interface PublicationService {
PublicationResponse publishRequest(UUID consortiumId, PublicationRequest publication);

PublicationDetailsResponse getPublicationDetails(UUID consortiumId, UUID publicationId);

PublicationResultCollection getPublicationResults(UUID consortiumId, UUID publicationId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
import org.folio.consortia.domain.dto.PublicationDetailsResponse;
import org.folio.consortia.domain.dto.PublicationRequest;
import org.folio.consortia.domain.dto.PublicationResponse;
import org.folio.consortia.domain.dto.PublicationResult;
import org.folio.consortia.domain.dto.PublicationResultCollection;
import org.folio.consortia.domain.dto.PublicationStatus;
import org.folio.consortia.domain.dto.PublicationStatusError;
import org.folio.consortia.domain.entity.PublicationStatusEntity;
Expand Down Expand Up @@ -79,7 +81,7 @@ public PublicationResponse publishRequest(UUID consortiumId, PublicationRequest

@Override
public PublicationDetailsResponse getPublicationDetails(UUID consortiumId, UUID publicationId) {
log.debug("getPublicationDetails:: Trying to retrieve publicationDetails by consortiumId: {} and publicationId id: {}", consortiumId, publicationId);
log.debug("getPublicationDetails:: Trying to retrieve publication details by consortiumId: {} and publicationId id: {}", consortiumId, publicationId);

consortiumService.checkConsortiumExistsOrThrow(consortiumId);
var publicationStatusEntity = publicationStatusRepository.findById(publicationId)
Expand Down Expand Up @@ -265,4 +267,27 @@ private PublicationResponse buildPublicationResponse(UUID publicationId) {
.status(PublicationStatus.IN_PROGRESS);
}


public PublicationResultCollection getPublicationResults(UUID consortiumId, UUID publicationId){
log.debug("getPublicationResults:: Trying to retrieve publication results by consortiumId: {} and publicationId id: {}", consortiumId, publicationId);

consortiumService.checkConsortiumExistsOrThrow(consortiumId);
var publicationStatusEntity = publicationStatusRepository.findById(publicationId)
.orElseThrow(() -> new ResourceNotFoundException("publicationId", String.valueOf(publicationId)));

var ptrEntities = publicationTenantRequestRepository.findByPcStateId(publicationId, PageRequest.of(0, Integer.MAX_VALUE));
log.info("getPublicationResults:: Found {} of {} expected tenant request records", ptrEntities.getTotalElements(), publicationStatusEntity.getTotalRecords());

var resultList = ptrEntities.stream()
.map(entity -> new PublicationResult()
.tenantId(entity.getTenantId())
.statusCode(entity.getResponseStatusCode())
.response(entity.getResponse()))
.toList();

return new PublicationResultCollection()
.publicationResults(resultList)
.totalRecords(ptrEntities.getSize());
}

}
22 changes: 21 additions & 1 deletion src/main/resources/swagger.api/publications.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,20 @@ paths:
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalServerError'
/publications/{publicationId}/results:
get:
summary: Get publication details
operationId: getPublicationResults
parameters:
- $ref: "#/components/parameters/consortiumId"
- $ref: "#/components/parameters/publicationId"
responses:
'200':
$ref: '#/components/responses/PublicationResultCollection'
'400':
$ref: '#/components/responses/BadRequest'
'500':
$ref: '#/components/responses/InternalServerError'
components:
requestBodies:
Publication:
Expand All @@ -56,11 +70,17 @@ components:
schema:
$ref: "schemas/publication_schema.yaml#/PublicationResponse"
PublicationDetails:
description: Returns a publish coordinator object
description: Returns a publish coordinator request details
content:
application/json:
schema:
$ref: "schemas/publication_schema.yaml#/PublicationDetailsResponse"
PublicationResultCollection:
description: Returns a publish coordinator results
content:
application/json:
schema:
$ref: "schemas/publication_schema.yaml#/PublicationResultCollection"
Conflict:
description: Validation errors
content:
Expand Down
26 changes: 26 additions & 0 deletions src/main/resources/swagger.api/schemas/publication_schema.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,29 @@ PublicationStatusError:
errorCode:
description: error code of failed request
type: integer

PublicationResultCollection:
description: "A JSON schema for the publication result collection"
type: object
properties:
publicationResults:
type: array
description: "The list of publication results"
items:
type: object
$ref: "publication_schema.yaml#/PublicationResult"
totalRecords:
type: integer

PublicationResult:
description: publication result
properties:
tenantId:
description: "tenant name which failed to execute request"
type: string
response:
description: "response message of tenant request"
type: string
statusCode:
description: "response code of tenant request"
type: integer
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
public class PublicationControllerTest extends BaseIT {
public static final String PUBLICATIONS_URL = "/consortia/%s/publications";
public static final String GET_PUBLICATION_BY_ID_URL = "/consortia/%s/publications/%s";
public static final String GET_PUBLICATION_RESULTS_BY_ID_URL = "/consortia/%s/publications/%s/results";
@MockBean
TenantService tenantService;
@MockBean
Expand Down Expand Up @@ -133,4 +134,32 @@ void getPublicationSuccessful() throws Exception {
);
}

@Test
void getPublicationResultsSuccessful() throws Exception {
var headers = defaultHeaders();
var consortiumId = UUID.randomUUID();
var publicationId = UUID.randomUUID();

var publicationStatusEntity = getMockDataObject("mockdata/publications/publication_status_entity.json", PublicationStatusEntity.class);
publicationStatusEntity.setStatus(PublicationStatus.ERROR);
publicationStatusEntity.setCreatedDate(LocalDateTime.now());

doNothing().when(consortiumService).checkConsortiumExistsOrThrow(any(UUID.class));
when(publicationStatusRepository.findById(publicationId)).thenReturn(Optional.of(publicationStatusEntity));

var tenantRequest1 = createPublicationTenantRequestEntity(publicationStatusEntity, TENANT, PublicationStatus.COMPLETE, 201);
var tenantRequest2 = createPublicationTenantRequestEntity(publicationStatusEntity, TENANT, PublicationStatus.ERROR, 400);
List<PublicationTenantRequestEntity> ptrEntityMockResponse = List.of(tenantRequest1, tenantRequest2);

Page<PublicationTenantRequestEntity> ptrEntities = new PageImpl<>(ptrEntityMockResponse);
when(publicationTenantRequestRepository.findByPcStateId(eq(publicationId), any())).thenReturn(ptrEntities);

this.mockMvc.perform(get(String.format(GET_PUBLICATION_RESULTS_BY_ID_URL, consortiumId, publicationId)).headers(headers))
.andExpectAll(
status().is2xxSuccessful(),
jsonPath("$.publicationResults", is(not(empty()))),
jsonPath("$.totalRecords", is(ptrEntityMockResponse.size()))
);
}

}

0 comments on commit d3fd55f

Please sign in to comment.