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