コード例 #1
0
        public async Task <IActionResult> Change(Guid appealId)
        {
            // Get member replacement from database
            var replacement = await chatRepository.GetReplacement(appealId);

            // Check if member replacement or old member is null
            if (replacement?.OldMember != null)
            {
                return(BadRequest("Замена Члена КК уже была произведена"));
            }

            // Get chat session from database
            var chatSession = await chatRepository.GetChatSession(appealId);

            // Check if chat session or current expert is null
            if (chatSession?.CurrentExpertKey == null)
            {
                return(BadRequest("Член КК еще не подключился к онлайн-чату"));
            }

            // Key of old expert
            var oldExpertKey = chatSession.CurrentExpertKey.Value;

            // Add member replacement to database and check if this member replacement has been added
            if (!await chatRepository.AddReplacement(appealId, oldExpertKey))
            {
                return(BadRequest("Не удалось добавить запись в таблицу"));
            }

            // Set value of current expert of chat session to null
            chatSession.CurrentExpertKey = null;

            // Update chat session and check if this chat session has been updated
            if (!await chatRepository.UpdateSession(chatSession))
            {
                return(BadRequest("Не удалось обновить таблицу"));
            }

            // Expert nickname of message
            var nickname = "Член КК № " + oldExpertKey;

            // Text of message
            var messageText = "Произведена замена члена КК № " + oldExpertKey;

            // Add "Replace expert" message to database
            var messageResult = await chatRepository.WriteChatMessage(appealId, nickname, messageText, ChatMessageTypes.ChangeExpert);

            // Check if message has been added to database
            if (!messageResult)
            {
                return(BadRequest("Не удалось добавить запись в таблицу"));
            }

            // Send "Initialize expert replacement" message to all connected clients of this appeal
            await chatContext.Clients.User(appealId.ToString()).InitializeChange(messageText);

            // Return success response
            return(Ok());
        }