public void Initialize()
 {
     using (JMoviesEntities entities = new JMoviesEntities())
     {
         List <FWEntities.ResultConfiguration> resultConfigurations = new List <FWEntities.ResultConfiguration>();
         foreach (ResultConfiguration resultConfiguration in entities.ResultConfiguration.Include(e => e.ResultMessages))
         {
             if (resultConfiguration.ResultMessages != null)
             {
                 resultConfigurations.Add(new FWEntities.ResultConfiguration
                 {
                     ErrorCode            = resultConfiguration.ErrorCode,
                     RedirectionParameter = resultConfiguration.RedirectionParameter,
                     RedirectionType      = resultConfiguration.RedirectionType,
                     ResultMessages       = resultConfiguration.ResultMessages.Select(e => new FWEntities.ResultMessage
                     {
                         Content = e.Content,
                         Culture = e.Culture
                     }).ToArray()
                 });
             }
         }
         this.resultConfigurations = resultConfigurations.ToArray();
     }
 }
예제 #2
0
        /// <summary>
        /// Gets Person information
        /// </summary>
        /// <param name="id">ID of the Person</param>
        /// <param name="person">Person instance to be populated</param>
        /// <param name="settings">Object containing Data Fetch settings</param>
        /// <returns>Person instance containing retreived information</returns>
        public Person GetPerson(long id, Person person, PersonDataFetchSettings settings)
        {
            using (JMoviesEntities entities = new JMoviesEntities())
            {
                person = entities.Person.FirstOrDefault(e => e.ID == id);
                if (settings.MediaImagesFetchCount != 0 && person != null)
                {
                    //fetch primary image
                    person.PrimaryImage = entities.Image.FirstOrDefault(e => e.ID == person.PrimaryImageID);
                    //fetch images
                    int imageCount = settings.MediaImagesFetchCount;
                    if (imageCount <= 0)
                    {
                        //default value
                        imageCount = 5;
                    }
                    person.Photos = entities.Image.Where(e => e.PersonID == person.ID).Take(imageCount).ToArray();
                }
                if (!settings.FetchImageContents && person != null)
                {
                    RemoveImageContentsFromPerson(person);
                }

                return(person);
            }
        }
예제 #3
0
        public bool IsValid(object[] values)
        {
            if (values != null && values.Length == 1)
            {
                SecureString username = values[0] as SecureString;
                bool         isValid  = true;
                if (username.Length < 6 || username.Length > 55)
                {
                    isValid = false;
                }
                if (isValid)
                {
                    using (JMoviesEntities entities = new JMoviesEntities())
                    {
                        isValid = !entities.User.Any(e => e.UserName == username.ToPlainString());
                    }
                }

                return(isValid);
            }
            else
            {
                return(false);
            }
        }
예제 #4
0
파일: DBTests.cs 프로젝트: JnRMnT/jmovies
        public void InsertScrapedMovieTest()
        {
            IServiceProvider            serviceProvider                       = DIHelper.Initialize();
            ProductionDataFetchSettings productionDataFetchSettings           = new FullProductionDataFetchSettings();
            DbContextOptionsBuilder <JMoviesEntities> dbContextOptionsBuilder = new DbContextOptionsBuilder <JMoviesEntities>();

            dbContextOptionsBuilder.UseLazyLoadingProxies(true);
            using (JMoviesEntities entities = new JMoviesEntities(dbContextOptionsBuilder.Options))
            {
                long[] imdbIDs = new long[] { 1477834, 18652, 16624, 8269, 6958 };
                foreach (long imdbID in imdbIDs)
                {
                    //DBHelper.EmptyDB(entities);
                    IIMDbDataProvider iMDbDataProvider = serviceProvider.GetRequiredService <IIMDbDataProvider>();
                    Movie             movie            = iMDbDataProvider.GetMovie(imdbID, productionDataFetchSettings);

                    ProductionPersistanceManager.Persist(entities, movie);

                    Movie savedMovie = entities.Production.SingleOrDefault(e => e.IMDbID == movie.IMDbID) as Movie;
                    Assert.IsNotNull(savedMovie);
                    Assert.AreEqual(movie.IMDbID, savedMovie.IMDbID);
                    Assert.AreEqual(movie.Title, savedMovie.Title);
                }
            }
        }
