示例#1
0
        public void UpdateTwoYearAnniversaryWinCouponSuccess()
        {
            // 아이디 준비
            var entry = new TwoYearAnniversaryEntry
            {
                Id          = 1,
                CreateDate  = new DateTime(2018, 3, 29),
                IpAddress   = "127.0.0.1",
                SamsoniteId = "pentacleId123",
                PrizeType   = TwoYearAnniversarInstantPrizeType.StarBucks,
                Channel     = Domain.Entities.Abstract.ChannelType.PC
            };

            entryRepo.Setup(x => x.Add(It.IsAny <TwoYearAnniversaryEntry>())).Returns(entry);
            entryRepo.Setup(x => x.SingleOrDefault(It.IsAny <Expression <Func <TwoYearAnniversaryEntry, bool> > >())).Returns(entry);


            var coupon = new TwoYearAnniversaryWinCoupon
            {
                CouponType = 0,
                CouponCode = "1",
                //TwoYearAnniversaryEntryId = 1,
                //WinnerDate = new DateTime(2018, 3, 29),
            };

            couponRepo.Setup(x => x.Add(It.IsAny <TwoYearAnniversaryWinCoupon>())).Returns(coupon);
            couponRepo.Setup(x => x.FirstOrDefault(It.IsAny <Expression <Func <TwoYearAnniversaryWinCoupon, bool> > >())).Returns(coupon);


            var resultCoupon = new TwoYearAnniversaryWinCoupon
            {
                CouponType = 0,
                CouponCode = "1",
                TwoYearAnniversaryEntryId = 1,
                WinnerDate = new DateTime(2018, 3, 29),
            };

            couponRepo.Setup(x => x.Update(It.IsAny <TwoYearAnniversaryWinCoupon>())).Returns(resultCoupon);


            long entryId = 1;
            var  result  = service.UpdateTwoYearAnniversaryWinCoupon(entryId);

            Assert.NotNull(resultCoupon);

            //null check
            //var user = new TwoYearAnniversaryEntry { };
            //user = null;
            //entryRepo.Setup(x => x.SingleOrDefault(It.IsAny<Expression<Func<TwoYearAnniversaryEntry, bool>>>())).Returns(user);

            //long entryId = 1;

            //var failedResult = Assert.Throws<TwoYearAnniversaryServiceException>(() => {
            //    var result = service.UpdateTwoYearAnniversaryWinCoupon(entryId);
            //});

            //Assert.Matches("400", failedResult.Code);
            //Assert.Matches("당첨 데이터가 존재하지 않습니다.", failedResult.Message);
        }
