Beispiel #1
0
        public async Task <IActionResult> Edit(int id, [Bind("RaceRecordID,ProfileID,RaceType,RaceTime,MileTime")] RaceRecord raceRecord)
        {
            if (id != raceRecord.RaceRecordID)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(raceRecord);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!RaceRecordExists(raceRecord.RaceRecordID))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["ProfileID"] = new SelectList(_context.Profiles, "ProfileID", "FirstName", raceRecord.ProfileID);
            return(View(raceRecord));
        }
Beispiel #2
0
        private void TargetPlayer_NextCheckpointPassed(object sender, NextCheckpointPassArgs e)
        {
            UISound.Play(checkpointSound);
            checkpointTimeField.text = Utils.GetTimeString(e.CurrentLapTime);
            checkpointTimeField.GetComponent <ToggleCanvasGroup>().ShowTemporarily(2f);

            if (TargetPlayer.LapRecordsEnabled)
            {
                CharacterTier tier      = ActiveData.Characters[targetPlayer.Character].tier;
                string        sceneName = UnityEngine.SceneManagement.SceneManager.GetActiveScene().name;
                int           stage     = ActiveData.Stages.Where(a => a.sceneName == sceneName).First().id;

                float time = (float)e.CurrentLapTime.TotalSeconds;

                RaceRecord bestRecord = ActiveData.RaceRecords
                                        .Where(a => a.Tier == tier && a.Stage == stage && a.GameVersion == GameVersion.AS_FLOAT && a.WasTesting == GameVersion.IS_TESTING)
                                        .OrderBy(a => a.Time)
                                        .FirstOrDefault();

                if (bestRecord != null)
                {
                    float diff = time - bestRecord.CheckpointTimes[e.IndexOfPreviousCheckpoint];

                    bool     faster   = diff < 0;
                    TimeSpan diffSpan = TimeSpan.FromSeconds(Mathf.Abs(diff));

                    checkpointTimeDiffField.text  = (faster ? "-" : "+") + Utils.GetTimeString(diffSpan);
                    checkpointTimeDiffField.color = faster ? Color.blue : Color.red;
                    checkpointTimeDiffField.GetComponent <ToggleCanvasGroup>().ShowTemporarily(2f);

                    if (e.IndexOfPreviousCheckpoint == StageReferences.Active.checkpoints.Length - 1 && faster)
                    {
                        checkpointTimeDiffField.text = "New lap record!";
                    }
                }
                else
                {
                    if (e.IndexOfPreviousCheckpoint == StageReferences.Active.checkpoints.Length - 1)
                    {
                        checkpointTimeDiffField.text  = "Lap record set!";
                        checkpointTimeDiffField.color = Color.blue;
                        checkpointTimeDiffField.GetComponent <ToggleCanvasGroup>().ShowTemporarily(2f);
                    }
                }
            }
        }
 public void SetRecord(RaceRecord r)
 {
     if (r != null)
     {
         var timespan = TimeSpan.FromSeconds(r.Time);
         timeField.color     = new Color(50 / 255f, 50 / 255f, 50 / 255f);
         timeField.text      = string.Format("{0:00}:{1:00}.{2:000}", timespan.Minutes, timespan.Seconds, timespan.Milliseconds);
         characterField.text = "Set with " + ActiveData.Characters[r.Character].name;
         dateField.text      = r.Date.ToString();
     }
     else
     {
         timeField.text      = "No records found";
         timeField.color     = new Color(0.5f, 0.5f, 0.5f);
         characterField.text = "";
         dateField.text      = "";
     }
 }
Beispiel #4
0
        public async Task <IActionResult> CreatePersonal([Bind("RaceType,RaceTimeHours,RaceTimeMinutes,RaceTimeSeconds")] RaceRecordViewModel raceRecordView)
        {
            if (ModelState.IsValid)
            {
                var currid = GetUserID();

                //Load total time and race time, combining hours minutes and seconds from user entered data.
                int totalTime = raceRecordView.RaceTimeHours * 3600 + raceRecordView.RaceTimeMinutes * 60 + raceRecordView.RaceTimeSeconds;
                int mileTime  = Functions.GetMileTime(totalTime, raceRecordView.RaceType);

                //Ensure mile time is not too fast.
                if (mileTime > 223)
                {
                    var race = new RaceRecord
                    {
                        ProfileID = currid,
                        RaceTime  = totalTime,
                        RaceType  = raceRecordView.RaceType,
                        MileTime  = mileTime
                    };


                    try
                    {
                        //Add record to database.
                        _context.Add(race);
                        await _context.SaveChangesAsync();

                        //return RedirectToAction("Index", "Profiles", new {@show = "myracerecords"});
                        return(RedirectToAction("CreatePersonalSuccess", "RaceRecords", race));
                    }
                    catch (Exception ex)
                    {
                        return(View());
                    }
                }
                else
                {
                    ModelState.AddModelError("", "Wow, you must be fast!  Unfortnately your mile time must be greater than 3:43!");
                }
            }
            //            ViewData["UserID"] = new SelectList(_context.Users, "UserID", "FirstName", raceRecord.ProfileID);
            return(View(raceRecordView));
        }
