public OutfitUpdater GetRandomOutfitUpdaterFor(PreCombination preCombination)
        {
            string query = string.Format("SELECT outfitupdaterid FROM outfitupdaters WHERE status > 0 and outfitupdaterid >= (SELECT FLOOR( MAX(outfitupdaterid) * RAND()) FROM outfitupdaterbyprecombinations where precombinationid = {0} ) ORDER BY outfitupdaterid LIMIT 1;", preCombination.Id);
            IQuery q     = Session.CreateSQLQuery(query);

            return(new OutfitUpdaterRepository().Get(q.UniqueResult <int>()));
        }
Example #2
0
        public virtual void AddPrecombination(PreCombination pc)
        {
            ClosetOutfit co = new ClosetOutfit {
                PreCombination = pc, Closet = this
            };

            outfits.Add(co);
        }
 public ClosetOutfitView(int closetOutfit, float averageFriendRating, float averageUserRating, float averageWearRating, float editorRating, DateTime wornDate, string location, float myRating, int preCombination, int eventTypes)
 {
     this.Id                  = closetOutfit;
     this.closetOutfit        = new ClosetOutfit(closetOutfit);
     this.averageFriendRating = averageFriendRating;
     this.averageWearRating   = averageWearRating;
     this.averageUserRating   = averageUserRating;
     this.editorRating        = editorRating;
     this.wornDate            = wornDate;
     this.location            = location;
     this.myRating            = myRating;
     this.preCombination      = new PreCombination(preCombination);
     this.eventTypes          = eventTypes;
 }
        public IList <OutfitUpdater> GetFor(PreCombination preCombination, int pageNumber, int pageSize, out int totalCount)
        {
            ICriteria crit = Session.CreateCriteria(typeof(OutfitUpdater)).CreateCriteria("PreCombinations");

            crit.Add(Expression.Eq("Id", preCombination.Id));
            totalCount = crit.SetProjection(Projections.ProjectionList().Add(Projections.Count("Id"))).UniqueResult <int>();

            crit = Session.CreateCriteria(typeof(OutfitUpdater)).CreateCriteria("PreCombinations");
            crit.Add(Expression.Eq("Id", preCombination.Id));
            if (pageNumber != 0 && pageSize != 0)
            {
                crit.SetMaxResults(pageSize);
                crit.SetFirstResult((pageNumber - 1) * pageSize);
            }
            return(crit.List <OutfitUpdater>());
        }
        public OutfitUpdater GetRandomOutfitUpdaterFor(PreCombination preCombination)
        {
            string query = "SELECT oubpc.outfitupdaterid, ou.description, ou.name, ou.price, ou.buyurl, ou.imageurl, p.Code, p.Name, ou.silouhetteid FROM outfitupdaterbyprecombinations oubpc ";

            query += "inner join outfitupdaters ou ON oubpc.OutfitUpdaterId = ou.OutfitUpdaterId ";
            query += "inner join outfitupdatersbytrend oubt ON oubt.OutfitUpdaterId = ou.OutfitUpdaterId ";
            query += "inner join partners p on ou.PartnerId = p.PartnerId ";
            query += "inner join trends t ON oubt.TrendId = t.TrendId ";
            query += string.Format("where t.IsEnabled = 1 and t.Season = {1} and ou.Status >= {2} and oubpc.precombinationid = {0} ORDER BY RAND() LIMIT 1;",
                                   preCombination.Id,
                                   (int)SeasonHelper.CurrentSeason,
                                   (int)OutfitUpdaterStatus.Processed);

            IQuery q = Session.CreateSQLQuery(query);

            q.SetResultTransformer(new NHibernate.Transform.AliasToBeanConstructorResultTransformer(typeof(OutfitUpdater).GetConstructors()[3]));
            return(q.UniqueResult <OutfitUpdater>());
        }