예제 #5
0
        private static void HandleAKAs(JMoviesEntities entities, Production production, Production savedProduction)
        {
            Movie movie      = production as Movie;
            Movie savedMovie = savedProduction as Movie;

            if (movie != null && movie.AKAs != null)
            {
                foreach (AKA aka in movie.AKAs.ToArray())
                {
                    EntityEntry entry = null;
                    bool        saved = false;
                    if (savedMovie != null)
                    {
                        AKA savedAKA = entities.AKA.FirstOrDefault(e => e.Name == aka.Name && e.Description == aka.Description && aka.ProductionID == savedMovie.ID);
                        if (savedAKA != null)
                        {
                            aka.ID = savedAKA.ID;
                            entry  = CommonDBHelper.MarkEntityAsUpdated(entities, aka);
                            saved  = true;
                        }
                    }

                    aka.ProductionID = production.ID;
                    if (!saved)
                    {
                        aka.ID = CommonDBHelper.GetNewID <AKA>(entities, e => e.ID);
                        entry  = entities.AKA.Add(aka);
                    }
                    entities.SaveChanges();
                    CommonDBHelper.DetachAllEntries(entities);
                }
            }
        }
예제 #6
0
파일: Register.cs 프로젝트: JnRMnT/jmovies
        public void ExecuteAction(IServiceProvider serviceProvider, ref object request, ref BaseResponse response)
        {
            RegisterRequest  requestMessage  = request as RegisterRequest;
            RegisterResponse responseMessage = response as RegisterResponse;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions
            {
                IsolationLevel = IsolationLevel.ReadCommitted
            }))
            {
                using (JMoviesEntities entities = new JMoviesEntities())
                {
                    string salt = HashHelper.GenerateSalt();
                    string hash = HashHelper.Hash(HashTypeEnum.Sha512, requestMessage.Password, salt);
                    User   user = new User
                    {
                        Email    = requestMessage.Email,
                        Password = new Password
                        {
                            Hash       = hash,
                            HashType   = HashTypeEnum.Sha512,
                            ModifyDate = DateTime.Now,
                            RetryCount = 0,
                            Salt       = salt
                        },
                        RegistrationDate = DateTime.Now,
                        UserName         = requestMessage.Username.ToPlainString()
                    };
                    entities.Password.Add(user.Password);
                    entities.User.Add(user);
                    entities.SaveChanges();
                    scope.Complete();
                }
            }
        }
예제 #7
0
        private static void HandleGenres(JMoviesEntities entities, Production production, Production savedProduction)
        {
            Movie movie      = production as Movie;
            Movie savedMovie = savedProduction as Movie;

            if (movie != null && movie.Genres != null)
            {
                foreach (Genre genre in movie.Genres.ToArray())
                {
                    EntityEntry entry = null;
                    bool        saved = false;
                    if (savedMovie != null)
                    {
                        Genre savedGenre = entities.Genre.FirstOrDefault(e => e.Identifier == genre.Identifier && genre.ProductionID == savedMovie.ID);
                        if (savedGenre != null)
                        {
                            genre.ID = savedGenre.ID;
                            entry    = CommonDBHelper.MarkEntityAsUpdated(entities, genre);
                            saved    = true;
                        }
                    }

                    genre.ProductionID = production.ID;
                    if (!saved)
                    {
                        genre.ID = CommonDBHelper.GetNewID <Genre>(entities, e => e.ID);
                        entry    = entities.Genre.Add(genre);
                    }
                    entities.SaveChanges();
                    CommonDBHelper.DetachAllEntries(entities);
                }
            }
        }
예제 #8
0
        private static void HandleRatings(JMoviesEntities entities, Production production, Production savedProduction)
        {
            if (production.Rating != null)
            {
                EntityEntry entry = null;
                production.Rating.DataSourceID = entities.DataSource.FirstOrDefault(e => e.Identifier == production.Rating.DataSource.Identifier).ID;
                production.Rating.DataSource   = null;

                production.Rating.ProductionID = production.ID;
                production.Rating.Production   = null;

                Rating existingRating = null;
                if (savedProduction != null)
                {
                    existingRating = entities.Rating.FirstOrDefault(e => e.ProductionID == savedProduction.ID);
                }

                if (existingRating != null)
                {
                    production.Rating.ID = existingRating.ID;
                    entry = CommonDBHelper.MarkEntityAsUpdated(entities, production.Rating);
                }
                else
                {
                    production.Rating.ID = CommonDBHelper.GetNewID <Rating>(entities, e => e.ID);
                    entry = entities.Rating.Add(production.Rating);
                }
                entities.SaveChanges();
                CommonDBHelper.DetachAllEntries(entities);
            }
        }