Beispiel #5
0
        public async Task <IActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                //Calculate mile time.
                int totalTime = model.FirstTimeEntry.RaceTimeHours * 3600 + model.FirstTimeEntry.RaceTimeMinutes * 60 + model.FirstTimeEntry.RaceTimeSeconds;
                var mileTime  = Functions.GetMileTime(totalTime, model.FirstTimeEntry.RaceType);

                //Check minimum mile time is greater than current world record.
                if (mileTime > 223)
                {
                    var user = new SprintOne.Models.User
                    {
                        UserName = model.Username
                    };

                    using (var registrationTransaction = _context.Database.BeginTransaction())
                    {
                        try
                        {
                            var result = await userManager.CreateAsync(user, model.Password);

                            if (result.Succeeded)
                            {
                                var profile = new SprintOne.Models.Profile
                                {
                                    ProfileID    = user.UserID,
                                    FirstName    = model.Firstname,
                                    LastName     = model.Lastname,
                                    CreationDate = DateTime.Now,
                                    UserID       = user.UserID
                                };

                                var race = new RaceRecord
                                {
                                    RaceType  = model.FirstTimeEntry.RaceType,
                                    RaceTime  = totalTime,
                                    ProfileID = user.UserID,
                                    MileTime  = mileTime
                                };
                                _context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Profiles ON");
                                _context.Add(profile);
                                _context.SaveChanges();
                                _context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Profiles OFF");
                                _context.Add(race);
                                _context.SaveChanges();
                                registrationTransaction.Commit();
                                await signInManager.SignInAsync(user, isPersistent : false);

                                return(RedirectToAction("Success", "Home"));
                            }
                            else
                            {
                                foreach (var error in result.Errors)
                                {
                                    ModelState.AddModelError("", error.Description);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            registrationTransaction.Rollback();
                            ModelState.AddModelError("", "Unable to register, please contact your administrator for more details.");
                            return(View(model));
                        }
                    }
                }
                else
                {
                    ModelState.AddModelError("", "Wow, you must be fast!  Unfortnately your mile time must be greater than 3:43!");
                }
            }
            return(View(model));
        }
Beispiel #6
0
 public IActionResult EditPersonalSuccess(RaceRecord viewModel)
 {
     return(View(viewModel));
 }
