public async Task <IActionResult> Show([FromRoute] Guid id)
        {
            var message = await _directMessageService.GetDirectMessageByIdAsync(id);

            if (message == null)
            {
                return(NotFound());
            }
            return(Ok(new { Message = DirectMessageViewModel.FromEntity(message) }));
        }
        public IActionResult PostNotification([FromBody] DirectMessageViewModel directMessageInfo)
        {
            List <BL.Models.ErrorInfo> errorList = new List <BL.Models.ErrorInfo>();
            Guid directMessageId = Guid.NewGuid();

            var  recipient   = directMessageInfo.Recipient;
            Guid?toContactId = null;

            if (recipient != Guid.Empty)
            {
                Boolean noUsersFound = true;

                toContactId = _faciTechDbContext.Contact.Where(c => c.Id == recipient & c.Inactive == false).Select(c => c.Id).SingleOrDefault();

                if (toContactId == null)
                {
                    errorList.Add(new BL.Models.ErrorInfo
                    {
                        Description = "User not found - " + recipient
                    });
                    return(new ValidationErrorResult(new BL.Models.ApiResponse(BL.Models.ApiStatus.Error, null, errorList)));
                }
                else
                {
                    noUsersFound = false;

                    var directMessage = new DirectMessage()
                    {
                        Id            = directMessageId,
                        FromContactId = base._contactId,
                        ToContactId   = (Guid)toContactId,
                        Created       = DateTime.UtcNow,
                        CreatedBy     = base._userId,
                        Updated       = DateTime.UtcNow,
                        UpdatedBy     = base._userId,
                        Subject       = directMessageInfo.Subject,
                        Body          = directMessageInfo.Body
                    };
                    _faciTechDbContext.DirectMessage.Add(directMessage);

                    _faciTechDbContext.SaveChanges();
                    return(new ObjectCreatedResult("directMessage", directMessageId));
                }
            }
            else
            {
                errorList.Add(new BL.Models.ErrorInfo
                {
                    Code        = "ERR001",
                    Description = "No receipients provided in the notification request.",
                });
                return(new ValidationErrorResult(new BL.Models.ApiResponse(BL.Models.ApiStatus.Error, null, errorList)));
            }
        }
        public async Task <IActionResult> SendDirectMessage(SendDirectMessageDto sendDirectMessageDto)
        {
            sendDirectMessageDto.From = await GetAuthenticatedUserAccount();

            var result = await _directMessageService.SendDirectMessageAsync(sendDirectMessageDto);

            if (result.Failed)
            {
                return(BadRequest(new ValidationErrorResponse(result.Error)));
            }
            var vm = DirectMessageViewModel.FromEntity(result.Data);

            await _hubContext.Clients
            .User(result.Data.To.Id.ToString())
            .SendAsync(
                DirectMessageHub.DirectMessageReceivedMessage,
                vm
                );

            var url = Url.Link("GetDirectMessageById", new { id = result.Data.Id });

            return(Created(url, new { Message = vm }));
        }