示例#1
0
        public async Task <Movie> MapMovieDtoToMovie(MovieDto dto)
        {
            var createdMovie = new Movie
            {
                MovieId     = dto.MovieId,
                Title       = dto.Title,
                Plot        = dto.Plot,
                AgeRating   = dto.AgeRating,
                ReleaseDate = dto.ReleaseDate,
                Duration    = dto.Duration,
                TrailerUrl  = ReturnTrailerUrl(dto.TrailerUrl)
            };


            var genreList = new List <MovieGenre>();

            foreach (Genre g in dto.Genres)
            {
                var genreToAdd = await _genreRepo.FindByNameAsync(g.Name);

                genreList.Add(new MovieGenre
                {
                    Movie = createdMovie,
                    // Look if the genre with the same name is in db, if not create a new genre
                    Genre = genreToAdd != null ? genreToAdd : new Genre {
                        Name = g.Name.Trim()
                    }
                });
            }
            createdMovie.GenresLink = genreList;

            var writersList = new List <MovieWriter>();

            foreach (Writer w in dto.Writers)
            {
                var writerToAdd = await _writerRepo.FindByNameAsync(w.Name);

                writersList.Add(new MovieWriter
                {
                    Movie = createdMovie,
                    // Look if the writer with the same name is in db, if not create a new writer
                    Writer = writerToAdd ?? new Writer {
                        Name = w.Name.Trim(), ImageUrl = w.ImageUrl
                    }
                });
            }
            createdMovie.WritersLink = writersList;

            var actorList = new List <MovieActor>();

            foreach (Actor a in dto.Actors)
            {
                var actorToAdd = await _actorRepo.FindByNameAsync(a.Name);

                actorList.Add(new MovieActor
                {
                    Movie = createdMovie,
                    Actor = actorToAdd ?? new Actor {
                        Name = a.Name.Trim(), ImageUrl = a.ImageUrl
                    }
                });
            }
            createdMovie.ActorsLink = actorList;

            var directorList = new List <MovieDirector>();

            foreach (Director d in dto.Directors)
            {
                var directorToAdd = await _directorRepo.FindByNameAsync(d.Name);

                directorList.Add(new MovieDirector
                {
                    Movie    = createdMovie,
                    Director = directorToAdd ?? new Director {
                        Name = d.Name.Trim(), ImageUrl = d.ImageUrl
                    }
                });
            }
            createdMovie.DirectorsLink = directorList;

            return(createdMovie);
        }