public static ApiModels.Album GetAlbum(DataModels.Album album) { if (album == null) { return(null); } return(new ApiModels.Album() { Id = album.VkId, Title = album.Title, }); }
public async Task <Album> AddAsync(Album newAlbum, CancellationToken ct = default(CancellationToken)) { var album = new DataModels.Album { Title = newAlbum.Title, ArtistId = newAlbum.ArtistId }; _context.Album.Add(album); await _context.SaveChangesAsync(ct); newAlbum.AlbumId = album.AlbumId; return(newAlbum); }
public ApiResponse <object> LoadAudios(DataModels.User user) { //get and remove all current user's albums/audios List <DataModels.Album> dataAlbumList = _dbContext.Albums.Where(x => x.UserId == user.Id).ToList(); List <DataModels.Audio> dataAudioList = _dbContext.Audios.Where(x => x.UserId == user.Id).ToList(); IEnumerable <int> audioIdList = dataAudioList.Select(x => x.VkId); List <DataModels.MixAudio> mixDataAudioList = _dbContext.MixAudios.Where(x => audioIdList.Contains(x.AudioId)).ToList(); //Task loadAlbums = Task.Run(() => // dataAlbumList = _dbContext.Albums.Where(x => x.UserId == user.Id).ToList()); //Task loadAudios = Task.Run(() => // dataAudioList = _dbContext.Audios.Where(x => x.UserId == user.Id).ToList()); //await Task.WhenAll(loadAlbums, loadAudios); _dbContext.MixAudios.RemoveRange(mixDataAudioList); _dbContext.Audios.RemoveRange(dataAudioList); _dbContext.Albums.RemoveRange(dataAlbumList); //download all (okey, 6000) VkModels.AlbumEtity vkAlbumEntity = null; VkModels.AudioEtity vkAudioEntity = null; try { vkAlbumEntity = _vkWebService.GetAlbums(user.AccessToken, 100); } catch (Exception ex) { return(new ApiResponse <object>(ex.Message)); } try { //TODO: mb add few Tasks for better perform? Need to check vkAudioEntity = _vkWebService.GetAudios(user.AccessToken, 6000); } catch (Exception ex) { return(new ApiResponse <object>(ex.Message)); } //album errors if (vkAlbumEntity.error != null) { return(new ApiResponse <object>(vkAlbumEntity.error?.error_msg)); } if (vkAlbumEntity.response == null) { return(new ApiResponse <object>("Album response is null")); } //audio errors if (vkAudioEntity.error != null) { return(new ApiResponse <object>(vkAudioEntity.error?.error_msg)); } if (vkAudioEntity.response == null) { return(new ApiResponse <object>("Audio response is null")); } user.AlbumsCount = vkAlbumEntity.response.items.Count(); user.AudiosCount = vkAudioEntity.response.items.Count(); _dbContext.Entry(user).State = System.Data.Entity.EntityState.Modified; //map albums IEnumerable <DataModels.Album> albums = vkAlbumEntity .response .items .Select(x => { DataModels.Album dataAlbum = VkMapper.GetAlbum(x); dataAlbum.UserId = user.Id; return(dataAlbum); }); //map musics var audioList = new List <DataModels.Audio>(vkAudioEntity.response.items.Count()); for (int i = 0; i < vkAudioEntity.response.items.Count(); i++) { var mappedAudio = VkMapper.GetAudio(vkAudioEntity.response.items.ElementAt(i)); mappedAudio.Order = i + 1; mappedAudio.UserId = user.Id; audioList.Add(mappedAudio); } //add ranges and save changes _dbContext.Albums.AddRange(albums); _dbContext.SaveChanges(); foreach (var aud in audioList) { DataModels.Album album = _dbContext.Albums.Local.FirstOrDefault(x => aud.AlbumId == x.VkId); if (album != null) { aud.AlbumId = album.Id; } } _dbContext.Audios.AddRange(audioList); _dbContext.SaveChanges(); return(new ApiResponse <object>() { Ok = true }); }