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)); }
public async Task <FormObjectViewModel> GetForm(ObjectId formObjectId) { var formTask = await formCollection.FindAsync(_ => _.Id == formObjectId); var fieldTask = await fieldCollection.FindAsync(_ => _.formId == formObjectId); FormViewModel form = await formTask.SingleOrDefaultAsync(); List <FieldViewModel> fields = await fieldTask.ToListAsync(); return(FormUtils.CombineFormAndFields(form, fields)); }