Example #1
0
        public PotentialOffersModel(TennisUserModel tennisUserP, SportsLinkDB dbP)
            : base(tennisUserP)
        {
            // BUGBUG: get rid of the hard-coded values
            if (null == CachedQuery)
            {
                var offers = ModelUtils.GetOffersFunc();

                Expression <Func <SportsLinkDB, TennisUserModel, IQueryable <OfferModel> > > results =
                    (SportsLinkDB db, TennisUserModel tennisUser) =>
                    offers.Invoke(db, tennisUser)
                    .Where
                        (o =>
                        o.ConfirmedUser == null &&
                        (o.SpecificOpponent == null || o.SpecificOpponent.FacebookId == tennisUser.FacebookId) &&
                        o.RequestUser.FacebookId != tennisUser.FacebookId &&
                        o.MatchDateUtc >= DateTime.UtcNow &&
                        Math.Abs(tennisUser.Rating - o.RequestUser.Rating) <= 0.25 &&
                        db.CoordinateDistanceMiles(o.City.Latitude, o.City.Longitude, tennisUser.City.Latitude, tennisUser.City.Longitude) < 15
                        ).OrderBy(o => Math.Abs(tennisUser.Rating - o.RequestUser.Rating)).Take(20);

                CachedQuery = CompiledQuery.Compile <SportsLinkDB, TennisUserModel, IQueryable <OfferModel> >
                              (
                    results.Expand()
                              );
            }

            this.PotentialOffers = CachedQuery(dbP, tennisUserP);
        }
Example #2
0
        public CalendarModel(DateTime startDateP, TennisUserModel tennisUserP, SportsLinkDB dbP)
            : base(tennisUserP)
        {
            this.UserStartDate = IndexModel.GetLocalDate(startDateP.ToUniversalTime(), tennisUserP.TimeZoneOffset);
            this.UserStartDate = this.UserStartDate.AddDays(-(int)this.UserStartDate.DayOfWeek);
            this.StartDate     = IndexModel.GetUtcDate(this.UserStartDate, tennisUserP.TimeZoneOffset);
            this.EndDate       = this.StartDate.AddDays(7);

            if (null == CachedQuery)
            {
                var offers = ModelUtils.GetOffersFunc();

                Expression <Func <SportsLinkDB, TennisUserModel, DateTime, DateTime, IQueryable <OfferModel> > > results =
                    (SportsLinkDB db, TennisUserModel tennisUser, DateTime startDate, DateTime endDate) =>
                    offers.Invoke(db, tennisUser)
                    .Where(o => o.RequestUser.FacebookId != tennisUser.FacebookId)
                    .Where(o => o.SpecificOpponent == null || o.SpecificOpponent.FacebookId == tennisUser.FacebookId || o.RequestUser.FacebookId == tennisUser.FacebookId)
                    .Where(o => o.ConfirmedUser == null || o.ConfirmedUser.FacebookId == tennisUser.FacebookId || o.RequestUser.FacebookId == tennisUser.FacebookId)
                    .Where(o => o.MatchDateUtc >= startDate)
                    .Where(o => o.MatchDateUtc < endDate)
                    .Where(o => o.MatchDateUtc >= DateTime.UtcNow || null != o.ConfirmedUser)
                    .OrderBy(o => o.MatchDateUtc);

                CachedQuery = CompiledQuery.Compile <SportsLinkDB, TennisUserModel, DateTime, DateTime, IQueryable <OfferModel> >
                              (
                    results.Expand()
                              );
            }

            this.Offers = CachedQuery(dbP, tennisUserP, this.StartDate, this.EndDate);
        }
Example #3
0
        public ConfirmedMatchesModel(TennisUserModel tennisUserP, SportsLinkDB dbP)
            : base(tennisUserP)
        {
            // Select confirmed matchs which do not have a score yet where the current user is either a requestor or an acceptor
            // BUGBUG: we might want to eliminate confirmed matches that way older than current time (user might have forgotten to enter a score)
            if (null == CachedQuery)
            {
                var offers = ModelUtils.GetOffersFunc();

                Expression <Func <SportsLinkDB, TennisUserModel, IQueryable <OfferModel> > > results =
                    (SportsLinkDB db, TennisUserModel tennisUser) =>
                    offers.Invoke(db, tennisUser)
                    .Where(o => o.ConfirmedUser != null)
                    .Where(o => (o.ConfirmedUser.FacebookId == tennisUser.FacebookId || o.RequestUser.FacebookId == tennisUser.FacebookId))
                    .Where(o => (o.Score == null || o.Score == ""))
                    .OrderByDescending(o => o.MatchDateUtc);

                CachedQuery = CompiledQuery.Compile <SportsLinkDB, TennisUserModel, IQueryable <OfferModel> >
                              (
                    results.Expand()
                              );
            }

            this.ConfirmedMatches = CachedQuery(dbP, tennisUserP);
        }
Example #4
0
        public UserOffersModel(TennisUserModel tennisUserP, SportsLinkDB dbP)
            : base(tennisUserP)
        {
            // BUGBUG: what about offers which were not confirmed and where the offer time is past - we need to eliminate those from the db
            if (null == CachedQuery)
            {
                var offers = ModelUtils.GetOffersFunc();

                Expression <Func <SportsLinkDB, TennisUserModel, IQueryable <OfferModel> > > results =
                    (SportsLinkDB db, TennisUserModel tennisUser) =>
                    offers.Invoke(db, tennisUser)
                    .Where(o => o.ConfirmedUser == null)
                    .Where(o => o.RequestUser.FacebookId == tennisUser.FacebookId && o.MatchDateUtc > DateTime.UtcNow)
                    .OrderBy(o => o.MatchDateUtc);

                CachedQuery = CompiledQuery.Compile <SportsLinkDB, TennisUserModel, IQueryable <OfferModel> >
                              (
                    results.Expand()
                              );
            }

            this.UserOffers = CachedQuery(dbP, tennisUserP);
        }
Example #5
0
        public ResultsModel(TennisUserModel tennisUserP, SportsLinkDB dbP)
            : base(tennisUserP)
        {
            if (null == CachedQuery)
            {
                var offers = ModelUtils.GetOffersFunc();

                Expression <Func <SportsLinkDB, TennisUserModel, IQueryable <OfferModel> > > results =
                    (SportsLinkDB db, TennisUserModel tennisUser) =>
                    offers.Invoke(db, tennisUser)
                    .Where(o => o.ConfirmedUser != null)
                    .Where(o => (o.ConfirmedUser.FacebookId == tennisUser.FacebookId || o.RequestUser.FacebookId == tennisUser.FacebookId))
                    .Where(o => (o.Score != null && o.Score != ""))
                    .OrderByDescending(o => o.MatchDateUtc);

                CachedQuery = CompiledQuery.Compile <SportsLinkDB, TennisUserModel, IQueryable <OfferModel> >
                              (
                    results.Expand()
                              );
            }

            this.UserResults = CachedQuery(dbP, tennisUserP);
        }