Example #6
0
        /// <summary>
        /// Creates a new closet outfit in the system related with the current user.
        /// </summary>
        /// <param name="userId">User</param>
        /// <param name="garments">List of Garments</param>
        /// <param name="season">Season</param>
        /// <param name="visibility">Visibility</param>
        /// <exception cref="NotValidCombinationException">When a combination is not valid.</exception>
        public void CreateUserOutfit(int userId, IList <Garment> garments, Season season, ClosetOutfitVisibility visibility)
        {
            if (!OutfitValidationService.IsValidCombination(garments))
            {
                throw new NotValidCombinationException();
            }

            ClosetOutfit uo = new ClosetOutfit();

            // HACK: We need the garments saved with 0 in the non filled fields to make sure we have no duplicates.
            Garment hack = garmentRepository.Get(0);

            foreach (Garment g in garments)
            {
                uo.AddComponent(g, hack);
            }

            uo.Rating.CalculateEditorRating(uo.Components);

            BasicUser     bu = basicUserRepository.Get(userId);
            FashionFlavor ff = bu.GetPreferredFlavor();

            uo.FashionFlavor = ff;
            uo.Closet        = (bu as RegisteredUser).Closet;

            uo.SetSeason(season);
            uo.SetEventTypes(bu as RegisteredUser);
            uo.SetVisibility(visibility);

            //Agregar PreCombination
            PreCombination pc = preCombinationRepository.GetByGarments(uo.RetrieveCombinableComponents().ToList <Garment>(), ff);

            if (pc == null)
            {
                pc = new PreCombination();
                pc.FashionFlavor = ff;

                for (int j = 0; j < garments.Count; j++)
                {
                    Garment g = garments[j];
                    if (!OutfitValidationService.IsAccessory(g))
                    {
                        pc.AddPreGarment(garments[j]);
                    }
                }
            }

            uo.PreCombination = pc;
            uo.User           = bu as RegisteredUser;

            if (!uo.IsValid())
            {
                throw new NotValidCombinationException();
            }

            closetOutfitRepository.DbContext.BeginTransaction();

            // REVIEW: This may lead to orphaned records, given we cannot change the autonumeric for now because of the combination process.
            // TODO: Is better to check first if the Closet Outfit combination already exists and then proceed.
            preCombinationRepository.SaveOrUpdate(pc);

            try
            {
                closetOutfitRepository.SaveOrUpdate(uo);
                closetOutfitRepository.DbContext.BeginTransaction();
            }
            catch
            {
                closetOutfitRepository.DbContext.RollbackTransaction();
                throw new CombinationAlreadyExistsException();
            }
        }
 public OutfitUpdaterByPreCombination(OutfitUpdater outfitUpdater, PreCombination preCombination)
 {
     this.outfitUpdater  = outfitUpdater;
     this.preCombination = preCombination;
 }
Example #8
0
        public void CreatePreCombinations(IList <FashionFlavor> flavors, IList <PreGarment> garments)
        {
            //outfitEngineProcessor.EventTypes.Add(et);
            outfitEngineProcessor.FashionFlavors = flavors;
            outfitEngineProcessor.Garments       = garments;
            outfitEngineProcessor.CreateCombinations();

            int           i  = 0;
            StringBuilder sb = new StringBuilder();

            foreach (PreOutfit po in outfitEngineProcessor.Outfits)
            {
                int            used = 2;
                PreCombination pc   = po.Combination;

                // Add Garments
                sb.Append(pc.FashionFlavor.Id);
                sb.Append(",");
                sb.Append(pc.GarmentA.Id);
                sb.Append(",");
                sb.Append(pc.GarmentB.Id);

                if (pc.GarmentC != null)
                {
                    sb.Append(",");
                    sb.Append(pc.GarmentC.Id);
                    used++;
                }

                if (pc.GarmentD != null)
                {
                    sb.Append(",");
                    sb.Append(pc.GarmentD.Id);
                    used++;
                }

                if (pc.GarmentE != null)
                {
                    sb.Append(",");
                    sb.Append(pc.GarmentE.Id);
                    used++;
                }

                if (po.Accesory1 != null)
                {
                    sb.Append(",");
                    sb.Append(po.Accesory1.Id);
                    used++;
                }

                if (po.Accesory2 != null)
                {
                    sb.Append(",");
                    sb.Append(po.Accesory2.Id);
                    used++;
                }

                if (po.Accesory3 != null)
                {
                    sb.Append(",");
                    sb.Append(po.Accesory3.Id);
                    used++;
                }

                if (po.Accesory4 != null)
                {
                    sb.Append(",");
                    sb.Append(po.Accesory4.Id);
                    used++;
                }

                if (po.Accesory5 != null)
                {
                    sb.Append(",");
                    sb.Append(po.Accesory5.Id);
                    used++;
                }

                for (int j = used; j < 10; j++)
                {
                    sb.Append(",");
                    sb.Append(@"\N");
                }

                sb.AppendLine("");

                i++;
                if (i == 50000)
                {
                    System.IO.File.AppendAllText(@"c:\leo.txt", sb.ToString());
                    sb = new StringBuilder();
                    i  = 0;
                }
            }
        }