Beispiel #7
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            RaceTypeList = new List <SelectListItem>()
            {
                new SelectListItem()
                {
                    Text = "One Mile", Value = "1"
                },
                new SelectListItem()
                {
                    Text = "5 Kilometers", Value = "2"
                },
                new SelectListItem()
                {
                    Text = "10 Kilometers", Value = "3"
                },
                new SelectListItem()
                {
                    Text = "Half-Marathon", Value = "4"
                },
                new SelectListItem()
                {
                    Text = "Full-Marathon", Value = "5"
                }
            };

            returnUrl      = returnUrl ?? Url.Content("~/");
            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();


            if (ModelState.IsValid)
            {
                //Calculate total and mile time.
                int totalTime = Input.RaceTimeHours * 3600 + Input.RaceTimeMinutes * 60 + Input.RaceTimeSeconds;
                var mileTime  = Functions.GetMileTime(totalTime, Input.RaceType);

                //Check if 1 mile time is absurd.
                if (mileTime > 223)
                {
                    var user = new RunGreenLakeUser
                    {
                        UserName       = Input.Email,
                        Email          = Input.Email,
                        FirstName      = Input.Firstname,
                        LastName       = Input.Lastname,
                        EmailConfirmed = true
                    };

                    //bundle registration transaction
                    using (var registrationTransaction = _context.Database.BeginTransaction())
                    {
                        try
                        {
                            //Create user profile, which will generate a "Link ID"
                            var result = await _userManager.CreateAsync(user, Input.Password);

                            if (result.Succeeded)
                            {
                                //Create profile entry.
                                var profile = new rungreenlake.Models.Profile
                                {
                                    ProfileID    = user.LinkID,
                                    CreationDate = DateTime.Now,
                                    LinkID       = user.LinkID
                                };

                                //Create initial time entry.
                                var race = new RaceRecord
                                {
                                    RaceType  = Input.RaceType,
                                    RaceTime  = totalTime,
                                    ProfileID = user.LinkID,
                                    MileTime  = mileTime
                                };
                                _context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Profiles ON");
                                _context.Add(profile);
                                _context.SaveChanges();
                                _context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Profiles OFF");
                                _context.Add(race);
                                _context.SaveChanges();
                                registrationTransaction.Commit();
                                await _signInManager.SignInAsync(user, isPersistent : false);

                                return(LocalRedirect(returnUrl));
                                //return RedirectToAction("Success", "Home");
                            }
                            else
                            {
                                foreach (var error in result.Errors)
                                {
                                    ModelState.AddModelError("", error.Description);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            registrationTransaction.Rollback();
                            ModelState.AddModelError("", "Unable to register, please contact your administrator for more details.");
                        }
                    }
                }
                else
                {
                    ModelState.AddModelError("", "Wow, you must be fast!  Unfortnately your mile time must be greater than 3:43!");
                }

                /*
                 *
                 * EMAIL CONFIRMATION, TEMPORARILY BYPASSED
                 * if (result.Succeeded)
                 * {
                 *  _logger.LogInformation("User created a new account with password.");
                 *
                 *  var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
                 *  code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                 *  var callbackUrl = Url.Page(
                 *      "/Account/ConfirmEmail",
                 *      pageHandler: null,
                 *      values: new { area = "Identity", userId = user.Id, code = code },
                 *      protocol: Request.Scheme);
                 *
                 *  await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                 *      $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
                 *
                 *  if (_userManager.Options.SignIn.RequireConfirmedAccount)
                 *  {
                 *      return RedirectToPage("RegisterConfirmation", new { email = Input.Email });
                 *  }
                 *  else
                 *  {
                 *      await _signInManager.SignInAsync(user, isPersistent: false);
                 *      return LocalRedirect(returnUrl);
                 *  }
                 * }
                 * foreach (var error in result.Errors)
                 * {
                 *  ModelState.AddModelError(string.Empty, error.Description);
                 * }
                 */
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }
Beispiel #8
0
        public static void Initialize(MatchContext context)
        {
            context.Database.EnsureCreated();

            // Look for any users.
            //If Any users, only create users for first run (seed AspNetUusers)
            if (context.Users.Any())
            {
                //If users exists, check if profiles also exist, if they do then data is already seeded.
                if (context.Profiles.Any())
                {
                    return;
                }

                var users = new Profile[]
                {
                    // UserID = 1
                    new Profile {
                        ProfileID = 1, FirstName = "John", LastName = "Smith", CreationDate = DateTime.Parse("2019-09-24"), UserID = 1
                    },
                    new Profile {
                        ProfileID = 2, FirstName = "Susan", LastName = "Meyers", CreationDate = DateTime.Parse("2019-05-07"), UserID = 2
                    },
                    new Profile {
                        ProfileID = 3, FirstName = "Michael", LastName = "Boylan", CreationDate = DateTime.Parse("2019-06-17"), UserID = 3
                    },
                    new Profile {
                        ProfileID = 4, FirstName = "Jeff", LastName = "Mililer", CreationDate = DateTime.Parse("2020-01-12"), UserID = 4
                    },
                    new Profile {
                        ProfileID = 5, FirstName = "Karen", LastName = "Filippelli", CreationDate = DateTime.Parse("2018-03-23"), UserID = 5
                    },
                    // UserID = 5
                    new Profile {
                        ProfileID = 6, FirstName = "Jim", LastName = "Halpert", CreationDate = DateTime.Parse("2019-07-05"), UserID = 6
                    },
                    new Profile {
                        ProfileID = 7, FirstName = "Dwight", LastName = "Schrute", CreationDate = DateTime.Parse("2020-03-09"), UserID = 7
                    },
                    new Profile {
                        ProfileID = 8, FirstName = "Pam", LastName = "Beesly", CreationDate = DateTime.Parse("2020-02-15"), UserID = 8
                    },
                    new Profile {
                        ProfileID = 9, FirstName = "Kelly", LastName = "Kapoor", CreationDate = DateTime.Parse("2019-04-09"), UserID = 9
                    },
                    new Profile {
                        ProfileID = 10, FirstName = "Ryan", LastName = "Howard", CreationDate = DateTime.Parse("2019-11-25"), UserID = 10
                    }
                };
                using (var profileTransaction = context.Database.BeginTransaction())
                {
                    context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Profiles ON");
                    foreach (Profile u in users)
                    {
                        context.Profiles.Add(u);
                    }
                    context.SaveChanges();
                    context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Profiles OFF");
                    profileTransaction.Commit();
                }

                var racerecords = new RaceRecord[]
                {
                    //RaceRecordID = 1
                    new RaceRecord {
                        ProfileID = 1, RaceType = 1, RaceTime = 450, MileTime = ToMile(450, 1)
                    },
                    new RaceRecord {
                        ProfileID = 2, RaceType = 2, RaceTime = 1300, MileTime = ToMile(1300, 2)
                    },
                    new RaceRecord {
                        ProfileID = 3, RaceType = 4, RaceTime = 5875, MileTime = ToMile(5875, 4)
                    },
                    new RaceRecord {
                        ProfileID = 4, RaceType = 3, RaceTime = 3100, MileTime = ToMile(3100, 3)
                    },
                    new RaceRecord {
                        ProfileID = 5, RaceType = 2, RaceTime = 1400, MileTime = ToMile(1400, 2)
                    },
                    //RaceRecordID = 5
                    new RaceRecord {
                        ProfileID = 6, RaceType = 5, RaceTime = 12500, MileTime = ToMile(12500, 5)
                    },
                    new RaceRecord {
                        ProfileID = 7, RaceType = 5, RaceTime = 11775, MileTime = ToMile(11775, 5)
                    },
                    new RaceRecord {
                        ProfileID = 8, RaceType = 4, RaceTime = 5550, MileTime = ToMile(5550, 4)
                    },
                    new RaceRecord {
                        ProfileID = 9, RaceType = 3, RaceTime = 2735, MileTime = ToMile(2735, 3)
                    },
                    new RaceRecord {
                        ProfileID = 10, RaceType = 2, RaceTime = 1500, MileTime = ToMile(1500, 2)
                    },
                    //RaceRecordID = 10
                    new RaceRecord {
                        ProfileID = 2, RaceType = 5, RaceTime = 12750, MileTime = ToMile(12750, 5)
                    },
                    new RaceRecord {
                        ProfileID = 3, RaceType = 5, RaceTime = 11875, MileTime = ToMile(11875, 5)
                    },
                    new RaceRecord {
                        ProfileID = 7, RaceType = 4, RaceTime = 5600, MileTime = ToMile(5600, 4)
                    },
                    new RaceRecord {
                        ProfileID = 1, RaceType = 3, RaceTime = 2850, MileTime = ToMile(2850, 3)
                    },
                    new RaceRecord {
                        ProfileID = 5, RaceType = 2, RaceTime = 1600, MileTime = ToMile(1600, 2)
                    },
                    //RaceRecordID = 15
                    new RaceRecord {
                        ProfileID = 2, RaceType = 5, RaceTime = 13000, MileTime = ToMile(13000, 5)
                    },
                    new RaceRecord {
                        ProfileID = 6, RaceType = 5, RaceTime = 12300, MileTime = ToMile(12300, 5)
                    },
                    new RaceRecord {
                        ProfileID = 4, RaceType = 4, RaceTime = 5300, MileTime = ToMile(5300, 4)
                    },
                    new RaceRecord {
                        ProfileID = 8, RaceType = 3, RaceTime = 2800, MileTime = ToMile(2800, 3)
                    },
                    new RaceRecord {
                        ProfileID = 3, RaceType = 2, RaceTime = 1650, MileTime = ToMile(1650, 2)
                    }
                };
                foreach (RaceRecord r in racerecords)
                {
                    context.RaceRecords.Add(r);
                }
                context.SaveChanges();


                var buddies = new BuddyState[]
                {
                    // 1 = Matched, 2 = Requested, 3 = Blocked

                    new BuddyState {
                        FirstID = 1, SecondID = 8, Status = 1
                    },
                    new BuddyState {
                        FirstID = 1, SecondID = 4, Status = 3
                    },
                    new BuddyState {
                        FirstID = 2, SecondID = 5, Status = 2
                    },
                    new BuddyState {
                        FirstID = 3, SecondID = 10, Status = 1
                    },
                    new BuddyState {
                        FirstID = 3, SecondID = 5, Status = 2
                    }
                };

                foreach (BuddyState b in buddies)
                {
                    context.BuddyList.Add(b);
                }
                context.SaveChanges();



                var messages = new Message[]
                {
                    new Message
                    {
                        MessageID   = 8,
                        DateSent    = DateTime.Parse("2019-10-26"),
                        MsgSenderID = 2,
                        MsgHeader   = "Hi",
                        MsgBody     = "Hey, I saw you atteneded the same race in the same area the other day.  You live around there?  Train regularly?"
                    },
                    new Message
                    {
                        MessageID   = 7,
                        DateSent    = DateTime.Parse("2019-10-23"),
                        MsgSenderID = 7,
                        MsgHeader   = "All in",
                        MsgBody     = "So what do I do here?  I'm not looking to put anything less than 100% into my training."
                    },
                    new Message
                    {
                        MessageID   = 6,
                        DateSent    = DateTime.Parse("2019-10-17"),
                        MsgSenderID = 3,
                        MsgHeader   = "Short Time",
                        MsgBody     = "Yes, absolutely, we meet at 6 AM over in this area Mondays, Wednesdays and Saturdays if that works."
                    },
                    new Message
                    {
                        MessageID   = 5,
                        DateSent    = DateTime.Parse("2019-10-13"),
                        MsgSenderID = 10,
                        MsgHeader   = "Short Time",
                        MsgBody     = "Hi, I'm in the area for work for a month or two and will be in the same area.  Would you like to pair up for some runs?"
                    },
                    new Message
                    {
                        MessageID   = 4,
                        DateSent    = DateTime.Parse("2019-10-11"),
                        MsgSenderID = 5,
                        MsgHeader   = "Really?!",
                        MsgBody     = "We met at the race the other day and I saw your finish time, it was amazing.  How often do you train?"
                    },
                    new Message
                    {
                        MessageID   = 3,
                        DateSent    = DateTime.Parse("2019-10-04"),
                        MsgSenderID = 8,
                        MsgHeader   = "Hello",
                        MsgBody     = "Awesome!  I've been trying for a while to find someone, when's a good time to meet up?"
                    },
                    new Message
                    {
                        MessageID   = 2,
                        DateSent    = DateTime.Parse("2019-09-27"),
                        MsgSenderID = 1,
                        MsgHeader   = "Hello",
                        MsgBody     = "Yes, I'm already running with 2 others but we would love to have more.  We usually go in the morning but lately we've been having trouble synching up.  If you're up for it, we're trying in the early evening right after we all get off from work."
                    },
                    new Message
                    {
                        MessageID   = 1,
                        DateSent    = DateTime.Parse("2019-09-24"),
                        MsgSenderID = 8,
                        MsgHeader   = "Hello",
                        MsgBody     = "Hey, I see you're in the same area.  Are you already running with a group or would you like to start one?"
                    },
                };
                using (var messageTransaction = context.Database.BeginTransaction())
                {
                    context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Messages ON");
                    foreach (Message m in messages)
                    {
                        context.Messages.Add(m);
                    }
                    context.SaveChanges();
                    context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Messages OFF");
                    messageTransaction.Commit();
                }


                var threads = new Thread[]
                {
                    new Thread {
                        ThreadID = 1, InitiatorID = 8, ReceiverID = 1
                    },
                    new Thread {
                        ThreadID = 2, InitiatorID = 5, ReceiverID = 3
                    },
                    new Thread {
                        ThreadID = 3, InitiatorID = 3, ReceiverID = 10
                    },
                    new Thread {
                        ThreadID = 4, InitiatorID = 7, ReceiverID = 4
                    },
                    new Thread {
                        ThreadID = 5, InitiatorID = 2, ReceiverID = 9
                    }
                };

                using (var threadTransaction = context.Database.BeginTransaction())
                {
                    context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Threads ON");
                    foreach (Thread t in threads)
                    {
                        context.Threads.Add(t);
                    }
                    context.SaveChanges();
                    context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Threads OFF");
                    threadTransaction.Commit();
                }



                var conversations = new Conversation[]
                {
                    new Conversation {
                        ThreadID = 1, MessageID = 1, ReadFlag = 1, DateRead = null
                    },
                    new Conversation {
                        ThreadID = 1, MessageID = 2, ReadFlag = 1, DateRead = null
                    },
                    new Conversation {
                        ThreadID = 1, MessageID = 3, ReadFlag = 1, DateRead = null
                    },
                    new Conversation {
                        ThreadID = 2, MessageID = 4, ReadFlag = 0, DateRead = null
                    },
                    new Conversation {
                        ThreadID = 3, MessageID = 5, ReadFlag = 1, DateRead = null
                    },
                    new Conversation {
                        ThreadID = 3, MessageID = 6, ReadFlag = 0, DateRead = null
                    },
                    new Conversation {
                        ThreadID = 4, MessageID = 7, ReadFlag = 0, DateRead = null
                    },
                    new Conversation {
                        ThreadID = 5, MessageID = 8, ReadFlag = 0, DateRead = null
                    }
                };
                foreach (Conversation c in conversations)
                {
                    context.Conversations.Add(c);
                }
                context.SaveChanges();
            }   // DB has been seeded
            return;
        }