public static async Task <string> CreateNewGroupAlbumAsync( GroupAlbumUploadModel groupAlbumUploadModel, Guid userId, IRepositoryManager repositoryManager, IMapper mapper, SpotifyAPICredentials spotifyAPICredentials) { var groupIdentifier = groupAlbumUploadModel.GroupIdentifier.ToUpperInvariant(); try { var group = await repositoryManager.GroupRepository.GetByIdentifierAsync(groupIdentifier); if (group != null) { var isUserMemberOfGroup = await GroupMemberModel.CheckGroupMemberExistsAsync( groupAlbumUploadModel.GroupIdentifier, userId, repositoryManager); if (isUserMemberOfGroup) { var newGroupAlbumIdentifier = await GenerateNewGroupAlbumIdentifierAsync( group.Id, repositoryManager.GroupAlbumRepository).ConfigureAwait(false); var newGroupAlbum = new GroupAlbum { GroupId = group.Id, Identifier = newGroupAlbumIdentifier, IsRandom = groupAlbumUploadModel.IsRandom, CreatedOn = DateTime.Now, CreatedBy = userId, LastUpdatedOn = DateTime.Now, LastUpdatedBy = userId }; var existingAlbum = await repositoryManager.AlbumRepository.CheckExistsBySpotifyIdAsync( groupAlbumUploadModel.AlbumIdentifier); if (existingAlbum != null) { newGroupAlbum.AlbumId = existingAlbum.Id; } else { var newAlbum = await AlbumModel.IndexNewAlbumAsync( groupAlbumUploadModel.AlbumIdentifier, repositoryManager, mapper, spotifyAPICredentials); newGroupAlbum.AlbumId = newAlbum.Id; } await repositoryManager.GroupAlbumRepository.AddAsync(newGroupAlbum); return(newGroupAlbumIdentifier); } else { throw new UserNotGroupMemberException( "You are not able to perform this action", "You are not able to perform this action"); } } else { throw new InvalidTokenException(InvalidTokenType.TokenNotFound, "The requested Group was not found"); } } catch (Exception) { throw; } }