예제 #9
0
        private static void HandleKeywords(JMoviesEntities entities, Production production, Production savedProduction)
        {
            Movie movie      = production as Movie;
            Movie savedMovie = savedProduction as Movie;

            if (movie != null && movie.Keywords != null)
            {
                foreach (Keyword keyword in movie.Keywords.ToArray())
                {
                    EntityEntry entry = null;
                    bool        saved = false;
                    if (savedMovie != null)
                    {
                        Keyword savedKeyword = entities.Keyword.FirstOrDefault(e => e.Identifier == keyword.Identifier && keyword.ProductionID == movie.ID);
                        if (savedKeyword != null)
                        {
                            keyword.ID = savedKeyword.ID;
                            entry      = CommonDBHelper.MarkEntityAsUpdated(entities, keyword);
                            saved      = true;
                        }
                    }

                    keyword.ProductionID = production.ID;
                    if (!saved)
                    {
                        keyword.ID = CommonDBHelper.GetNewID <Keyword>(entities, e => e.ID);
                        entry      = entities.Keyword.Add(keyword);
                    }

                    entities.SaveChanges();
                    CommonDBHelper.DetachAllEntries(entities);
                }
            }
        }
예제 #10
0
        private static void HandleCompanies(JMoviesEntities entities, Production production, Production savedProduction)
        {
            Movie movie      = production as Movie;
            Movie savedMovie = savedProduction as Movie;

            if (movie != null && movie.ProductionCompanies != null)
            {
                foreach (Company company in movie.ProductionCompanies.ToArray())
                {
                    EntityEntry entry = null;
                    bool        saved = false;
                    if (savedMovie != null)
                    {
                        Company savedCompany = entities.Company.FirstOrDefault(e => e.Name == company.Name && company.ProductionID == savedMovie.ID);
                        if (savedCompany != null)
                        {
                            company.ID = savedCompany.ID;
                            entry      = CommonDBHelper.MarkEntityAsUpdated(entities, company);
                            saved      = true;
                        }
                    }

                    company.ProductionID = production.ID;
                    if (!saved)
                    {
                        company.ID = CommonDBHelper.GetNewID <Company>(entities, e => e.ID);
                        entry      = entities.Company.Add(company);
                    }
                    entities.SaveChanges();
                    CommonDBHelper.DetachAllEntries(entities);
                }
                movie.ProductionCompanies = null;
            }
        }
예제 #11
0
        public static void Persist(JMoviesEntities entities, Person person)
        {
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = IsolationLevel.Serializable;
            options.Timeout        = new TimeSpan(0, 10, 0);
            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                Person savedPerson = entities.Person.FirstOrDefault(e => e.IMDbID == person.IMDbID);

                bool saved = false;
                if (savedPerson != null)
                {
                    person.ID = savedPerson.ID;
                    saved     = true;
                }
                else
                {
                    person.ID = CommonDBHelper.GetNewID <Person>(entities, e => e.ID);
                }

                Person trimmedPerson = GetTrimmedPerson(person);
                if (!saved)
                {
                    EntityEntry entry = entities.Person.Add(trimmedPerson);
                }
                entities.SaveChanges();
                HandleImages(entities, person, savedPerson);
                CommonDBHelper.DetachAllEntries(entities);
                CommonDBHelper.MarkEntityAsUpdated(entities, trimmedPerson, new string[] { "PersonType", "PrimaryImage", "PrimaryImageID" }, true);
                entities.SaveChanges();
                scope.Complete();
            }
        }
예제 #12
0
        public static EntityEntry MarkEntityAsUpdated(JMoviesEntities entities, object objectToMark, string[] excludedProperties = null, bool ignoreNulls = false)
        {
            PropertyInfo[] properties = objectToMark.GetType().GetProperties();
            PropertyInfo   idProperty = properties.FirstOrDefault(e => e.GetCustomAttribute <KeyAttribute>() != null);
            EntityEntry    entry      = AttachEntity(entities, objectToMark, idProperty);

            foreach (PropertyInfo property in properties)
            {
                if (property.GetCustomAttribute <NotMappedAttribute>() == null && property.GetCustomAttribute <ForeignKeyAttribute>() == null &&
                    (excludedProperties == null || !excludedProperties.Contains(property.Name)))
                {
                    bool isModified = ignoreNulls || property.GetValue(objectToMark) != null;
                    if (property.Name != idProperty.Name)
                    {
                        GetPropertyAccessor(entry, property).IsModified = isModified;
                    }
                    else
                    {
                        GetPropertyAccessor(entry, property).IsModified = false;
                    }
                }
            }

            return(entry);
        }
예제 #13
0
        public void ExecuteAction(IServiceProvider serviceProvider, ref object request, ref BaseResponse response)
        {
            GetImageContentsRequest  requestMessage  = request as GetImageContentsRequest;
            GetImageContentsResponse responseMessage = response as GetImageContentsResponse;

            using (JMoviesEntities entities = new JMoviesEntities())
            {
                responseMessage.Image = entities.Image.FirstOrDefault(e => e.ID == requestMessage.ID);
            }
        }
