예제 #1
0
 /// <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();
 }
예제 #2
0
        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);
        }
예제 #3
0
        /// <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) }));
            }
        }
예제 #4
0
        /// <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) }));
            }
        }