示例#2
0
        public void CreateTwoYearAnniversaryEntrySuccess()
        {
            var prizes = new List <TwoYearAnniversaryInstantPrizeSetting>()
            {
                new TwoYearAnniversaryInstantPrizeSetting {
                    Date = new DateTime(2018, 3, 29), PrizeType = TwoYearAnniversarInstantPrizeType.StarBucks, Rate = 0.0f, TotalCount = 1, WinnerCount = 0, StartTime = 12
                },
                new TwoYearAnniversaryInstantPrizeSetting {
                    Date = new DateTime(2018, 3, 29), PrizeType = TwoYearAnniversarInstantPrizeType.AtKidsBagPack, Rate = 1.0f, TotalCount = 1, WinnerCount = 0, StartTime = 12
                },
                new TwoYearAnniversaryInstantPrizeSetting {
                    Date = new DateTime(2018, 3, 29), PrizeType = TwoYearAnniversarInstantPrizeType.OriginalBag, Rate = 1.0f, TotalCount = 1, WinnerCount = 0, StartTime = 12
                },
                new TwoYearAnniversaryInstantPrizeSetting {
                    Date = new DateTime(2018, 3, 29), PrizeType = TwoYearAnniversarInstantPrizeType.Coupon_20, Rate = 1.0f, TotalCount = 1, WinnerCount = 0, StartTime = 12
                },
                new TwoYearAnniversaryInstantPrizeSetting {
                    Date = new DateTime(2018, 3, 29), PrizeType = TwoYearAnniversarInstantPrizeType.LineFriendsCarrier, Rate = 1.0f, TotalCount = 1, WinnerCount = 0, StartTime = 12
                }
            };
            var user = new TwoYearAnniversaryEntry {
            };

            user = null;
            var entry = new TwoYearAnniversaryEntry
            {
                Id          = 1,
                CreateDate  = new DateTime(2018, 3, 29),
                IpAddress   = "127.0.0.1",
                SamsoniteId = "pentacleId123",
                PrizeType   = TwoYearAnniversarInstantPrizeType.StarBucks,
                Channel     = Domain.Entities.Abstract.ChannelType.PC
            };

            entryRepo.Setup(x => x.SingleOrDefault(It.IsAny <Expression <Func <TwoYearAnniversaryEntry, bool> > >())).Returns(user);
            entryRepo.Setup(x => x.Any(It.IsAny <Expression <Func <TwoYearAnniversaryEntry, bool> > >())).Returns(false);
            settingRepo.Setup(x => x.Filter(It.IsAny <Expression <Func <TwoYearAnniversaryInstantPrizeSetting, bool> > >())).Returns(prizes.AsQueryable());
            settingRepo.Setup(x => x.SingleOrDefault(It.IsAny <Expression <Func <TwoYearAnniversaryInstantPrizeSetting, bool> > >())).Returns(prizes[1]);
            var list = new List <TwoYearAnniversaryEntry>();

            entryRepo.Setup(x => x.Filter(It.IsAny <Expression <Func <TwoYearAnniversaryEntry, bool> > >())).Returns(list.AsQueryable());
            entryRepo.Setup(x => x.Add(It.IsAny <TwoYearAnniversaryEntry>())).Returns(entry);

            //action
            var result = service.CreateTwoYearAnniversaryEntry(entry);

            //assert
            Assert.NotNull(result);
            Assert.Equal(result.PrizeType, TwoYearAnniversarInstantPrizeType.AtKidsBagPack);
            entryRepo.Verify(x => x.SingleOrDefault(It.IsAny <Expression <Func <TwoYearAnniversaryEntry, bool> > >()), Times.Once);
            entryRepo.Verify(x => x.Any(It.IsAny <Expression <Func <TwoYearAnniversaryEntry, bool> > >()), Times.Once);
            settingRepo.Verify(x => x.Filter(It.IsAny <Expression <Func <TwoYearAnniversaryInstantPrizeSetting, bool> > >()), Times.Once);
            settingRepo.Verify(x => x.SingleOrDefault(It.IsAny <Expression <Func <TwoYearAnniversaryInstantPrizeSetting, bool> > >()), Times.Once);
            entryRepo.Verify(x => x.Filter(It.IsAny <Expression <Func <TwoYearAnniversaryEntry, bool> > >()), Times.Once);
            settingRepo.Verify(x => x.Update(It.IsAny <TwoYearAnniversaryInstantPrizeSetting>()), Times.Once);
            entryRepo.Verify(x => x.Add(It.IsAny <TwoYearAnniversaryEntry>()), Times.Once);
            entryRepo.Verify(x => x.Save(), Times.Once);
        }
示例#3
0
        /// <summary>
        /// 즉석당첨 정보저장
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public TwoYearAnniversaryEntry CreateTwoYearAnniversaryEntry(TwoYearAnniversaryEntry entity)
        {
            var today     = time.Now.Date;
            var tommorrow = today.AddDays(1);

            var isEntryCount = twoYearRepository.SingleOrDefault(x => x.CreateDate >= today && x.CreateDate <= tommorrow && x.SamsoniteId == entity.SamsoniteId);

            if (isEntryCount != null)
            { // 1일 응모횟수 1회 제한
                throw new TwoYearAnniversaryServiceException("400", "하루에 한 번 응모가 가능합니다. 내일 다시 참여해주세요!", null);
            }

            using (var tx = new TransactionScope())
            {
                var now = time.Now;

                // 기당첨 check ( 연락처 )
                var isWin = twoYearRepository.Any(x => x.PrizeType != TwoYearAnniversarInstantPrizeType.Loser && x.SamsoniteId == entity.SamsoniteId);

                // 당첨되었을대 세팅
                entity.PrizeType = TwoYearAnniversarInstantPrizeType.Loser;
                // 당첨되지 않았다면.
                if (!isWin)
                {
                    //조건체크를 한번하고.
                    var prizes = prizeRepository.Filter(x => x.Date == now.Date && x.StartTime <= now.Hour && x.TotalCount > x.WinnerCount && x.Rate > 0.0f);
                    entity.PrizeType = prizeSelector.SelectPrize(prizes.ToList(), TwoYearAnniversarInstantPrizeType.Loser, now);

                    if (entity.PrizeType != TwoYearAnniversarInstantPrizeType.Loser)
                    {
                        var prize = prizeRepository.SingleOrDefault(x => x.Date == now.Date && x.PrizeType == entity.PrizeType);
                        if (prize == null)
                        {
                            //상품세팅이 아무것도 안되어 있다면
                            entity.PrizeType = TwoYearAnniversarInstantPrizeType.Loser;
                        }
                        else
                        {
                            //전체 entry 에서 데이터를 카운팅 후 1건 당첨된것을 상품세팅 테이블에 카운팅
                            prize.WinnerCount = twoYearRepository.Filter(x => x.CreateDate >= now.Date && x.PrizeType == entity.PrizeType).Count() + 1;
                            prizeRepository.Update(prize);
                        }
                    }
                }

                var user = twoYearRepository.Add(entity);
                twoYearRepository.Save();

                tx.Complete();
                return(user);
            }
        }