예제 #14
0
        public static long GetNewID <T>(JMoviesEntities entities, Func <T, long> keySelector) where T : class
        {
            long lastIndex = entities.Set <T>().OrderByDescending(keySelector).Select(keySelector).FirstOrDefault();

            if (lastIndex == default(long))
            {
                lastIndex = 0;
            }
            return(lastIndex + 1);
        }
예제 #15
0
        private static void HandleTagLines(JMoviesEntities entities, Production production, Production savedProduction)
        {
            Movie movie      = production as Movie;
            Movie savedMovie = savedProduction as Movie;

            if (savedMovie != null)
            {
                savedMovie.TagLines = entities.TagLine.Where(e => e.ProductionID == savedMovie.ID).ToArray();
                entities.TagLine.RemoveRange(savedMovie.TagLines);
            }
        }
예제 #16
0
        private static EntityEntry AttachEntity(JMoviesEntities entities, object objectToMark, PropertyInfo idProperty)
        {
            EntityEntry entry = entities.ChangeTracker.Entries().FirstOrDefault(e => e.Metadata.Name == objectToMark.GetType().FullName&& idProperty.GetValue(e.Entity).Equals(idProperty.GetValue(objectToMark)));

            if (entry != null)
            {
                entry.State = EntityState.Detached;
            }
            entry = entities.Attach(objectToMark);
            return(entry);
        }
예제 #17
0
        public static void DetachAllEntries(JMoviesEntities entities)
        {
            var changedEntriesCopy = entities.ChangeTracker.Entries()
                                     .Where(e => e.State == EntityState.Added ||
                                            e.State == EntityState.Modified ||
                                            e.State == EntityState.Unchanged ||
                                            e.State == EntityState.Deleted).ToList();

            foreach (var entry in changedEntriesCopy)
            {
                entry.State = EntityState.Detached;
            }
        }
예제 #18
0
        private static void HandleCountries(JMoviesEntities entities, Production production, Production savedProduction)
        {
            Movie movie      = production as Movie;
            Movie savedMovie = savedProduction as Movie;

            if (movie != null && movie.Countries != null)
            {
                foreach (ProductionCountry productionCountry in movie.Countries.ToArray())
                {
                    EntityEntry entry        = null;
                    EntityEntry countryEntry = null;
                    Country     savedCountry = entities.Country.FirstOrDefault(e => e.Identifier == productionCountry.Country.Identifier);
                    if (savedCountry != null)
                    {
                        productionCountry.Country.ID = savedCountry.ID;
                        countryEntry = CommonDBHelper.MarkEntityAsUpdated(entities, productionCountry.Country);
                    }
                    else
                    {
                        productionCountry.Country.ID = CommonDBHelper.GetNewID <Country>(entities, e => e.ID);
                        countryEntry = entities.Country.Add(productionCountry.Country);
                    }
                    entities.SaveChanges();
                    productionCountry.ProductionID = productionCountry.Production.ID;
                    productionCountry.Production   = null;
                    productionCountry.CountryID    = productionCountry.Country.ID;
                    productionCountry.Country      = null;

                    ProductionCountry savedProductionCountry = null;
                    if (savedMovie != null)
                    {
                        savedProductionCountry = entities.ProductionCountry.FirstOrDefault(e => e.ProductionID == savedMovie.ID && e.CountryID == productionCountry.CountryID);
                    }

                    if (savedProductionCountry != null)
                    {
                        productionCountry.ID = savedProductionCountry.ID;
                        entry = CommonDBHelper.MarkEntityAsUpdated(entities, productionCountry);
                    }
                    else
                    {
                        CommonDBHelper.DetachAllEntries(entities);
                        productionCountry.ID = CommonDBHelper.GetNewID <ProductionCountry>(entities, e => e.ID);
                        entry = entities.ProductionCountry.Add(productionCountry);
                    }

                    entities.SaveChanges();
                    CommonDBHelper.DetachAllEntries(entities);
                }
            }
        }
