public void AddParticipantsGroupToEvent(string eventName, ParticipantsGroup participantsGroup)
        {
            var eventData = GetEventByName(eventName);

            if (eventData == null)
            {
                eventData = new Event(eventName, DateTime.Now);
                _events.Add(eventData);
            }

            var existingParticipantGroup = eventData.Participants.FirstOrDefault(p => p.Name == participantsGroup.Name);

            if (existingParticipantGroup == null)
            {
                eventData.Participants.Add(participantsGroup);
            }
            else if (existingParticipantGroup.IsSure != participantsGroup.IsSure)
            {
                existingParticipantGroup.IsSure = participantsGroup.IsSure;
            }
            else if (participantsGroup.Count > 1)
            {
                existingParticipantGroup.Count += participantsGroup.Count;
            }

            _storage.Save(_events);
        }
        public void RemoveParticipantGroupFromEvent(string eventName, ParticipantsGroup participantInfo)
        {
            var eventData = GetEventByName(eventName);

            if (eventData == null)
            {
                return;
            }

            var existingParticipant = eventData.Participants.FirstOrDefault(p => p.Name == participantInfo.Name);

            if (existingParticipant != null)
            {
                if (participantInfo.Count >= existingParticipant.Count)
                {
                    eventData.Participants.Remove(existingParticipant);
                }
                else
                {
                    existingParticipant.Count -= participantInfo.Count;
                }
            }

            _storage.Save(_events);
        }
        private bool HandleUpdates(int gameId, ParticipantsGroup existingGroup, ParticipantsGroup updatedGroup)
        {
            if (existingGroup.State != updatedGroup.State)
            {
                if (existingGroup.State == ParticipantState.Accepted && updatedGroup.State == ParticipantState.Declined)
                {
                    if (updatedGroup.Count >= existingGroup.Count)
                    {
                        existingGroup.State = ParticipantState.Declined;
                    }
                    else
                    {
                        existingGroup.Count -= updatedGroup.Count;
                    }
                }
                else
                {
                    existingGroup.State = updatedGroup.State;
                }

                participantMapper.UpdateParticipant(gameId, existingGroup);
                return(true);
            }
            else if (updatedGroup.State == ParticipantState.Accepted && updatedGroup.Count > 1)
            {
                existingGroup.Count += updatedGroup.Count;
                participantMapper.UpdateParticipant(gameId, existingGroup);
                return(true);
            }

            return(false);
        }
        public bool UpdateParticipantsGroupState(string gameTitle, ParticipantsGroup participantsGroup)
        {
            if (participantsGroup == null)
            {
                throw new ArgumentException($"{nameof(participantsGroup)} is null");
            }

            var game = gameMapper.GetLatestGameByTitle(gameTitle);

            if (game == null)
            {
                return(false);
            }

            var existingGroup = participantMapper.GetParticipantByName(game.Id, participantsGroup.Name);

            if (existingGroup == null)
            {
                participantMapper.AddParticipant(game.Id, participantsGroup);
                return(participantsGroup.State == ParticipantState.Accepted || participantsGroup.State == ParticipantState.NotSured);
            }
            else
            {
                return(HandleUpdates(game.Id, existingGroup, participantsGroup));
            }
        }
示例#5
0
        private bool ExecutionWillUpdateCurrentCount(ParticipantsGroup participantsGroup)
        {
            if (participantsGroup.Name != Message.AuthorName)
            {
                return(true);
            }

            var existingParticipantsGroup = EventsRepository.GetParticipantsGroup(Message.ChatName, participantsGroup.Name);

            return(existingParticipantsGroup != null);
        }
 public void AddParticipant(int gameId, ParticipantsGroup participantsGroup)
 {
     if (!participants.ContainsKey(gameId))
     {
         participants.Add(gameId, new List <ParticipantsGroup> {
             participantsGroup
         });
     }
     else
     {
         participants[gameId].Add(participantsGroup);
     }
 }
        public static ParticipantsGroup GetParticipantsGroupFromMessage(ChatMessage message)
        {
            var participantsGroup = new ParticipantsGroup();

            var countSymbols = _notSureSymbols.Concat(_increaseCountSymbols).Concat(_decreaseCountSymbols);
            var messageText  = message.Text;

            foreach (var symbol in countSymbols)
            {
                messageText = messageText.Replace(symbol, "");
            }

            var messageParts = messageText.TrimStart().Split(' ');

            if (IsSimpleCountMessage(message.Text))
            {
                participantsGroup.Name  = message.Author.Name;
                participantsGroup.Count = 1;
            }
            else if (char.IsDigit(messageParts[0][0]))
            {
                participantsGroup.Count = int.Parse(messageParts[0]);

                if (messageParts.Length > 1)
                {
                    var participantName = messageParts[1];
                    for (var i = 2; i < messageParts.Length; i++)
                    {
                        participantName += " " + messageParts[i];
                    }
                    participantsGroup.Name = participantName;
                }
                else
                {
                    participantsGroup.Name = "вместе с " + message.Author.Name;
                }
            }
            else
            {
                participantsGroup.Name  = string.Join(" ", messageParts);
                participantsGroup.Count = 1;
            }

            participantsGroup.State = GetStateFromMessage(message.Text);

            return(participantsGroup);
        }
        public void AddParticipant(int gameId, ParticipantsGroup participantsGroup)
        {
            if (participantsGroup == null)
            {
                throw new ArgumentException($"{nameof(participantsGroup)} is null");
            }

            var sqlQuery = @"
INSERT INTO game_participants (GameId, Name, StateId, Count) 
VALUES (@GameId, @Name, @StateId, @Count)";

            var queryParams = new
            {
                GameId = gameId,
                participantsGroup.Name,
                StateId = GetStateId(participantsGroup.State),
                participantsGroup.Count
            };

            dbConnectionProvider.Connection.Execute(sqlQuery, queryParams);
        }
        public void UpdateParticipant(int gameId, ParticipantsGroup participantsGroup)
        {
            if (participantsGroup == null)
            {
                throw new ArgumentException($"{nameof(participantsGroup)} is null");
            }

            var sqlQuery = @"
UPDATE game_participants 
SET StateId = @StateId, Count = @Count
WHERE GameId = @GameId AND Name = @Name";

            var queryParams = new
            {
                GameId = gameId,
                participantsGroup.Name,
                StateId = GetStateId(participantsGroup.State),
                participantsGroup.Count
            };

            dbConnectionProvider.Connection.Execute(sqlQuery, queryParams);
        }
        public void UpdateParticipant(int gameId, ParticipantsGroup participantsGroup)
        {
            var participant = participants[gameId].FirstOrDefault(x => x.Name == participantsGroup.Name);

            participant = participantsGroup;
        }