public async Task DeleteProject(int userId, int projectId) { ProjectStatus?projectStatus; InstanceItem project = await _instanceRepository.GetInstanceProjectAsync(projectId, userId, fromAdminPortal : true); if (!TryGetProjectStatusIfProjectExist(project, out projectStatus)) { throw new ResourceNotFoundException( I18NHelper.FormatInvariant(ErrorMessages.ProjectWasDeletedByAnotherUser, project.Id, project.Name), ErrorCodes.ResourceNotFound); } if (projectStatus == ProjectStatus.Live) { Func <IDbTransaction, long, Task> action = async(transaction, transactionId) => { var revisionId = await _instanceRepository.RemoveProject(userId, projectId, transaction); await _instanceRepository.DeactivateWorkflowsWithLastAssignmentForDeletedProject(projectId, transaction); var artifactIds = await _instanceRepository.GetProjectArtifactIds(projectId, revisionId - 1, userId, transaction : transaction); await PostOperation(artifactIds, revisionId, userId, transactionId, transaction); }; await _instanceRepository.RunInTransactionAsync(action); } else { await _instanceRepository.PurgeProject(projectId, project); } }