Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace MusicHub.DataProcessor
- {
- using System;
- using System.Collections.Generic;
- using System.ComponentModel.DataAnnotations;
- using System.Globalization;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Xml.Serialization;
- using Data;
- using MusicHub.Data.Models;
- using MusicHub.Data.Models.Enums;
- using MusicHub.DataProcessor.ImportDtos;
- using Newtonsoft.Json;
- public class Deserializer
- {
- private const string ErrorMessage = "Invalid data";
- private const string SuccessfullyImportedWriter
- = "Imported {0}";
- private const string SuccessfullyImportedProducerWithPhone
- = "Imported {0} with phone: {1} produces {2} albums";
- private const string SuccessfullyImportedProducerWithNoPhone
- = "Imported {0} with no phone number produces {1} albums";
- private const string SuccessfullyImportedSong
- = "Imported {0} ({1} genre) with duration {2}";
- private const string SuccessfullyImportedPerformer
- = "Imported {0} ({1} songs)";
- public static string ImportWriters(MusicHubDbContext context, string jsonString)
- {
- var writersDtos = JsonConvert.DeserializeObject<Writer[]>(jsonString);
- var sb = new StringBuilder();
- var writers = new List<Writer>();
- foreach (var writerDto in writersDtos)
- {
- if (!IsValid(writerDto))
- {
- sb.AppendLine(ErrorMessage);
- continue;
- }
- var writer = new Writer
- {
- Name = writerDto.Name,
- Pseudonym = writerDto.Pseudonym
- };
- writers.Add(writer);
- sb.AppendLine(string.Format(SuccessfullyImportedWriter, writerDto.Name));
- }
- context.Writers.AddRange(writers);
- context.SaveChanges();
- return sb.ToString();
- }
- public static string ImportProducersAlbums(MusicHubDbContext context, string jsonString)
- {
- var producersDtos = JsonConvert.DeserializeObject<ImportProducersAlbumsDto[]>(jsonString);
- var sb = new StringBuilder();
- var producers = new List<Producer>();
- var albums = new List<Album>();
- foreach (var producerDto in producersDtos)
- {
- var isValidProducer = IsValid(producerDto);
- var isValidAlbum = producerDto.Albums.All(IsValid);
- if(!isValidProducer || !isValidAlbum)
- {
- sb.AppendLine(ErrorMessage);
- continue;
- }
- var producer = new Producer
- {
- Name = producerDto.Name,
- Pseudonym = producerDto.Pseudonym,
- PhoneNumber = producerDto.PhoneNumber
- };
- foreach (var albumDto in producerDto.Albums)
- {
- producer.Albums.Add(new Album
- {
- Name = albumDto.Name,
- ReleaseDate = DateTime.ParseExact(albumDto.ReleaseDate, "dd/MM/yyyy", CultureInfo.InvariantCulture)
- });
- }
- producers.Add(producer);
- string message = producer.PhoneNumber == null
- ? string.Format(SuccessfullyImportedProducerWithNoPhone, producer.Name, producer.Albums.Count)
- : string.Format(SuccessfullyImportedProducerWithPhone, producer.Name, producer.PhoneNumber, producer.Albums.Count);
- sb.AppendLine(message);
- }
- context.Producers.AddRange(producers);
- context.Albums.AddRange(albums);
- context.SaveChanges();
- return sb.ToString().TrimEnd();
- }
- public static string ImportSongs(MusicHubDbContext context, string xmlString)
- {
- var xmlSerializer = new XmlSerializer(typeof(ImportSongsDto[]),
- new XmlRootAttribute("Songs"));
- var songsDtos = (ImportSongsDto[])xmlSerializer
- .Deserialize(new StringReader(xmlString));
- var sb = new StringBuilder();
- var songs = new List<Song>();
- foreach (var songDto in songsDtos)
- {
- if (!IsValid(songDto))
- {
- sb.AppendLine(ErrorMessage);
- continue;
- }
- var genre = Enum.TryParse(songDto.Genre, out Genre genreResult);
- var album = context.Albums.Find(songDto.AlbumId);
- var writer = context.Writers.Find(songDto.WriterId);
- var songTitle = songs.Any(s => s.Name == songDto.Name);
- if (!genre || album == null || writer == null || songTitle)
- {
- sb.AppendLine(ErrorMessage);
- continue;
- }
- var song = AutoMapper.Mapper.Map<Song>(songDto);
- songs.Add(song);
- sb.AppendLine(string.Format(SuccessfullyImportedSong, songDto.Name, songDto.Genre, songDto.Duration));
- }
- context.Songs.AddRange(songs);
- context.SaveChanges();
- return sb.ToString().TrimEnd();
- }
- public static string ImportSongPerformers(MusicHubDbContext context, string xmlString)
- {
- var xmlSerializer = new XmlSerializer(typeof(ImportPerformersDto[]), new XmlRootAttribute("Performers"));
- var performersDtos = (ImportPerformersDto[])xmlSerializer.Deserialize(new StringReader(xmlString));
- var sb = new StringBuilder();
- var performers = new List<Performer>();
- foreach (var performerDto in performersDtos)
- {
- if (!IsValid(performerDto))
- {
- sb.AppendLine(ErrorMessage);
- continue;
- }
- var validSongsCount = context.Songs.Count(s => performerDto.PerformerSongs.Any(i => i.Id == s.Id));
- if (validSongsCount != performerDto.PerformerSongs.Length)
- {
- sb.AppendLine(ErrorMessage);
- continue;
- }
- var performer = new Performer
- {
- FirstName = performerDto.FirstName,
- LastName = performerDto.LastName,
- Age = performerDto.Age,
- NetWorth = performerDto.NetWorth
- };
- foreach (var songPerf in performerDto.PerformerSongs)
- {
- performer.PerformerSongs.Add(new SongPerformer
- {
- SongId = songPerf.Id
- });
- }
- performers.Add(performer);
- sb.AppendLine(string.Format(SuccessfullyImportedPerformer, performer.FirstName, performer.PerformerSongs.Count));
- }
- context.Performers.AddRange(performers);
- context.SaveChanges();
- return sb.ToString().TrimEnd();
- }
- private static bool IsValid(object dto)
- {
- var validationContext = new ValidationContext(dto);
- var validationResult = new List<ValidationResult>();
- return Validator.TryValidateObject(dto, validationContext, validationResult, true);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement