private async Task <IActionResult> HandleReadResultRequest(imsx_RequestHeaderInfoType requestHeader, imsx_POXBodyType requestBody) { var readRequest = requestBody.Item as readResultRequest ?? new readResultRequest(); var readResponse = new readResultResponse(); try { var request = new ReadResultRequest(readRequest.resultRecord.sourcedGUID.sourcedId); var response = await OnReadResultAsync(request); if (response.StatusCode != StatusCodes.Status200OK) { return(CreateFailureResponse(readResponse, requestHeader.imsx_messageIdentifier, response.StatusCode, response.StatusDescription)); } if (response.Result == null) { return(CreateFailureResponse(readResponse, requestHeader.imsx_messageIdentifier, response.StatusCode, response.StatusDescription ?? "TC did not read result.")); } if (response.Result.Score.HasValue) { // The score exists readResponse.result = new ResultType { resultScore = new TextType() }; var cultureInfo = new CultureInfo("en"); readResponse.result.resultScore.language = cultureInfo.Name; readResponse.result.resultScore.textString = response.Result.Score.Value.ToString(cultureInfo); return(CreateSuccessResponse(readResponse, requestHeader.imsx_messageIdentifier, response.StatusDescription ?? $"Score for {readRequest.resultRecord.sourcedGUID.sourcedId} is read")); } else { // The score could exist, but not found. If the grade has not yet been set via a replaceResult operation // or an existing grade has been deleted via a deleteResult operation, the TC should return a valid // response with a present but empty textString element. The TC should not return 0.0 to indicate a // non-existent grade and the TC should not return a failure status when a grade does not exist. // It should simply return an "empty" grade. readResponse.result = new ResultType { resultScore = new TextType() }; var cultureInfo = new CultureInfo("en"); readResponse.result.resultScore.language = cultureInfo.Name; readResponse.result.resultScore.textString = string.Empty; return(CreateSuccessResponse(readResponse, requestHeader.imsx_messageIdentifier, response.StatusDescription ?? $"Score for {readRequest.resultRecord.sourcedGUID.sourcedId} is null")); } } catch (Exception ex) { return(CreateFailureResponse(readResponse, requestHeader.imsx_messageIdentifier, StatusCodes.Status500InternalServerError, ex.Message)); } }
private imsx_POXEnvelopeType HandleReadResultRequest(imsx_RequestHeaderInfoType requestHeader, imsx_POXBodyType requestBody) { imsx_POXEnvelopeType response; var readRequest = requestBody.Item as readResultRequest ?? new readResultRequest(); var readResponse = new readResultResponse(); var result = ReadResult(readRequest.resultRecord.sourcedGUID.sourcedId); if (result.IsValid) { if (!result.Score.HasValue) { // The score could exist, but not found. If the grade has not yet been set via a replaceResult operation // or an existing grade has been deleted via a deleteResult operation, the TC should return a valid // response with a present but empty textString element. The TC should not return 0.0 to indicate a // non-existent grade and the TC should not return a failure status when a grade does not exist. // It should simply return an "empty" grade. response = CreateSuccessResponse(requestHeader.imsx_messageIdentifier, $"Score for {readRequest.resultRecord.sourcedGUID.sourcedId} is null"); readResponse.result = new ResultType { resultScore = new TextType() }; var cultureInfo = new CultureInfo("en"); readResponse.result.resultScore.language = cultureInfo.Name; readResponse.result.resultScore.textString = string.Empty; } else { // The score exists response = CreateSuccessResponse(requestHeader.imsx_messageIdentifier, $"Score for {readRequest.resultRecord.sourcedGUID.sourcedId} is read"); readResponse.result = new ResultType { resultScore = new TextType() }; var cultureInfo = new CultureInfo("en"); readResponse.result.resultScore.language = cultureInfo.Name; readResponse.result.resultScore.textString = result.Score.Value.ToString(cultureInfo); } } else { // The score could not exist (invalid assignment or user) response = CreateCustomResponse(requestHeader.imsx_messageIdentifier, $"Invalid score sourcedId {readRequest.resultRecord.sourcedGUID.sourcedId}", imsx_CodeMajorType.failure); } response.imsx_POXBody.Item = readResponse; return(response); }
private imsx_POXEnvelopeType HandleReadResultRequest(imsx_RequestHeaderInfoType requestHeader, imsx_POXBodyType requestBody) { imsx_POXEnvelopeType response; var readRequest = requestBody.Item as readResultRequest ?? new readResultRequest(); var readResponse = new readResultResponse(); var result = ReadResult(readRequest.resultRecord.sourcedGUID.sourcedId); if (result.IsValid) { if (!result.Score.HasValue) { // The score could exist, but not found. If the grade has not yet been set via a replaceResult operation // or an existing grade has been deleted via a deleteResult operation, the TC should return a valid // response with a present but empty textString element. The TC should not return 0.0 to indicate a // non-existent grade and the TC should not return a failure status when a grade does not exist. // It should simply return an "empty" grade. response = CreateSuccessResponse(requestHeader.imsx_messageIdentifier, $"Score for {readRequest.resultRecord.sourcedGUID.sourcedId} is null"); readResponse.result = new ResultType {resultScore = new TextType()}; var cultureInfo = new CultureInfo("en"); readResponse.result.resultScore.language = cultureInfo.Name; readResponse.result.resultScore.textString = string.Empty; } else { // The score exists response = CreateSuccessResponse(requestHeader.imsx_messageIdentifier, $"Score for {readRequest.resultRecord.sourcedGUID.sourcedId} is read"); readResponse.result = new ResultType {resultScore = new TextType()}; var cultureInfo = new CultureInfo("en"); readResponse.result.resultScore.language = cultureInfo.Name; readResponse.result.resultScore.textString = result.Score.Value.ToString(cultureInfo); } } else { // The score could not exist (invalid assignment or user) response = CreateCustomResponse(requestHeader.imsx_messageIdentifier, $"Invalid score sourcedId {readRequest.resultRecord.sourcedGUID.sourcedId}", imsx_CodeMajorType.failure); } response.imsx_POXBody.Item = readResponse; return response; }