public async Task <ResponseViewModel> UpdateResponse(NewResponseViewModel response, ObjectId formId, ObjectId responseId) { DeleteResult responseDeleteResult = await responseCollection.DeleteOneAsync(_ => _.Id == responseId); if (!responseDeleteResult.IsAcknowledged) { throw new Exception("Unable to update previous response"); } FormObjectViewModel form = await GetForm(formId); List <FieldViewModel> fields = form.fields; if (fields.Count != response.responseValues.Count) { throw new Exception("Responses do not match fields"); } bool fieldsValid = ResponseUtils.ResponseValidator(new List <FieldViewModel>(fields), new List <NewResponseValuesViewModel>(response.responseValues)); if (!fieldsValid) { throw new Exception("Responses do not match fields"); } return(await CreateResponse(response, formId)); }
public async Task <ResponseViewModel> CreateResponse(NewResponseViewModel response, ObjectId formId) { FormObjectViewModel form = await GetForm(formId); List <FieldViewModel> fields = form.fields; if (fields.Count != response.responseValues.Count) { throw new Exception("Responses do not match fields"); } bool fieldsValid = ResponseUtils.ResponseValidator(new List <FieldViewModel>(fields), new List <NewResponseValuesViewModel>(response.responseValues)); if (!fieldsValid) { throw new Exception("Responses do not match fields"); } List <ResponseValueViewModel> responseValues = new List <ResponseValueViewModel>(); foreach (var responseValue in response.responseValues) { if (!TypeConstants.IsValidFieldType(responseValue.responseType)) { throw new Exception("Invalid Response Type"); } ResponseValueViewModel responseValueViewModel = new ResponseValueViewModel { Id = ObjectId.GenerateNewId(), responseType = responseValue.responseType, value = responseValue.value, index = responseValue.index, fieldId = ObjectId.Parse(responseValue.fieldId) }; string responseType = responseValue.responseType; if (responseType == TypeConstants.CHECKBOX_INPUT) { var values = Constants.ConvertJsonObject(responseValue.value); responseValueViewModel.value = values; } responseValues.Add(responseValueViewModel); } ResponseViewModel responseViewModel = new ResponseViewModel { Id = ObjectId.GenerateNewId(), createdBy = response.createdBy, createdAt = DateTime.UtcNow, formId = formId, responseValues = responseValues }; await responseCollection.InsertOneAsync(responseViewModel); return(responseViewModel); }
public static FormObjectViewModel CombineFormAndFields(FormViewModel form, List <FieldViewModel> fields) { if (form == null) { return(null); } FormObjectViewModel formObjectViewModel = new FormObjectViewModel { Id = form.Id, formTitle = form.formTitle, createdAt = form.createdAt, createdBy = form.createdBy, fields = fields }; return(formObjectViewModel); }