Пример #1
0
        public async Task <IActionResult> CreateSingleChatRoom([FromBody] JObject jObject)
        {
            var result = new OperationResult <ChatRoom>();

            var username = jObject["username"].ToString();
            var greeting = jObject["message"] != null ? jObject["message"].ToString() : null;

            if (await _userManager.FindByNameAsync(username) == null)
            {
                return(new ObjectResult(await result.Fail(EnumHelper.GetStringValue(AuthError.UserNotFound))));
            }

            var chatRoom = new ChatRoom
            {
                Id    = ObjectId.GenerateNewId().ToString(),
                Users = new List <string> {
                    User.Identity.Name, username
                },
                Messages        = new List <ChatMessage>(),
                Type            = ChatRoomType.Single,
                LastMessageTime = DateTime.Now,
                Name            = username
            };

            if ((await _chatRoomService.GetChatRoomsForUserAsync(User.Identity.Name))
                .Any(r => r.Users.Contains(username)))
            {
                return(new ObjectResult(await result.Fail(EnumHelper.GetStringValue(ChatError.RoomAlreadyExists))));
            }
            await _chatRoomService.CreateChatRoomAsync(chatRoom);

            if (greeting != null)
            {
                var greetingMessage = new ChatMessage
                {
                    Id        = ObjectId.GenerateNewId().ToString(),
                    From      = User.Identity.Name,
                    To        = username,
                    Timestamp = DateTime.Now,
                    RoomId    = chatRoom.Id,
                    Status    = ChatMessageStatus.Sent,
                    Body      = greeting
                };

                var addHeaders = new Dictionary <string, object> {
                    { "greeting", "true" }
                };
                await _chatMessageService.PublishMessageAsync(greetingMessage, addHeaders);

                chatRoom.Messages.Add(greetingMessage);
            }
            return(new ObjectResult(await result.Success(chatRoom)));
        }