public static Task <TResult> CreateConnectorAsync <TResult>(Guid connectorId, Guid sourceAdapterId, Guid destinationAdapterId, Connector.SynchronizationMethod flow, Guid performingAsActorId, Claim[] claims, Func <TResult> onCreated, Func <Connection, TResult> onCreatedAndModified, Func <TResult> onAlreadyExists, Func <Guid, TResult> onRelationshipAlreadyExists, Func <Guid, TResult> onAdapterDoesNotExist, Func <string, TResult> onFailure) { return(Persistence.AdapterDocument.UpdateAsync(sourceAdapterId, (sourceAdapter, saveSourceAdapterAsync) => { return Persistence.AdapterDocument.UpdateAsync(destinationAdapterId, async(destinationAdapter, saveDestinationAdapterAsync) => { if (destinationAdapter.resourceType != sourceAdapter.resourceType) { return onFailure($"Cannot connect `{sourceAdapter.resourceType}` to `{destinationAdapter.resourceType}`."); } return await await Persistence.ConnectorDocument.CreateWithoutAdapterUpdateAsync(connectorId, sourceAdapterId, destinationAdapterId, flow, sourceAdapter.resourceType, async() => { await saveSourceAdapterAsync(sourceAdapter.connectorIds .Append(connectorId) .Distinct() .ToArray(), sourceAdapter.name, sourceAdapter.identifiers); await saveDestinationAdapterAsync(destinationAdapter.connectorIds .Append(connectorId) .Distinct() .ToArray(), destinationAdapter.name, destinationAdapter.identifiers); //var connector = new Connector() //{ // connectorId = connectorId, // adapterExternalId = destinationAdapterId, // adapterInternalId = sourceAdapterId, // createdBy = sourceAdapterId, // synchronizationMethod = flow, //}; //var connection = Convert(sourceAdapter, connector, destinationAdapter); return onCreated(); }, onAlreadyExists.AsAsyncFunc(), (existingConnector) => { return onRelationshipAlreadyExists(existingConnector.connectorId).AsTask(); }); }, () => onAdapterDoesNotExist(destinationAdapterId)); }, () => onAdapterDoesNotExist(sourceAdapterId))); }
public static Task <HttpResponseMessage> CreateConnectorAsync( [Property] Guid id, [Property(Name = EastFive.Api.Resources.Connector.SourcePropertyName)] Guid source, [Property(Name = EastFive.Api.Resources.Connector.DestinationPropertyName)] Guid destination, [Property(Name = EastFive.Api.Resources.Connector.FlowPropertyName)] Connector.SynchronizationMethod Flow, Security security, Context context, HttpRequestMessage request, UrlHelper url, CreatedResponse onCreated, CreatedBodyResponse <Resources.Connection> onCreatedAndModifiedConnection, CreatedBodyResponse <Resources.Connector> onCreatedAndModified, AlreadyExistsResponse onAlreadyExists, AlreadyExistsReferencedResponse onRelationshipAlreadyExists, ReferencedDocumentNotFoundResponse onReferenceNotFound, UnauthorizedResponse onUnauthorized, GeneralConflictResponse onFailure) { return(Connectors.CreateConnectorAsync(id, source, destination, Flow, security.performingAsActorId, security.claims, () => onCreated(), (connection) => { return request.Headers.Accept .OrderByDescending(accept => accept.Quality.HasValue ? accept.Quality.Value : 1.0) .First( (accept, next) => { if ( accept.MediaType.ToLower() == "x-ordering/connection" || accept.MediaType.ToLower() == "x-ordering/connection+json") { return onCreatedAndModifiedConnection( ConnectionController.GetResource(connection, url), "x-ordering/connection+json"); } if ( accept.MediaType.ToLower() == "x-ordering/connector" || accept.MediaType.ToLower() == "x-ordering/connector+json" || accept.MediaType.ToLower() == "application/json") { return onCreatedAndModified( GetResource(connection.connector, url), "x-ordering/connector+json"); } return next(); }, () => onCreatedAndModified(GetResource(connection.connector, url))); }, () => onAlreadyExists(), (existingConnectorId) => onRelationshipAlreadyExists(existingConnectorId), (brokenId) => onReferenceNotFound(), (why) => onFailure(why))); }
public static async Task <TResult> UpdateConnectorAsync <TResult>(Guid connectorId, Connector.SynchronizationMethod flow, Guid performingAsActorId, Claim[] claims, Func <TResult> onCreated, Func <TResult> onAdapterDoesNotExist, Func <string, TResult> onFailure) { return(await Persistence.ConnectorDocument.UpdateAsync(connectorId, async (connector, saveAsync) => { await saveAsync(flow); return onCreated(); }, onAdapterDoesNotExist)); }
public static Task <HttpResponseMessage> UpdateConnectorAsync( [Property] Guid id, [Property(Name = EastFive.Api.Resources.Connector.SourcePropertyName)] Guid source, [PropertyOptional(Name = EastFive.Api.Resources.Connector.DestinationPropertyName)] Guid?destination, [Property(Name = EastFive.Api.Resources.Connector.FlowPropertyName)] Connector.SynchronizationMethod Flow, Security security, Context context, HttpRequestMessage request, UrlHelper url, NoContentResponse onUpdated, NotFoundResponse onNotFound, UnauthorizedResponse onUnauthorized, GeneralConflictResponse onFailure) { return(Connectors.UpdateConnectorAsync(id, Flow, security.performingAsActorId, security.claims, () => onUpdated(), () => onNotFound(), (why) => onFailure(why))); }