protected override Task <object> ExecuteAsync(IAggregateCommand command) { VerifyNotDeleted(); switch (command) { case AddField addField: return(UpdateAsync(addField, c => { GuardSchemaField.CanAdd(Snapshot.SchemaDef, c); Add(c); long id; if (c.ParentFieldId == null) { id = Snapshot.SchemaDef.FieldsByName[c.Name].Id; } else { id = ((IArrayField)Snapshot.SchemaDef.FieldsById[c.ParentFieldId.Value]).FieldsByName[c.Name].Id; } return EntityCreatedResult.Create(id, Version); })); case CreateSchema createSchema: return(CreateAsync(createSchema, async c => { await GuardSchema.CanCreate(c, appProvider); Create(c); })); case SynchronizeSchema synchronizeSchema: return(UpdateAsync(synchronizeSchema, c => { GuardSchema.CanSynchronize(c); Synchronize(c); })); case DeleteField deleteField: return(UpdateAsync(deleteField, c => { GuardSchemaField.CanDelete(Snapshot.SchemaDef, deleteField); DeleteField(c); })); case LockField lockField: return(UpdateAsync(lockField, c => { GuardSchemaField.CanLock(Snapshot.SchemaDef, lockField); LockField(c); })); case HideField hideField: return(UpdateAsync(hideField, c => { GuardSchemaField.CanHide(Snapshot.SchemaDef, c); HideField(c); })); case ShowField showField: return(UpdateAsync(showField, c => { GuardSchemaField.CanShow(Snapshot.SchemaDef, c); ShowField(c); })); case DisableField disableField: return(UpdateAsync(disableField, c => { GuardSchemaField.CanDisable(Snapshot.SchemaDef, c); DisableField(c); })); case EnableField enableField: return(UpdateAsync(enableField, c => { GuardSchemaField.CanEnable(Snapshot.SchemaDef, c); EnableField(c); })); case UpdateField updateField: return(UpdateAsync(updateField, c => { GuardSchemaField.CanUpdate(Snapshot.SchemaDef, c); UpdateField(c); })); case ReorderFields reorderFields: return(UpdateAsync(reorderFields, c => { GuardSchema.CanReorder(Snapshot.SchemaDef, c); Reorder(c); })); case UpdateSchema updateSchema: return(UpdateAsync(updateSchema, c => { GuardSchema.CanUpdate(Snapshot.SchemaDef, c); Update(c); })); case PublishSchema publishSchema: return(UpdateAsync(publishSchema, c => { GuardSchema.CanPublish(Snapshot.SchemaDef, c); Publish(c); })); case UnpublishSchema unpublishSchema: return(UpdateAsync(unpublishSchema, c => { GuardSchema.CanUnpublish(Snapshot.SchemaDef, c); Unpublish(c); })); case ConfigureScripts configureScripts: return(UpdateAsync(configureScripts, c => { GuardSchema.CanConfigureScripts(Snapshot.SchemaDef, c); ConfigureScripts(c); })); case ChangeCategory changeCategory: return(UpdateAsync(changeCategory, c => { GuardSchema.CanChangeCategory(Snapshot.SchemaDef, c); ChangeCategory(c); })); case ConfigurePreviewUrls configurePreviewUrls: return(UpdateAsync(configurePreviewUrls, c => { GuardSchema.CanConfigurePreviewUrls(c); ConfigurePreviewUrls(c); })); case DeleteSchema deleteSchema: return(UpdateAsync(deleteSchema, c => { GuardSchema.CanDelete(Snapshot.SchemaDef, c); Delete(c); })); default: throw new NotSupportedException(); } }