예제 #1
0
        //locking out of a cycle
        public JsonResult LockOut(int?cid, int?uid)
        {
            Cycle cycle = db.Cycles.Find(cid);
            User  user  = db.Users.Find(uid);

            if (user == null || cycle == null)
            {
                return(Json(-1, JsonRequestBehavior.AllowGet));
            }

            mutex.WaitOne();
            //check if request is still valid
            if (!db.Requests.Where(r => (r.UserId == user.UserId && r.State == 0)).Any())
            {
                mutex.ReleaseMutex();
                return(Json(-1, JsonRequestBehavior.AllowGet));
            }


            //get user cycle and change lock state to false
            UserCycle userCycle = db.UserCycles.Where(uc => uc.CycleId == cycle.CycleId && uc.UserId == user.UserId).First();

            userCycle.IsLocked = false;
            db.Entry(userCycle).Property("IsLocked").IsModified = true;
            db.SaveChanges();
            mutex.ReleaseMutex();
            return(Json(1, JsonRequestBehavior.AllowGet));
        }
예제 #2
0
        //put request in db
        private void addRequestToDb(Request r)
        {
            List <List <string> > cycles = filterCyclesForUser(FindCycles(r.Start, r.End), r);

            foreach (List <string> cycle in cycles)
            {
                Cycle c = new Cycle()
                {
                    Start = r.Start,
                    End   = r.End
                };
                db.Cycles.Add(c);
                db.SaveChanges();
                foreach (string userId in cycle) //add usercycle for every user in cycle
                {
                    int       userIdInt = Int32.Parse(userId);
                    UserCycle uc        = new UserCycle()
                    {
                        UserId   = userIdInt,
                        User     = db.Users.Find(userIdInt),
                        CycleId  = c.CycleId,
                        Cycle    = db.Cycles.Find(c.CycleId),
                        IsLocked = false
                    };
                    db.UserCycles.Add(uc);
                }
            }
            db.Requests.Add(r);
            db.SaveChanges();
        }
예제 #3
0
        //locking into a cycle (after funds were validated)
        public JsonResult LockIn(int?cid, int?uid)
        {
            Cycle cycle = db.Cycles.Find(cid);
            User  user  = db.Users.Find(uid);

            if (user == null || cycle == null)
            {
            }
            //check if user is already locked into a cycle
            if (db.UserCycles.Where(uc => uc.UserId == user.UserId && uc.IsLocked).Any())
            {
                return(Json(0, JsonRequestBehavior.AllowGet));
            }
            //get user cycle and change lock state to true
            UserCycle userCycle = db.UserCycles.Where(uc => uc.CycleId == cycle.CycleId && uc.UserId == user.UserId).First();

            userCycle.IsLocked = true;
            db.Entry(userCycle).Property("IsLocked").IsModified = true;
            db.SaveChanges();
            //check if cycle is now complete and return the right indicator
            if (IsCycleComplete(cycle))
            {
                foreach (UserCycle uc in cycle.UserCycles)
                {
                    int  userId        = uc.UserId;
                    User userForSearch = uc.User;
                    //finding guest and dest
                    Request userReq       = db.Requests.Where(r => (r.UserId == userId && r.State == 0)).First();
                    string  userDest      = userReq.To; //got user destination through an active request
                    string  userResidence = userForSearch.Country + "-" + userForSearch.City;

                    User host  = null;
                    User guest = null;
                    foreach (UserCycle uc2 in cycle.UserCycles)
                    {
                        User    ucUser    = db.Users.Find(uc2.UserId); //uc.User is null so ucUser is utilized
                        Request req       = db.Requests.Where(r => (r.UserId == ucUser.UserId && r.State == 0)).First();
                        string  dest      = req.To;
                        string  residence = ucUser.Country + "-" + ucUser.City;
                        if (residence == userDest)
                        {
                            host = ucUser;
                        }
                        if (userResidence == dest)
                        {
                            guest = ucUser;
                        }
                    }

                    User    use = db.Users.Where(u => u.UserId == userId).Include(a => a.Histories).First();
                    History h   = new History
                    {
                        UserId    = userId,
                        User      = use,
                        StartDate = cycle.Start.Date,
                        EndDate   = cycle.End.Date,
                        Host      = host,
                        Guest     = guest
                    };
                    db.History.Add(h);
                    if (use.Histories == null)
                    {
                        use.Histories = new List <History>();
                    }
                    use.Histories.Add(h);
                    db.SaveChanges();
                }
                return(Json(1, JsonRequestBehavior.AllowGet));
            }
            return(Json(2, JsonRequestBehavior.AllowGet));
        }