private void ThrowIfNotADeleteTransform(WorkspaceResultTransform transform) { if (!( transform.Action == WorkspaceResultTransformAction.DeleteAll || transform.Action == WorkspaceResultTransformAction.DeleteSpecificResults || transform.Action == WorkspaceResultTransformAction.DeleteByQueryText)) { throw new InvalidRequestFetchoException("The transform passed through is not a delete action"); } }
public async Task <HttpResponseMessage> TransformWorkspaceResultsByWorkspaceId(Guid workspaceId, [FromBody] WorkspaceResultTransform transform) { try { WorkspaceResultTransform.Validate(transform); using (var db = new Database()) { // do we have access to that target? if (transform.HasTarget) { await ThrowIfNotValidPermission( db, transform.TargetAccessKeyId, WorkspaceAccessPermissions.Write | WorkspaceAccessPermissions.Owner | WorkspaceAccessPermissions.Manage); } if (transform.Action == WorkspaceResultTransformAction.DeleteAll) { transform.ResultsAffected = await db.DeleteAllWorkspaceResultsByWorkspaceId(workspaceId); } else if (transform.Action == WorkspaceResultTransformAction.DeleteSpecificResults) { transform.ResultsAffected = await db.DeleteWorkspaceResultsByWorkspaceId(workspaceId, transform.Results); } else if (transform.Action == WorkspaceResultTransformAction.DeleteByQueryText) { var query = new Query(transform.QueryText); ThrowIfQueryContainsInvalidOptions(query); var results = await db.GetWorkspaceResults(workspaceId); var resultsToDelete = query.Distill(results); transform.ResultsAffected = await db.DeleteWorkspaceResultsByWorkspaceId(workspaceId, resultsToDelete); } else if (transform.Action == WorkspaceResultTransformAction.MoveAllTo) { var targetWorkspaceId = await GetWorkspaceIdOrThrowIfNoAccess(transform.TargetAccessKeyId); await db.MoveAllWorkspaceResultsByWorkspaceId(workspaceId, targetWorkspaceId); } else if (transform.Action == WorkspaceResultTransformAction.MoveSpecificTo) { var targetWorkspaceId = await GetWorkspaceIdOrThrowIfNoAccess(transform.TargetAccessKeyId); await db.MoveWorkspaceResultsByWorkspaceId(workspaceId, targetWorkspaceId, transform.Results); } else if (transform.Action == WorkspaceResultTransformAction.MoveByQueryText) { var targetWorkspaceId = await GetWorkspaceIdOrThrowIfNoAccess(transform.TargetAccessKeyId); var query = new Query(transform.QueryText); ThrowIfQueryContainsInvalidOptions(query); var results = await db.GetWorkspaceResults(workspaceId); var resultsToMove = query.Distill(results); transform.ResultsAffected = await db.MoveWorkspaceResultsByWorkspaceId(workspaceId, targetWorkspaceId, resultsToMove); } else if (transform.Action == WorkspaceResultTransformAction.CopyAllTo) { var targetWorkspaceId = await GetWorkspaceIdOrThrowIfNoAccess(transform.TargetAccessKeyId); await db.MoveAllWorkspaceResultsByWorkspaceId(workspaceId, targetWorkspaceId); } else if (transform.Action == WorkspaceResultTransformAction.CopySpecificTo) { var targetWorkspaceId = await GetWorkspaceIdOrThrowIfNoAccess(transform.TargetAccessKeyId); await db.MoveWorkspaceResultsByWorkspaceId(workspaceId, targetWorkspaceId, transform.Results); } else if (transform.Action == WorkspaceResultTransformAction.CopyByQueryText) { var targetWorkspaceId = await GetWorkspaceIdOrThrowIfNoAccess(transform.TargetAccessKeyId); var query = new Query(transform.QueryText); ThrowIfQueryContainsInvalidOptions(query); var results = await db.GetWorkspaceResults(workspaceId); var resultsToCopy = query.Distill(results); transform.ResultsAffected = await db.MoveWorkspaceResultsByWorkspaceId(workspaceId, targetWorkspaceId, resultsToCopy); } else if (transform.Action == WorkspaceResultTransformAction.TagAll) { await db.TagAllWorkspaceResultsByWorkspaceId(workspaceId, transform.Tag); } else if (transform.Action == WorkspaceResultTransformAction.TagSpecificResults) { await db.TagWorkspaceResultsByWorkspaceId(workspaceId, transform.Results, transform.Tag); } else if (transform.Action == WorkspaceResultTransformAction.TagByQueryText) { var query = new Query(transform.QueryText); ThrowIfQueryContainsInvalidOptions(query); var results = await db.GetWorkspaceResults(workspaceId); var resultsToTag = query.Distill(results); transform.ResultsAffected = await db.TagWorkspaceResultsByWorkspaceId(workspaceId, resultsToTag, transform.Tag); } else if (transform.Action == WorkspaceResultTransformAction.UntagAll) { await db.UntagAllWorkspaceResultsByWorkspaceId(workspaceId, transform.Tag); } else if (transform.Action == WorkspaceResultTransformAction.UntagSpecificResults) { await db.UntagWorkspaceResultsByWorkspaceId(workspaceId, transform.Results, transform.Tag); } else if (transform.Action == WorkspaceResultTransformAction.UntagByQueryText) { var query = new Query(transform.QueryText); ThrowIfQueryContainsInvalidOptions(query); var results = await db.GetWorkspaceResults(workspaceId); var resultsToTag = query.Distill(results); transform.ResultsAffected = await db.UntagWorkspaceResultsByWorkspaceId(workspaceId, resultsToTag, transform.Tag); } transform.Success = true; return(CreateOKResponse(transform)); } } catch (Exception ex) { Utility.LogException(ex); transform.ErrorMessage = ex.Message; transform.Success = false; transform.ResultsAffected = 0; return(CreateConflictResponse(transform)); } }
public async Task <HttpResponseMessage> TransformWorkspaceResultsByAccessKeyId(Guid accessKeyId, [FromBody] WorkspaceResultTransform transform) { try { using (var db = new Database()) await ThrowIfNotValidPermission( db, accessKeyId, WorkspaceAccessPermissions.Write | WorkspaceAccessPermissions.Manage | WorkspaceAccessPermissions.Owner); Guid workspaceId = await GetWorkspaceIdOrThrowIfNoAccess(accessKeyId); return(await TransformWorkspaceResultsByWorkspaceId(workspaceId, transform)); } catch (Exception ex) { Utility.LogException(ex); return(CreateExceptionResponse(ex)); } }