예제 #19
0
        private static void HandleCharacters(JMoviesEntities entities, Production production, Production savedProduction)
        {
            Movie movie      = production as Movie;
            Movie savedMovie = savedProduction as Movie;

            if (movie != null && movie.Credits != null)
            {
                foreach (Credit credit in movie.Credits.ToArray())
                {
                    if (credit is ActingCredit)
                    {
                        ActingCredit actingCredit = credit as ActingCredit;
                        foreach (Character character in actingCredit.Characters.ToArray())
                        {
                            EntityEntry entry = null;
                            bool        saved = false;
                            if (savedMovie != null)
                            {
                                if (savedMovie.Credits == null)
                                {
                                    savedMovie.Credits = entities.Credit.Where(e => e.ProductionID == savedMovie.ID).ToArray();
                                }
                                Character savedCharacter = null;
                                if (savedMovie.Credits != null)
                                {
                                    long[] existingCreditIDs = savedMovie.Credits.Where(x => x.RoleType == CreditRoleType.Acting).Select(x => x.ID).ToArray();
                                    savedCharacter = entities.Character.FirstOrDefault(currentCharacter => existingCreditIDs.Contains(currentCharacter.CreditID) && currentCharacter.Name == character.Name && currentCharacter.IMDbID == character.IMDbID);
                                }

                                if (savedCharacter != null)
                                {
                                    character.ID = savedCharacter.ID;
                                    entry        = CommonDBHelper.MarkEntityAsUpdated(entities, character, new string[] { "CharacterType" });
                                    saved        = true;
                                }
                            }

                            character.CreditID = actingCredit.ID;
                            if (!saved)
                            {
                                character.ID = CommonDBHelper.GetNewID <Character>(entities, e => e.ID);
                                entry        = entities.Character.Add(character);
                            }
                            entities.SaveChanges();
                            CommonDBHelper.DetachAllEntries(entities);
                        }
                    }
                }
            }
        }
예제 #20
0
        private static void HandleDataSources(JMoviesEntities entities, Production production, Production savedProduction)
        {
            EntityEntry entry = null;

            if (production.Rating != null)
            {
                if (entities.DataSource.FirstOrDefault(e => e.Identifier == production.Rating.DataSource.Identifier) == null)
                {
                    entry = entities.DataSource.Add(production.Rating.DataSource);
                }
            }
            entities.SaveChanges();
            CommonDBHelper.DetachAllEntries(entities);
        }
예제 #21
0
        /// <summary>
        /// Gets Production Information iresspective of type
        /// </summary>
        /// <param name="id">ID of the production</param>
        /// <param name="settings">Object containing Data Fetch settings</param>
        /// <returns>Production instance containing retreived information</returns>
        public Production GetProduction(long id, ProductionDataFetchSettings settings)
        {
            using (JMoviesEntities entities = new JMoviesEntities())
            {
                Production production = entities.Production.FirstOrDefault(e => e.ID == id);
                if (settings.MediaImagesFetchCount != 0 && production != null)
                {
                    //fetch poster
                    production.Poster = entities.Image.FirstOrDefault(e => e.ID == production.PosterID);
                    //fetch images
                    int imageCount = settings.MediaImagesFetchCount;
                    if (imageCount <= 0)
                    {
                        //default value
                        imageCount = 5;
                    }
                    production.MediaImages = entities.Image.Where(e => e.ProductionID == production.ID).Take(imageCount).ToArray();
                }

                if (production is Movie)
                {
                    Movie movie     = production as Movie;
                    int   castCount = settings.CastFetchCount;
                    if (castCount <= 0)
                    {
                        //default value
                        castCount = 5;
                    }

                    movie.Credits = entities.Credit.Include(e => (e as ActingCredit).Characters)
                                    .Where(e => e.ProductionID == production.ID).Take(castCount).ToArray();

                    if (movie.Credits != null)
                    {
                        foreach (Credit credit in movie.Credits)
                        {
                            credit.Person = entities.Person.FirstOrDefault(e => e.ID == credit.PersonID);
                            credit.Person.PrimaryImage = entities.Image.FirstOrDefault(e => e.ID == credit.Person.PrimaryImageID);
                        }
                    }

                    movie.Genres = entities.Genre.Where(e => e.ProductionID == production.ID).ToArray();
                }

                CleanupImageContents(settings, production);
                return(production);
            }
        }
