Exemple #1
0
        public async Task <IHttpActionResult> PostMark(Mark item)
        {
            item.UserId = LoggedUserId;
            Mark current = await InsertAsync(item);

            // Add a UserMarkExperience between the mark and it's creator to avoid notifying the user about it
            await context.InsertUserMarkExperience(LoggedUserId, current.Id);

            return(CreatedAtRoute("Tables", new { id = current.Id }, current));
        }
Exemple #2
0
        // GET api/ClosestMark
        public async Task <Mark> Get(double?latitude, double?longitude)
        {
            Mark closestMark = null;

            if (latitude != null && longitude != null)
            {
                m_UserLatitude  = latitude.Value;
                m_UserLongitude = longitude.Value;
            }

            try
            {
                int relevantCategoriesCode = context.GetUserRelevantCateogiresCode(LoggedUserId);

                IEnumerable <string> seenMarksIds = from userMarkExperiences in context.UserMarkExperiences
                                                    where userMarkExperiences.UserId == LoggedUserId
                                                    select userMarkExperiences.MarkId;

                IEnumerable <Mark> unseenRelevantMarks = from mark in context.Marks
                                                         where (relevantCategoriesCode & mark.CategoriesCode) != 0 &&
                                                         !seenMarksIds.Contains(mark.Id)
                                                         select mark;

                if (unseenRelevantMarks.Count() != 0)
                {
                    closestMark = unseenRelevantMarks.OrderByDescending((mark) => distanceFromUserKm(mark)).Last();

                    double distanceFromClosestMark = distanceFromUserKm(closestMark);
                    if (distanceFromClosestMark > 0.04)
                    {
                        // Closest mark is too far
                        closestMark = null;
                    }

                    else
                    {
                        // Insert a UserMarkExperience to avoid notifying this user about this mark again
                        await context.InsertUserMarkExperience(LoggedUserId, closestMark.Id);
                    }
                }
            }

            catch (Exception e)
            {
                LogTools.LogException(e);
            }

            return(closestMark);
        }
Exemple #3
0
        public async Task <bool> Post(string markId, float?rating)
        {
            bool updateWasSuccessful = false;

            // Check parameters
            if (markId == null || rating == null)
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }

            UserMarkExperience userMarkExperience = await context.UserMarkExperiences.FindAsync(LoggedUserId, markId);

            if (userMarkExperience == null)
            {
                await context.InsertUserMarkExperience(LoggedUserId, markId);
            }

            updateWasSuccessful = await updateMarkRating(markId, rating);

            return(updateWasSuccessful);
        }
Exemple #4
0
        public async Task <bool> Post(string markId)
        {
            bool updateWasSuccessful = false;

            if (markId == null)
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }

            UserMarkExperience userMarkExperience = await context.UserMarkExperiences.FindAsync(LoggedUserId, markId);

            if (userMarkExperience == null)
            {
                updateWasSuccessful = await context.InsertUserMarkExperience(LoggedUserId, markId);
            }
            else
            {
                updateWasSuccessful = await updateLastSeenTime(markId);
            }

            return(updateWasSuccessful);
        }