//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)); }
//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(); }
//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)); }