예제 #22
0
 public static void EmptyDB(JMoviesEntities entities)
 {
     entities.AKA.RemoveRange(entities.AKA);
     entities.SaveChanges();
     entities.Company.RemoveRange(entities.Company);
     entities.SaveChanges();
     entities.Genre.RemoveRange(entities.Genre);
     entities.SaveChanges();
     entities.Keyword.RemoveRange(entities.Keyword);
     entities.SaveChanges();
     entities.Rating.RemoveRange(entities.Rating);
     entities.SaveChanges();
     entities.ReleaseDate.RemoveRange(entities.ReleaseDate);
     entities.SaveChanges();
     entities.ProductionCredit.RemoveRange(entities.ProductionCredit);
     entities.SaveChanges();
     entities.ProductionCountry.RemoveRange(entities.ProductionCountry);
     entities.SaveChanges();
     entities.ProductionLanguage.RemoveRange(entities.ProductionLanguage);
     entities.SaveChanges();
     entities.Country.RemoveRange(entities.Country);
     entities.SaveChanges();
     entities.Language.RemoveRange(entities.Language);
     entities.SaveChanges();
     entities.Character.RemoveRange(entities.Character);
     entities.SaveChanges();
     entities.Credit.RemoveRange(entities.Credit);
     entities.SaveChanges();
     entities.TagLine.RemoveRange(entities.TagLine);
     entities.SaveChanges();
     foreach (Production production in entities.Production)
     {
         production.PosterID = null;
     }
     foreach (Person person in entities.Person)
     {
         person.PrimaryImageID = null;
     }
     entities.SaveChanges();
     entities.Image.RemoveRange(entities.Image);
     entities.SaveChanges();
     entities.Production.RemoveRange(entities.Production);
     entities.SaveChanges();
     entities.Person.RemoveRange(entities.Person);
     entities.SaveChanges();
     entities.DataSource.RemoveRange(entities.DataSource);
     entities.SaveChanges();
 }
예제 #23
0
        public bool IsValid(object[] values)
        {
            if (values != null && values.Length == 1)
            {
                string email = values[0] as string;

                using (JMoviesEntities entities = new JMoviesEntities())
                {
                    return(!entities.User.Any(e => e.Email == email));
                }
            }
            else
            {
                return(false);
            }
        }
예제 #24
0
        public LoginResponse Authenticate(LoginRequest request)
        {
            LoginResponse response = new LoginResponse();

            using (JMoviesEntities entities = new JMoviesEntities())
            {
                response.Result = Entities.UserManagement.LoginResultEnum.Undefined;
                if (request.Username != null && request.Password != null)
                {
                    response.Result = LoginResultEnum.WrongUsernameOrPassword;
                    User user = entities.User.Include(e => e.Password).SingleOrDefault(e => e.UserName == request.Username.ToPlainString());
                    if (user != null)
                    {
                        if (user.Password != null)
                        {
                            if (HashHelper.Matches(request.Password, user.Password.Hash, user.Password.Salt, user.Password.HashType))
                            {
                                if (user.Password.RetryCount >= ConfigurationConstants.MaxPasswordRetryCount)
                                {
                                    //User blocked
                                    response.Result = LoginResultEnum.UserBlocked;
                                }
                                else
                                {
                                    user.Password.ModifyDate = DateTime.Now;
                                    response.Result          = LoginResultEnum.Successful;
                                    response.User            = user;
                                }
                            }
                            else
                            {
                                //Wrong Password
                                user.Password.ModifyDate = DateTime.Now;
                                user.Password.RetryCount++;
                                if (user.Password.RetryCount >= ConfigurationConstants.MaxPasswordRetryCount)
                                {
                                    user.Password.RetryCount = ConfigurationConstants.MaxPasswordRetryCount;
                                }
                            }
                            entities.SaveChanges();
                        }
                    }
                }
            }

            return(response);
        }
예제 #25
0
        private static void HandleImages(JMoviesEntities entities, Production production, Production savedProduction)
        {
            Image oldPoster = savedProduction?.Poster;

            if (savedProduction != null && oldPoster == null)
            {
                oldPoster = entities.Image.FirstOrDefault(e => e.ID == savedProduction.PosterID);
            }

            Production trackedProduction = entities.Production.FirstOrDefault(e => e.ID == production.ID);

            if (savedProduction != null && oldPoster != null)
            {
                trackedProduction.PosterID = null;
                trackedProduction.Poster   = null;
                entities.Image.Remove(oldPoster);
                entities.SaveChanges();
            }

            if (production.Poster != null)
            {
                production.Poster.ProductionID = production.ID;
                production.Poster.ID           = CommonDBHelper.GetNewID <Image>(entities, e => e.ID);
                entities.Image.Add(production.Poster);
                trackedProduction.PosterID = production.Poster.ID;
            }
            entities.SaveChanges();
            CommonDBHelper.DetachAllEntries(entities);

            if (production.MediaImages != null)
            {
                foreach (Image image in production.MediaImages)
                {
                    Image savedImage = entities.Image.FirstOrDefault(e => e.URL == image.URL);
                    if (savedImage == null)
                    {
                        image.ID           = CommonDBHelper.GetNewID <Image>(entities, e => e.ID);
                        image.ProductionID = production.ID;
                        entities.Add(image);
                    }
                    entities.SaveChanges();
                    CommonDBHelper.DetachAllEntries(entities);
                }
            }
        }