示例#4
0
        public ActionResult CreateTwoYearAnniversaryEntry(TwoYearCustNoModel custNoModel)
        {
            try
            {
                if (common.Now >= new DateTime(2018, 4, 19))
                {
                    throw new TwoYearAnniversaryServiceException("400", "이벤트가 종료되었습니다.", null);
                }

                if (string.IsNullOrEmpty(custNoModel.TwoYearCustNo))
                {
                    throw new TwoYearAnniversaryServiceException("400", "쌤소나이트에 로그인 후 시도해주세요.", null);
                }

                var encrytionId = custNoModel.TwoYearCustNo;
                var samsoniteId = decrypt(encrytionId);
                //string samsoniteId= Session["TwoAnniversarySamsoniteId"] as string;
                var entry = new TwoYearAnniversaryEntry()
                {
                    SamsoniteId           = encrytionId,
                    SamsoniteEncryptionId = samsoniteId,
                    CreateDate            = common.Now,
                    Channel   = common.IsMobileDevice ? Domain.Entities.Abstract.ChannelType.Mobile : Domain.Entities.Abstract.ChannelType.PC,
                    IpAddress = common.IpAddress
                };

                var user = service.CreateTwoYearAnniversaryEntry(entry);

                var coupon = service.UpdateTwoYearAnniversaryWinCoupon(user.Id);

                if (coupon != null)
                {
                    var couponUrl = ConfigurationManager.AppSettings["samsonite.coupon.url"] as string;

                    string         url            = string.Format(couponUrl + "?custNo={0}&coupon={1}", user.SamsoniteId, coupon.CouponCode);
                    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
                    httpWebRequest.Method = "GET";
                    //httpWebRequest.ContentType = "application/x-www-form-urlencoded";
                    // 실서버 반영시 주석 해제
                    using (HttpWebResponse httpResponse = (HttpWebResponse)httpWebRequest.GetResponse()) { }
                }


                var model = new TwoYearAnniversaryViewModel()
                {
                    PrizeType    = user.PrizeType,
                    RouletteType = 4,
                    PrizeName    = "wlaossdefr",
                };

                /*
                 *  - 서버 룰렛 순서 = ["1만원쿠폰","스타벅스 기프티콘",  "키즈백팩", "쌤소나이트 정품가방", "20만원쿠폰", "라인프렌즈 콜라보 캐리어"]
                 *  - 뷰단 룰렛 순서 = ["라인프렌즈 콜라보 캐리어", "20만원쿠폰", "키즈백팩", "스타벅스 기프티콘", "1만원쿠폰", "쌤소나이트 정품가방"]
                 */
                switch (user.PrizeType)
                {
                case TwoYearAnniversarInstantPrizeType.Loser:
                default:
                    model.PrizeName    = "wlaossdefr";
                    model.RouletteType = 4;
                    break;

                case TwoYearAnniversarInstantPrizeType.StarBucks:
                    model.PrizeName    = "wzzxjcvvl";
                    model.RouletteType = 3;
                    break;

                case TwoYearAnniversarInstantPrizeType.AtKidsBagPack:
                    model.PrizeName    = "wgrfkdqskad";
                    model.RouletteType = 2;
                    break;

                case TwoYearAnniversarInstantPrizeType.OriginalBag:
                    model.PrizeName    = "wtrrkeqwkqd";
                    model.RouletteType = 5;
                    break;

                case TwoYearAnniversarInstantPrizeType.Coupon_20:
                    model.PrizeName    = "wlzknjvhhgs";
                    model.RouletteType = 1;
                    break;

                case TwoYearAnniversarInstantPrizeType.LineFriendsCarrier:
                    model.PrizeName    = "wmznobfvlcdxj";
                    model.RouletteType = 0;
                    break;
                }

                return(Json(new
                {
                    result = true,
                    data = model
                }));
            }
            catch (TwoYearAnniversaryServiceException e)
            {
                return(Json(new
                {
                    result = false,
                    message = e.Message
                }));
            }
            catch (Exception e)
            {
                return(Json(new
                {
                    result = false,
                    message = "서비스 점검중입니다. 잠시 후 시도해보시거나, 담당자에게 문의하시기 바랍니다."
                }));
            }
        }