Example #1
0
        public void Log(Feedback feedbackItem)
        {
            Application application = this.applicationRepository.Find(feedbackItem.ApplicationId);

            if (application != null)
            {
                DeviceInfo device = this.deviceRepository.Find(feedbackItem.DeviceId);

                if (device != null)
                {
                    feedbackItem.PlatformId = device.PlatformType;

                    FeedbackSummary feedbackSum = new FeedbackSummary(feedbackItem);

                    this.feedbackRepository.Save(feedbackSum);
                    this.feedbackRepository.Save(feedbackItem);
                }
                else
                {
                    throw new NoDeviceException(feedbackItem.DeviceId);
                }
            }
            else
            {
                throw new InactiveApplicationException(feedbackItem.ApplicationId);
            }
        }
Example #2
0
        public void Save(FeedbackSummary entity)
        {
            try
            {
                IMongoQuery queryBase = Query.And
                                        (
                    Query <FeedbackSummary> .EQ <DateTime>(mem => mem.Date, entity.Date),
                    Query <FeedbackSummary> .EQ <Guid>(mem => mem.ApplicationId, entity.ApplicationId),
                    Query <FeedbackSummary> .EQ <string>(mem => mem.Version, entity.Version),
                    Query <FeedbackSummary> .EQ <PlatformType>(mem => mem.PlatformId, entity.PlatformId)
                                        );

                IMongoUpdate update = Update <FeedbackSummary>
                                      .SetOnInsert(x => x.Version, entity.Version)
                                      .SetOnInsert(x => x.Date, entity.Date)
                                      .SetOnInsert(x => x.ApplicationId, entity.ApplicationId)
                                      .SetOnInsert(x => x.PlatformId, entity.PlatformId)
                                      .SetOnInsert(x => x.Ratings, new List <RatingAggregate>())
                                      .Inc(mem => mem.Count, entity.Count)
                                      .Inc(mem => mem.SumOfRatings, entity.SumOfRatings);

                this.GetCollection <FeedbackSummary>()
                .FindAndModify(queryBase, SortBy.Descending("Date"), update, false, true);
                this.GetCollection <FeedbackSummary>().EnsureIndex(IndexKeys.Descending("Date"));

                IMongoQuery queryFeedbackInsert = Query.And
                                                  (
                    queryBase,
                    Query.NE("Ratings.Key", BsonValue.Create(entity.Ratings.First().Key))
                                                  );

                IMongoUpdate updateFeedback = Update
                                              .Push("Ratings", BsonValue.Create(entity.Ratings.First().CopyOnlyKey().ToBsonDocument()));

                this.GetCollection <FeedbackSummary>().Update(queryFeedbackInsert, updateFeedback);

                IMongoQuery queryFeedbackUpdate = Query.And
                                                  (
                    queryBase,
                    Query.EQ("Ratings.Key", BsonValue.Create(entity.Ratings.First().Key))
                                                  );

                IMongoUpdate updateInc = Update
                                         .Inc("Ratings.$.Rating", entity.Ratings.First().Rating)
                                         .Inc("Ratings.$.Count", 1);

                this.GetCollection <FeedbackSummary>().Update(queryFeedbackUpdate, updateInc);
            }
            catch (Exception ex)
            {
                throw new DataAccessLayerException(ex);
            }
        }
        public void Save_SummaryRecord_MatchesSummary()
        {
            FeedbackMapper feedbackMapper = new FeedbackMapper(this.client, this.database);
            Guid           applicationId  = Guid.NewGuid();
            string         screenName     = "screenName";

            FeedbackSummary expected = new FeedbackSummary()
            {
                ApplicationId = applicationId,
                Count         = 2,
                Date          = date,
                PlatformId    = platform,
                Ratings       = new List <RatingAggregate>()
                {
                    new RatingAggregate(screenName, 8)
                    {
                        Count = 2
                    }
                },
                Version      = version,
                SumOfRatings = 8
            };

            Feedback feedback = new Feedback()
            {
                ApplicationId       = applicationId,
                DeviceId            = Guid.NewGuid(),
                Message             = "feedback",
                Rating              = FeedbackRatingType.Five,
                ScreenName          = screenName,
                SessionId           = Guid.NewGuid(),
                DateCreatedOnDevice = dateCreatedOnDevice,
                Date        = date,
                DateCreated = DateTime.Now,
                Version     = version,
                PlatformId  = platform
            };

            FeedbackSummary summary = new FeedbackSummary(feedback);

            feedbackMapper.Save(summary);

            Feedback feedback2 = new Feedback()
            {
                ApplicationId       = applicationId,
                DeviceId            = Guid.NewGuid(),
                Message             = "feedback",
                Rating              = FeedbackRatingType.Three,
                ScreenName          = screenName,
                SessionId           = Guid.NewGuid(),
                DateCreatedOnDevice = dateCreatedOnDevice,
                Date        = date,
                DateCreated = DateTime.Now,
                Version     = version,
                PlatformId  = platform
            };

            FeedbackSummary summary2 = new FeedbackSummary(feedback2);

            feedbackMapper.Save(summary2);

            IMongoQuery query = Query.And
                                (
                Query <FeedbackSummary> .EQ <DateTime>(mem => mem.Date, date),
                Query <FeedbackSummary> .EQ <Guid>(mem => mem.ApplicationId, applicationId),
                Query <FeedbackSummary> .EQ <string>(mem => mem.Version, version),
                Query <FeedbackSummary> .EQ <PlatformType>(mem => mem.PlatformId, platform)
                                );

            FeedbackSummary actual = this.GetCollection <FeedbackSummary>().FindOne(query);

            actual.ShouldHave().AllPropertiesBut(x => x.Id)
            .IncludingNestedObjects().EqualTo(expected);
        }
 public void Save(FeedbackSummary entity)
 {
     this.feedbackMapper.Save(entity);
 }