예제 #26
0
        private static void HandleImages(JMoviesEntities entities, Person person, Person savedPerson)
        {
            Image oldPrimaryImage = null;

            if (savedPerson != null)
            {
                oldPrimaryImage = entities.Image.FirstOrDefault(e => e.ID == savedPerson.PrimaryImageID);
            }

            Person trackedPerson = entities.Person.FirstOrDefault(e => e.ID == person.ID);

            if (savedPerson != null && oldPrimaryImage != null)
            {
                trackedPerson.PrimaryImage   = null;
                trackedPerson.PrimaryImageID = null;
                entities.Image.Remove(oldPrimaryImage);
                entities.SaveChanges();
            }

            if (person.PrimaryImage != null)
            {
                person.PrimaryImage.PersonID = person.ID;
                person.PrimaryImage.ID       = CommonDBHelper.GetNewID <Image>(entities, e => e.ID);
                entities.Image.Add(person.PrimaryImage);
                trackedPerson.PrimaryImageID = person.PrimaryImage.ID;
            }
            entities.SaveChanges();
            CommonDBHelper.DetachAllEntries(entities);

            if (person.Photos != null)
            {
                foreach (Image image in person.Photos)
                {
                    Image savedImage = entities.Image.FirstOrDefault(e => e.URL == image.URL);
                    if (savedImage == null)
                    {
                        image.ID       = CommonDBHelper.GetNewID <Image>(entities, e => e.ID);
                        image.PersonID = person.ID;
                        entities.Add(image);
                    }
                    entities.SaveChanges();
                    CommonDBHelper.DetachAllEntries(entities);
                }
            }
        }
예제 #27
0
        public static void Persist(JMoviesEntities entities, Production production)
        {
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = IsolationLevel.Serializable;
            options.Timeout        = new TimeSpan(0, 10, 0);
            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                Production savedProduction = entities.Production.FirstOrDefault(e => e.IMDbID == production.IMDbID);

                bool saved = false;
                if (savedProduction != null)
                {
                    production.ID = savedProduction.ID;
                    saved         = true;
                }
                else
                {
                    production.ID = CommonDBHelper.GetNewID <Production>(entities, e => e.ID);
                }

                Production trimmedProduction = GetTrimmedProduction(production);
                if (!saved)
                {
                    entities.Production.Add(trimmedProduction);
                }
                entities.SaveChanges();
                HandleAKAs(entities, production, savedProduction);
                HandleCompanies(entities, production, savedProduction);
                HandleDataSources(entities, production, savedProduction);
                HandleGenres(entities, production, savedProduction);
                HandleKeywords(entities, production, savedProduction);
                HandleLanguages(entities, production);
                HandleCountries(entities, production, savedProduction);
                HandlePersons(entities, production);
                HandleCharacters(entities, production, savedProduction);
                HandleRatings(entities, production, savedProduction);
                HandleReleaseDates(entities, production, savedProduction);
                HandleImages(entities, production, savedProduction);
                HandleTagLines(entities, production, savedProduction);
                CommonDBHelper.MarkEntityAsUpdated(entities, trimmedProduction, new string[] { "ProductionType", "Poster", "PosterID" }, true);
                entities.SaveChanges();
                scope.Complete();
            }
        }
예제 #28
0
파일: Program.cs 프로젝트: JnRMnT/jmovies
        static void Main(string[] args)
        {
            var builder = new ConfigurationBuilder()
                          .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                          .AddJsonFile($"appsettings.{EnvironmentUtilities.GetEnvironmentName()}.json", optional: true, reloadOnChange: true)
                          .AddEnvironmentVariables()
                          .AddCommandLine(args);

            var config = builder.Build();
            BaseJobConfiguration configuration       = config.Get <BaseJobConfiguration>();
            CustomConfiguration  customConfiguration = config.Get <CustomConfiguration>();

            InitializationHelper.Initialize(configuration);
            var services = new ServiceCollection();

            services.AddOptions();
            services.Configure <CustomConfiguration>(config.GetSection(ConfigurationConstants.CustomConfigurationSectionName));
            services.AddSingleton <IElasticSearchConnectionProvider, ElasticSearchConnector>();
            var serviceProvider = services.BuildServiceProvider();

            IElasticSearchConnectionProvider elasticSearchProvider = serviceProvider.GetRequiredService <IElasticSearchConnectionProvider>();
            ElasticClient elasticClient = elasticSearchProvider.GetElasticClient(ElasticSearchIndexNameConstants.Productions);

            using (JMoviesEntities entities = new JMoviesEntities())
            {
                foreach (var production in entities.Production)
                {
                    long productionID = production.ID;
                    if (production is JMovies.IMDb.Entities.Movies.Movie)
                    {
                        using (JMoviesEntities innerEntities = new JMoviesEntities())
                        {
                            JMovies.IMDb.Entities.Movies.Movie movie = production as JMovies.IMDb.Entities.Movies.Movie;
                            movie.AKAs     = innerEntities.AKA.Where(e => e.ProductionID == productionID).ToArray();
                            movie.Genres   = innerEntities.Genre.Where(e => e.ProductionID == productionID).ToArray();
                            movie.Keywords = innerEntities.Keyword.Where(e => e.ProductionID == productionID).ToArray();
                            movie.TagLines = innerEntities.TagLine.Where(e => e.ProductionID == productionID).ToArray();
                        }
                    }
                    elasticClient.IndexDocument(MapProduction(production as IMDb.Entities.Movies.Movie));
                }
            }
        }
