/// <summary> /// ConnectionString kommt aus den appsettings.json /// </summary> public UnitOfWork(ApplicationDbContext dbContext) { _dbContext = dbContext; Books = new BookRepository(_dbContext); Authors = new AuthorRepository(_dbContext); IsIsbnValid = new IsbnValidation(); }
public static IEnumerable <Book> ReadBooksFromCsv() { string inputFile = "books.csv"; string[][] notValidMatrix = MyFile.ReadStringMatrixFromCsv(inputFile, false); IsbnValidation isbnValidation = new IsbnValidation(); string[][] matrix = notValidMatrix .Where(b => isbnValidation .IsValid(b[3])) .ToArray() ; List <Book> books = new List <Book>(); List <BookAuthor> bookAuthors = new List <BookAuthor>(); Dictionary <string, Author> authors = new Dictionary <string, Author>(); foreach (var item in notValidMatrix) { string[] authorsAll = item[0].Trim(' ').Split('~'); Book book = new Book { Title = item[1].Trim(' '), Publishers = item[2].Trim(' '), Isbn = item[3].Trim(' ') }; foreach (var an in authorsAll) { if (!authors.TryGetValue(an, out Author author)) { author = new Author { Name = an.Trim(' ') }; authors[an] = author; } BookAuthor bookAuthor = new BookAuthor { Book = book, Author = author }; book.BookAuthors.Add(bookAuthor); } books.Add(book); } return(books); }
/// <inheritdoc /> /// <summary> /// Jedes Buch muss zumindest einen Autor haben. /// Weiters darf ein Autor einem Buch nicht mehrfach zugewiesen /// werden. /// </summary> /// <param name="validationContext"></param> /// <returns></returns> public IEnumerable <ValidationResult> Validate(ValidationContext validationContext) { ValidationResult result = new IsbnValidation().GetValidationResult(Isbn, new ValidationContext(Isbn)); if (result != null && result != ValidationResult.Success) { yield return(new ValidationResult(result.ErrorMessage, new string[] { nameof(Isbn) })); } if (BookAuthors.Count == 0) { yield return(new ValidationResult("Book must have at least one author", new string[] { nameof(BookAuthors) })); } var duplicates = BookAuthors.GroupBy(_ => _.Author) .Where(_ => _.Count() > 1) .Select(_ => _.Key); foreach (var duplicate in duplicates) { yield return(new ValidationResult($"{duplicate.Name} are twice authors of the book", new string[] { nameof(BookAuthors) })); } }
/// <inheritdoc /> /// <summary> /// Jedes Buch muss zumindest einen Autor haben. /// Weiters darf ein Autor einem Buch nicht mehrfach zugewiesen /// werden. /// </summary> /// <param name="validationContext"></param> /// <returns></returns> public IEnumerable <ValidationResult> Validate(ValidationContext validationContext) { if (BookAuthors.Count < 1 || BookAuthors == null) { yield return(new ValidationResult( "Buch muss mindestens einen Author haben", new string[] { nameof(BookAuthors) })); } ValidationResult validationResult = new IsbnValidation().GetValidationResult(Isbn, new ValidationContext(Isbn)); if (validationResult != null || validationResult != ValidationResult.Success) { yield return(new ValidationResult(validationResult.ErrorMessage, new string[] { nameof(Isbn) })); } var duplicateAuthors = BookAuthors .GroupBy(_ => _.Author) .Where(_ => _.Count() > 1) .Select(_ => _.Key); foreach (var duplicateAuthor in duplicateAuthors) { yield return(new ValidationResult($"{duplicateAuthor.Name} are twice authors of the book", new string[] { nameof(BookAuthors) })); } }