Exemple #1
0
 public MainViewModel()
 {
     TeamScores = new List<TeamsScore>();
     ChatEntries = new List<Chat>();
     TeamName = string.Empty;
     ScoreData = new ScoreViewModel();
 }
        public string Add(ScoreViewModel model)
        {
            var user = UserManager.FindById(User.Identity.GetUserId());
            var teamId = user.Team.TeamID;
            var hole = Context.Holes.FirstOrDefault(h => h.HoleNumber.Equals(model.HoleNumber));
            var holeId = hole.HoleID;
            var nextHole = Context.Holes.FirstOrDefault(h => h.HoleNumber.Equals(hole.HoleNumber + 1));

            // check if they've entered a score for this hole ID already:
            var score = Context.Scores.FirstOrDefault(t => t.TeamID == teamId && t.HoleID.Equals(holeId));

            if (score == null)
            {
                Context.Scores.Add(new Score
                {
                    Strokes = model.Strokes,
                    HoleID = holeId,
                    TeamID = teamId
                });
            }
            else
            {
                score.Strokes = model.Strokes;
            }

            var team = Context.Teams.FirstOrDefault(t => t.TeamID == teamId);
            // var hole = Context.Holes.FirstOrDefault(h => h.HoleID.Equals(holeId));
            var chatMessage = "";

            if (team != null && hole != null)
            {
                chatMessage = MessageBuilder.GetNewScoreMessage(hole.HoleNumber, team.Name, model.Strokes, hole.Par);
                Context.Chats.Add(new Chat
                {
                    Message = chatMessage,
                    TeamID = teamId
                });
            }

            Context.SaveChanges();

            // get this team's score/thru holes for signal R to push out:
            var updatedScore = ScoreHelper.CalculateScore(teamId);
            var thru = ScoreHelper.CalculateThru(teamId);

            // we need to broadcast this new chat message via signal R:
            ChatHub.UpdateScore(teamId.ToString(), updatedScore, thru);
            ChatHub.Update(chatMessage);

            //return RedirectToAction("Index", "Home", new { teamId = teamId.ToString() });

            // return the next hole:
            return nextHole != null ? JsonConvert.SerializeObject(new ScoreViewModel() { HoleNumber = nextHole.HoleNumber, Strokes = nextHole.Par }) : "";
        }