예제 #29
0
        private static void HandleReleaseDates(JMoviesEntities entities, Production production, Production savedProduction)
        {
            Movie savedMovie = savedProduction as Movie;

            if (savedMovie != null)
            {
                ReleaseDate[] existingReleaseDates = entities.ReleaseDate.Where(e => e.ProductionID == savedMovie.ID).ToArray();
                entities.ReleaseDate.RemoveRange(existingReleaseDates);
            }

            Movie movie = production as Movie;

            if (movie != null)
            {
                foreach (ReleaseDate releaseDate in movie.ReleaseDates.ToArray())
                {
                    EntityEntry entry = null;
                    if (releaseDate.Country != null)
                    {
                        Country existingCountry = entities.Country.FirstOrDefault(e => e.Identifier == releaseDate.Country.Identifier);
                        if (existingCountry != null)
                        {
                            releaseDate.Country.ID = existingCountry.ID;
                            entry = CommonDBHelper.MarkEntityAsUpdated(entities, releaseDate.Country);
                        }
                        else
                        {
                            releaseDate.Country.ID = CommonDBHelper.GetNewID <Country>(entities, e => e.ID);
                            entry = entities.Country.Add(releaseDate.Country);
                        }
                    }

                    releaseDate.CountryID    = releaseDate.Country.ID;
                    releaseDate.Country      = null;
                    releaseDate.ProductionID = production.ID;
                    releaseDate.ID           = CommonDBHelper.GetNewID <ReleaseDate>(entities, e => e.ID);
                    entities.ReleaseDate.Add(releaseDate);

                    entities.SaveChanges();
                    CommonDBHelper.DetachAllEntries(entities);
                }
            }
        }
예제 #30
0
        private static void HandleLanguages(JMoviesEntities entities, Production production)
        {
            Movie movie = production as Movie;

            if (movie != null && movie.Languages != null)
            {
                foreach (ProductionLanguage productionLanguage in movie.Languages.ToArray())
                {
                    EntityEntry entry            = null;
                    EntityEntry languageEntry    = null;
                    Language    existingLanguage = entities.Language.FirstOrDefault(e => e.Identifier == productionLanguage.Language.Identifier);
                    if (existingLanguage != null)
                    {
                        productionLanguage.Language.ID = existingLanguage.ID;
                        languageEntry = CommonDBHelper.MarkEntityAsUpdated(entities, productionLanguage.Language);
                    }
                    else
                    {
                        productionLanguage.Language.ID = CommonDBHelper.GetNewID <Language>(entities, e => e.ID);
                        languageEntry = entities.Language.Add(productionLanguage.Language);
                    }

                    ProductionLanguage existingProductionLanguage = entities.ProductionLanguage.FirstOrDefault(e => e.Language.Identifier == productionLanguage.Language.Identifier && e.Production.IMDbID == productionLanguage.Production.IMDbID);

                    productionLanguage.ProductionID = productionLanguage.Production.ID;
                    productionLanguage.Production   = null;
                    productionLanguage.LanguageID   = productionLanguage.Language.ID;
                    productionLanguage.Language     = null;
                    if (existingProductionLanguage != null)
                    {
                        productionLanguage.ID = existingProductionLanguage.ID;
                        entry = CommonDBHelper.MarkEntityAsUpdated(entities, productionLanguage);
                    }
                    else
                    {
                        productionLanguage.ID = CommonDBHelper.GetNewID <ProductionLanguage>(entities, e => e.ID);
                        entry = entities.ProductionLanguage.Add(productionLanguage);
                    }
                    entities.SaveChanges();
                    CommonDBHelper.DetachAllEntries(entities);
                }
            }
        }