コード例 #1
0
ファイル: ResponseService.cs プロジェクト: Rud156/Forms
        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);
        }
コード例 #2
0
ファイル: FormService.cs プロジェクト: Rud156/Forms
        public async Task <FormObjectViewModel> CreateForm(NewFormViewModel form)
        {
            ObjectId formId = ObjectId.GenerateNewId();
            List <FieldViewModel> fields = new List <FieldViewModel>();

            foreach (var field in form.fields)
            {
                string fieldType = field.fieldType;
                if (!TypeConstants.IsValidFieldType(fieldType))
                {
                    throw new Exception("Invalid Field Type");
                }

                FieldViewModel fieldViewModel = new FieldViewModel
                {
                    Id        = ObjectId.GenerateNewId(),
                    formId    = formId,
                    fieldType = field.fieldType,
                    index     = field.index,
                    title     = field.title,
                    createdAt = DateTime.UtcNow
                };

                if (fieldType == TypeConstants.CHECKBOX_INPUT || fieldType == TypeConstants.DROP_DOWN_INPUT ||
                    fieldType == TypeConstants.RADIO_INPUT)
                {
                    var values = Constants.ConvertJsonObject(field.value);
                    fieldViewModel.value = values;
                }
                else
                {
                    fieldViewModel.value = field.value;
                }

                fields.Add(fieldViewModel);
            }

            if (fields.Count != 0)
            {
                await fieldCollection.InsertManyAsync(fields);
            }

            IEnumerable <ObjectId> fieldIds = from _ in fields
                                              select _.Id;

            FormViewModel formViewModel = new FormViewModel
            {
                Id        = formId,
                createdAt = DateTime.UtcNow,
                createdBy = form.createdBy,
                formTitle = form.title,
                fields    = fieldIds.ToList()
            };

            await formCollection.InsertOneAsync(formViewModel);

            return(FormUtils.CombineFormAndFields(formViewModel, fields));
        }
コード例 #3
0
ファイル: FormService.cs プロジェクト: Rud156/Forms
        public async Task <FieldViewModel> AddNewFieldToForm(NewFieldViewModel field, ObjectId formId)
        {
            ObjectId fieldObjectId = ObjectId.GenerateNewId();
            string   fieldType     = field.fieldType;

            if (!TypeConstants.IsValidFieldType(fieldType))
            {
                throw new Exception("Invalid Field Type");
            }

            FieldViewModel fieldViewModel = new FieldViewModel
            {
                Id        = fieldObjectId,
                formId    = formId,
                createdAt = DateTime.UtcNow,
                index     = field.index,
                fieldType = field.fieldType,
                title     = field.title
            };

            if (fieldType == TypeConstants.CHECKBOX_INPUT || fieldType == TypeConstants.DROP_DOWN_INPUT ||
                fieldType == TypeConstants.RADIO_INPUT)
            {
                var values = Constants.ConvertJsonObject(field.value);
                fieldViewModel.value = values;
            }
            else
            {
                fieldViewModel.value = field.value;
            }

            await formCollection.UpdateOneAsync(_ => _.Id == formId,
                                                Builders <FormViewModel> .Update.Push <ObjectId>(_ => _.fields, fieldObjectId));

            await fieldCollection.InsertOneAsync(fieldViewModel);

            return(fieldViewModel);
        }
コード例 #4
0
ファイル: FormService.cs プロジェクト: Rud156/Forms
        public async Task <FieldViewModel> UpdateField(NewFieldViewModel field, ObjectId formId, ObjectId fieldId)
        {
            if (!TypeConstants.IsValidFieldType(field.fieldType))
            {
                throw new Exception("Invalid Field Type");
            }

            string fieldType  = field.fieldType;
            object fieldValue = field.value;

            if (fieldType == TypeConstants.CHECKBOX_INPUT || fieldType == TypeConstants.DROP_DOWN_INPUT ||
                fieldType == TypeConstants.RADIO_INPUT)
            {
                var values = Constants.ConvertJsonObject(field.value);
                fieldValue = values;
            }

            UpdateResult fieldUpdateResult = await fieldCollection.UpdateOneAsync(
                _ => _.Id == fieldId && _.formId == formId,
                Builders <FieldViewModel> .Update
                .Set(_ => _.title, field.title)
                .Set(_ => _.fieldType, field.fieldType)
                .Set(_ => _.index, field.index)
                .Set(_ => _.value, fieldValue));

            if (fieldUpdateResult.IsAcknowledged)
            {
                var fieldTask = await fieldCollection.FindAsync(_ => _.Id == fieldId);

                return(await fieldTask.SingleOrDefaultAsync());
            }
            else
            {
                throw new Exception("Unable to update field content");
            }
        }