private async Task <Collection> GetCollectionAsync( int collectionId, int userId, IDbTransaction transaction = null) { var basicDetails = await _artifactRepository.GetArtifactBasicDetails(collectionId, userId, transaction); if (basicDetails == null || basicDetails.DraftDeleted || basicDetails.LatestDeleted) { throw CollectionsExceptionHelper.NotFoundException(collectionId); } if (basicDetails.PrimitiveItemTypePredefined != (int)ItemTypePredefined.ArtifactCollection) { throw CollectionsExceptionHelper.InvalidTypeException(collectionId); } var permissions = await _artifactPermissionsRepository.GetArtifactPermissions( collectionId, userId, transaction : transaction); RolePermissions collectionPermissions; if (!permissions.TryGetValue(collectionId, out collectionPermissions) || !collectionPermissions.HasFlag(RolePermissions.Read)) { throw CollectionsExceptionHelper.NoAccessException(collectionId); } return(new Collection( basicDetails.ArtifactId, basicDetails.ProjectId, basicDetails.LockedByUserId, collectionPermissions)); }
private async Task LockAsync(Collection collection, int userId, IDbTransaction transaction = null) { if (collection.LockedByUserId == null) { if (!await _lockArtifactsRepository.LockArtifactAsync(collection.Id, userId, transaction)) { throw ExceptionHelper.ArtifactNotLockedException(collection.Id, userId); } } else if (collection.LockedByUserId != userId) { throw CollectionsExceptionHelper.LockedByAnotherUserException(collection.Id, userId); } }
private async Task <Collection> ValidateCollectionAsync(int collectionId, int userId, IDbTransaction transaction) { var collection = await GetCollectionAsync(collectionId, userId, transaction); if (!collection.Permissions.HasFlag(RolePermissions.Edit)) { throw CollectionsExceptionHelper.NoEditPermissionException(collectionId); } await LockAsync(collection, userId, transaction); await _collectionsRepository.RemoveDeletedArtifactsFromCollectionAsync(collection.Id, userId, transaction); return(collection); }