示例#1
0
        private void Sender(ServiceCode service, string from, string to, string subject, string message)
        {
            var messageRequest = new MessageRequestModel()
            {
                From    = from,
                To      = to,
                Message = message,
                Subject = subject,
                Brand   = _xnotifiSettings.Value.Brand
            };

            var gateway = GetGateway(service);

            gateway.Password = _generator.Decrypt(gateway.Password).Result;
            var application = GetCreateApplication(_xnotifiSettings.Value.Brand, _xnotifiSettings.Value.ClientId);

            var messager = (_xnotifiSettings.Value.Development)? "Local Dev." : _messageAdapter.Send(messageRequest, gateway);

            var requestLog = new RequestModel()
            {
                ApplicationId = application.ApplicationId,
                GatewayId     = gateway.GatewayId,
                Service       = ServiceCode.Email,
                Recipients    = 1,
                Cost          = 0.00m,
                Response      = messager,
                DateCreated   = DateTime.UtcNow
            };

            _requestService.Create(requestLog);
        }
        public async Task SendMessage_Happy()
        {
            var message = new MessageRequestModel
            {
                Text       = "banaismailde",
                ToUserName = "******"
            };

            var messageService = new Mock <IMessageService>();
            var controller     = new MessagesController(messageService.Object);
            var userName       = "******";
            var user           = new ClaimsPrincipal(new GenericIdentity(userName));

            controller.ControllerContext = new ControllerContext()
            {
                HttpContext = new DefaultHttpContext()
                {
                    User = user
                }
            };

            OkResult result = await controller.Post(message) as OkResult;

            messageService.Verify(x => x.SendMessage(userName, message.ToUserName, message.Text));
            Assert.NotNull(result);
        }
        public async Task <ActionResult <MessageRequestModel> > CreateMessage([FromBody] MessageRequestModel model)
        {
            var sha256    = SHA256.Create();
            var hashBytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(model.Message));
            var hash      = BitConverter.ToString(hashBytes).Replace("-", string.Empty).ToLower();

            model.Digest = hash;

            if (!await this._repo.HashExistsAsync(hash))
            {
                this._logger.LogInformation("Storing new message into data storage: {0}.", model.Message);

                var dto = this._mapper.Map <HashDto>(model);
                await this._repo.AddHashAsync(dto);

                if (!await this._repo.SaveChangesAsync())
                {
                    throw new DataException("Hash cannot be saved to database.");
                }
            }

            this._logger.LogInformation("Request succeeded for message {0}.", model.Message);

            return(this.Ok(model));
        }
        // POST api/<controller>
        public async Task <IHttpActionResult> messagerequest(MessageRequestModel MM)
        {
            try
            {
                ResultClassToken result = new ResultClassToken();

                var userdata = ApiMessage.messagerequest(MM);
                if (userdata != null)
                {
                    result.Code = (int)HttpStatusCode.OK;
                    result.Msg  = ap.Success;
                }
                else
                {
                    result.Code = (int)HttpStatusCode.NonAuthoritativeInformation;
                    result.Msg  = ap.GlobalError;
                }
                if (updatetoken)
                {
                    result.AccessToken = accessToken;
                }
                else
                {
                    result.AccessToken = "";
                }
                return(Ok(result));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public async Task <MessageResponseModel> Post(MessageRequestModel model)
        {
            var messageIds = new List <Guid>();

            foreach (var channelId in model.ChannelIds)
            {
                var dbModel = new Message
                {
                    MessageId     = Guid.NewGuid(),
                    FromChannelId = User.Identity.Name,
                    ChannelId     = channelId,
                    Delivered     = false,
                    MessageString = model.MessageString,
                    Type          = model.Type,
                    ExpiresAt     = DateTime.UtcNow.AddDays(1),
                    CreatedAt     = DateTime.UtcNow
                };
                await _messageRepository.SaveMessageAsync(dbModel);

                await _messageHubContext.Clients.Group(channelId).SendAsync("broadcast", dbModel);

                messageIds.Add(dbModel.MessageId);
            }
            return(new MessageResponseModel {
                MessageIds = messageIds
            });
        }
示例#6
0
        public async Task <IActionResult> Post([FromBody] MessageRequestModel message)
        {
            string sendingUserName = User.Identity.Name;
            await _messageService.SendMessage(sendingUserName, message.ToUserName, message.Text);

            return(Ok());
            //return Created();
        }
示例#7
0
        public IActionResult Push([FromBody] MessageRequestModel model)
        {
            ReturnResult result = new ReturnResult();

            messageService.Push(model.Topic, model.Content);
            result.ReturnMsg = messageService.ReturnMsg;
            result.Status    = messageService.IsSuccess ? "ok" : "error";
            return(Json(result));
        }
示例#8
0
        public ResponseModel SendMessage(MessageRequestModel message)
        {
            var _sessionid = _distributedCache.GetString(message.UserId);

            if (string.IsNullOrWhiteSpace(_sessionid))
            {
                _sessionid = _assistantService.CreateSession(_assistantId).Result.SessionId;

                _distributedCache.SetString(message.UserId, _sessionid, new DistributedCacheEntryOptions()
                {
                    SlidingExpiration = new TimeSpan(00, 4, 00)
                });
            }

            var messageObj = new IBM.Watson.Assistant.v2.Model.MessageInput()
            {
                Text = message.Text
            };

            MessageContextSkills skills = new MessageContextSkills();
            MessageContextSkill  skill  = new MessageContextSkill
            {
                UserDefined = new Dictionary <string, object>()
            };

            if (message.ContextVariables != null)
            {
                foreach (var item in message.ContextVariables)
                {
                    skill.UserDefined.Add(item.Key, item.Value);
                }
            }

            skills.Add("main skill", skill);

            var MessageContext = new IBM.Watson.Assistant.v2.Model.MessageContext()
            {
                Global = new MessageContextGlobal()
                {
                    System = new MessageContextGlobalSystem()
                    {
                        UserId   = message.UserId,
                        Timezone = "GMT3"
                    }
                },
                Skills = skills
            };

            var result = _assistantService.Message(_assistantId, _sessionid, messageObj, MessageContext);

            var response = Newtonsoft.Json.JsonConvert.DeserializeObject <ResponseModel>(result.Response);

            return(response);
        }
示例#9
0
        /// <summary>
        /// Recebe uma mensagem da Blip e envia para o Watson
        /// </summary>
        /// <param name="message">Padrão da mensagem que a Blip envia</param>
        /// <returns></returns>
        public async Task <string> PostAsync(MessageViewModel message)
        {
            message.Content = message.Content.Replace("\n", " ").Replace("\t", " ").Replace("\r", " ");

            //O Watson espera algumas variaveis de contexto que podemos informar para facilitar o fluxo da conversa.
            Dictionary <string, string> contextVariables = new Dictionary <string, string>
            {
                { "cpf_usuario", null },
                { "nome_usuario", null },
                { "telefone_usuario", null }
            };

            MessageRequestModel messageRequestWatson = new MessageRequestModel()
            {
                Text             = message.Content,
                UserId           = "UserId_" + message.From.Split('@')[0].TrimStart('5'),
                ContextVariables = contextVariables
            };

            var retorno = _watsonBot.SendMessage(messageRequestWatson);

            //Pausa no fluxo do Watson para buscar uma informação na API, depois volta para o Watson
            if (retorno.Output.Actions != null && retorno.Output.Actions.Any())
            {
                foreach (var item in retorno.Output.Actions)
                {
                    switch (item.Name)
                    {
                    case "actionNameABC":

                        break;

                    case "actionNameXYZ":
                        if (retorno.Output.Generic != null && retorno.Output.Generic.Any())
                        {
                            //Envia uma mensagem para a Blip (WhatsApp)
                            await SendMessageBlip(message, retorno);
                        }

                        contextVariables.Add("novaVariavel", "lorem ipsum");

                        messageRequestWatson.ContextVariables = contextVariables;
                        retorno = _watsonBot.SendMessage(messageRequestWatson);
                        break;
                    }
                }
            }

            await SendMessageBlip(message, retorno);

            return("");
        }
示例#10
0
        public IActionResult Pull([FromBody] MessageRequestModel model)
        {
            ReturnJsonResult <Message> result = new ReturnJsonResult <Message>();

            LockControl.mutex.WaitOne();
            Message message = messageService.Pull(model.Topic);

            LockControl.mutex.ReleaseMutex();
            result.ReturnMsg = messageService.ReturnMsg;
            result.Status    = messageService.IsSuccess ? "ok" : "error";
            result.Result    = message;
            return(Json(result));
        }
示例#11
0
        public string Send(MessageRequestModel message, GatewayModel gateway)
        {
            var serviceUrl = gateway.ServiceUrl
                             .Replace("#username", gateway.Username)
                             .Replace("#password", gateway.Password)
                             .Replace("#from", message.From)
                             .Replace("#to", message.To)
                             .Replace("#subject", message.Subject)
                             .Replace("#message", message.Message)
                             .Replace("#brand", message.Brand);

            return(XNotifiRequest.Send(serviceUrl));
        }
示例#12
0
        public async Task <IHttpActionResult> SendMessage(MessageRequestModel request)
        {
            try
            {
                _messageQueue.Send(request.Message, MessageQueueTransactionType.Automatic);

                //Get the message that has been send to the queue.
                return(await Task.FromResult(Created(_privateQueue, request)));
            }
            catch (Exception e)
            {
                return(BadRequest($"{e}"));
            }
        }
示例#13
0
        public MessageResponseModel Send(string clientId, string accessKey, ServiceCode service, string from, string to, string message, string subject = "", string brand = "")
        {
            var model = new MessageRequestModel()
            {
                ClientId   = clientId,
                AccesssKey = accessKey,
                Service    = service,
                From       = from,
                To         = to,
                Message    = message,
                Subject    = subject,
                Brand      = brand
            };

            return(Messager(model));
        }
示例#14
0
        public HttpResponseMessage Get([FromUri] MessageRequestModel model)
        {
            if (model == null)
            {
                model = new MessageRequestModel();
            }
            var access = UserRights.V2Login(Db, Request);

            if (access.HasErrors)
            {
                return(Request.CreateErrorResponse(access.ErrorCode, access.ErrorMessage));
            }
            var result = MessageLayer.GetMessagesFromData(CmsDb, access.Session.record_id, model);

            return(Request.CreateResponse(HttpStatusCode.OK, result));
        }
示例#15
0
        /// <summary>
        /// Get chat conversation list based on the sender and receiver id.
        /// </summary>
        /// <param name="requestModel">
        ///     SenderId: Current loggedin UserId
        ///     ReceiverId: Selected User's UserId from chat box.
        /// </param>
        /// <returns>Return list of conversations</returns>
        public ApiResponse GetChatList(MessageRequestModel requestModel)
        {
            ApiResponse response = new ApiResponse();
            var         chatList = GetEntityList <Message>("GetChatList", new List <SearchValueData>
            {
                new SearchValueData {
                    Name = "SenderId", Value = requestModel.SenderId.ToString()
                },
                new SearchValueData {
                    Name = "ReceiverId", Value = requestModel.ReceiverId.ToString()
                }
            });

            response      = Common.GenerateResponse(Resource.Success, StatusCodes.StatusCode200, true);
            response.Data = chatList.OrderBy(q => q.CreatedDate);
            return(response);
        }
        public async Task SendAsync(MessageRequestModel model)
        {
            var messageIds = new List <Guid>();

            foreach (var channelId in model.ChannelIds)
            {
                var dbModel = new Message
                {
                    MessageId     = Guid.NewGuid(),
                    FromChannelId = Context.User.Identity.Name,
                    ChannelId     = channelId,
                    Delivered     = false,
                    MessageString = model.MessageString,
                    Type          = model.Type,
                    ExpiresAt     = DateTime.UtcNow.AddDays(1),
                    CreatedAt     = DateTime.UtcNow
                };
                await _messageRepository.SaveMessageAsync(dbModel);

                messageIds.Add(dbModel.MessageId);
            }
        }
示例#17
0
        public async Task SeenMessageShouldGenerateHashButNotSaveToDatabase()
        {
            var message      = "foo";
            var expectedHash = "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae";
            var saved        = false;

            var repo = new Mock <IServiceRepository>();

            repo.Setup(r => r.HashExistsAsync(It.IsAny <string>())).ReturnsAsync(true);
            repo.Setup(r => r.SaveChangesAsync()).Callback(() => saved = true).ReturnsAsync(true);
            var mapper = this.GetConfiguredMapper();
            var logger = Mock.Of <ILogger <MessageController> >();

            var request = new MessageRequestModel(message);

            var controller = new MessageController(repo.Object, mapper, logger);
            var response   = await controller.CreateMessage(request);

            var objectResult = Assert.IsType <OkObjectResult>(response.Result);
            var result       = Assert.IsType <MessageRequestModel>(objectResult.Value);

            Assert.Equal(expectedHash, result.Digest);
            Assert.False(saved);
        }
示例#18
0
 public MessageResponseModel Send(MessageRequestModel model)
 {
     return(Messager(model));
 }
        public ActionResult <List <MessageOutputModel> > GetFromTo(MessageRequestModel request)
        {
            RecipientType messageType = (RecipientType)request.MessageType;

            return(_repository.GetMessagesFromTo(request.SenderId, request.RecipientId, messageType));
        }
 public ActionResult <List <MessageOutputModel> > GetDialogue(MessageRequestModel request)
 {
     return(_repository.GetDialogue(request.SenderId, request.RecipientId));
 }
示例#21
0
        public static MessageResponseModel GetMessagesFromData(IbaCmsDbContext cmsDb, decimal ibaUserId, MessageRequestModel model)
        {
            var result = new MessageResponseModel();
            IQueryable <AppUserMessage> msgs;

            if (model.AppUserMessageId > 0)
            {
                msgs = cmsDb.AppUserMessages.Where(a => a.Id == model.AppUserMessageId).AsQueryable();
                result.TotalRecords = msgs.Count();
            }
            else
            {
                msgs = cmsDb.AppUserMessages.Where(a => a.DeviceOwner.IbaId == ibaUserId && a.Deleted == null && a.Message.SendDate < DateTime.UtcNow)
                       .Where(a => (model.From.HasValue && a.Created > model.From.Value) || !model.From.HasValue)
                       .OrderByDescending(a => a.Created)
                       .AsQueryable();
                result.TotalRecords = msgs.Count();
                if (model.Start > 0)
                {
                    msgs = msgs.Skip(model.Start);
                }
                if (model.Length <= 0)
                {
                    model.Length = DefaultPageSize;
                }
                msgs = msgs.Take(model.Length);
            }
            foreach (var msg in msgs.ToList())
            {
                var item = new AppUserMessagesResponseItem
                {
                    AppUserMessageId = msg.Id,
                    Title            = msg.Message.Title,
                    MessageType      = msg.Message.MessageType,
                    Text             = msg.Message.Text,
                    Url           = msg.Message.Url ?? "",
                    FormattedDate = msg.Message.SendDate.HasValue ? DateTime.SpecifyKind(msg.Message.SendDate.Value, DateTimeKind.Utc) :  DateTime.SpecifyKind(msg.Created, DateTimeKind.Utc)
                };
                if (msg.Deleted != null)
                {
                    item.Status = AppUserMessagesResponseStatus.Deleted;
                }
                else if (msg.Read != null)
                {
                    item.Status = AppUserMessagesResponseStatus.Read;
                }
                result.Messages.Add(item);
            }
            return(result);
        }
示例#22
0
        //从模板提取并生成批次发送
        //以接口方式调用
        /// <summary>
        /// 使用模板Id和特定Model填充发送数据
        /// </summary>
        /// <param name="requestModel"></param>
        /// <returns></returns>
        public int SendNotifyMsg(string requestModel)
        {
            var oModel = CommonLib.Helper.JsonDeserializeObject <EventMessage>(requestModel);
            var model  = new MessageRequestModel();

            //var model = CommonLib.Helper.JsonDeserializeObject<MessageRequestModel>(requestModel);

            switch (oModel.EventId)
            {
            case 1:
                break;

            case 2:    //销售后
                break;

            case 4:    //绑定优惠券
                var cmodel = CommonLib.Helper.JsonDeserializeObject <AfterBindCoupon>(oModel.SpecModel);

                model.Id        = cmodel.EventId;
                model.EventName = "【优惠券绑定提醒】用户" + cmodel.AccId + "绑定优惠券" + cmodel.CouponDesc;
                model.SpecModel = oModel.SpecModel;
                model.AccId     = cmodel.AccId;

                break;

            case 5:    //实物订单发货时
                var gmodel = CommonLib.Helper.JsonDeserializeObject <AfterExpress>(oModel.SpecModel);

                model.Id        = gmodel.EventId;
                model.EventName = "【实物发货提醒】用户" + gmodel.AccId + "购买的" + gmodel.GoodsName + "发货";
                model.SpecModel = oModel.SpecModel;
                model.AccId     = gmodel.AccId;
                break;

            case 6:    //反馈转为需求时
                var imodel = CommonLib.Helper.JsonDeserializeObject <AfterImportReq>(oModel.SpecModel);

                model.Id        = imodel.EventId;
                model.EventName = "【反馈转需求提醒】需求" + imodel.RequirementDesc + " -来自用户" + imodel.AccId;
                model.SpecModel = oModel.SpecModel;
                model.AccId     = imodel.AccId;
                break;

            case 7:    //需求开发完成后
                var iamodel = CommonLib.Helper.JsonDeserializeObject <AfterImportReq>(oModel.SpecModel);

                model.Id        = iamodel.EventId;
                model.EventName = "【需求完成提醒】需求【" + iamodel.RequirementDesc + "】已完成 -来自用户" + iamodel.AccId;
                model.SpecModel = oModel.SpecModel;
                model.AccId     = iamodel.AccId;
                break;

            case 9:     //订单支付成功后
                var ordModel = CommonLib.Helper.JsonDeserializeObject <AfterOrderSuccess>(oModel.SpecModel);

                switch (ordModel.OrderType)
                {
                case 1:        //虚拟商品
                               //对商品类型做例外判断

                    //高级版
                    if (ordModel.BusId == 82)
                    {
                        model.Id = 101;
                    }
                    //手机橱窗
                    else if (ordModel.BusId == 6)
                    {
                        model.Id = 102;
                    }
                    //短信包
                    else if (ordModel.BusId == 36 || ordModel.BusId == 44 || ordModel.BusId == 45 || ordModel.BusId == 81)
                    {
                        model.Id = 103;
                    }
                    //行业版
                    else if (ordModel.BusId >= 67 && ordModel.BusId <= 80)
                    {
                        model.Id = 107;
                    }
                    //连锁版
                    //else if (ordModel.BusId == 1)
                    //{
                    //    model.Id = 108;
                    //}
                    break;

                case 2:        //实物商品
                    model.Id = 104;
                    break;

                case 3:        //京东订单
                    model.Id = 105;
                    break;

                case 4:        //话费充值
                    model.Id = 106;
                    break;
                }


                model.EventName = "【订单购买成功提醒】用户" + ordModel.AccId + "购买【" + ordModel.OrderName + "】成功";
                model.SpecModel = oModel.SpecModel;
                model.AccId     = ordModel.AccId;

                break;
            }

            return(MessageTemplateControl.SendNotifyMsg(model.Id, model.EventName, model.SpecModel, model.AccId, 0, model.EventName + "触发"));
        }
        public dynamic messagerequest(MessageRequestModel MM)
        {
            using (LystenEntities db = new LystenEntities())
            {
                MessageRequest MR = new MessageRequest();
                if (db.MessageRequests.Any(x => x.FromUserId == MM.MRUserId && x.ToUserId == MM.UserId || x.FromUserId == MM.UserId && x.ToUserId == MM.MRUserId))
                {
                    MR = db.MessageRequests.Where(x => x.FromUserId == MM.MRUserId && x.ToUserId == MM.UserId || x.FromUserId == MM.UserId && x.ToUserId == MM.MRUserId).FirstOrDefault();
                    if (MM.IsAccept == 0)
                    {
                        MR.IsAccept        = false;
                        MR.IsReject        = true;
                        MR.IsRequested     = false;
                        db.Entry(MR).State = EntityState.Modified;
                        db.SaveChanges();

                        if (MR.User_Master.DeviceToken != null)
                        {
                            if (MR.User_Master.DeviceType == "Android")
                            {
                                Helpers.NotificationHelper.sendMsgCallAccept(0, MR.ToUserId.Value, MR.User_Master.DeviceToken);
                            }
                            else
                            {
                                sendMsgCallAccept(0, MR.ToUserId.Value, MR.User_Master.DeviceToken);
                            }
                        }
                        else if (MR.User_Master1.DeviceToken != null)
                        {
                            if (MR.User_Master1.DeviceType == "Android")
                            {
                                Helpers.NotificationHelper.sendMsgCallAccept(0, MR.ToUserId.Value, MR.User_Master1.DeviceToken);
                            }
                            else
                            {
                                sendMsgCallAccept(0, MR.ToUserId.Value, MR.User_Master1.DeviceToken);
                            }
                        }
                    }
                    else
                    {
                        MR.IsAccept        = true;
                        MR.IsReject        = false;
                        MR.IsRequested     = false;
                        db.Entry(MR).State = EntityState.Modified;
                        db.SaveChanges();
                        if (MR.User_Master.DeviceToken != null)
                        {
                            if (MR.User_Master.DeviceType == "Android")
                            {
                                Helpers.NotificationHelper.sendMsgCallAccept(0, MR.ToUserId.Value, MR.User_Master.DeviceToken);
                            }
                            else
                            {
                                sendMsgCallAccept(0, MR.ToUserId.Value, MR.User_Master.DeviceToken);
                            }
                        }
                        else if (MR.User_Master1.DeviceToken != null)
                        {
                            if (MR.User_Master1.DeviceType == "Android")
                            {
                                Helpers.NotificationHelper.sendMsgCallAccept(0, MR.ToUserId.Value, MR.User_Master1.DeviceToken);
                            }
                            else
                            {
                                sendMsgCallAccept(0, MR.ToUserId.Value, MR.User_Master1.DeviceToken);
                            }
                        }
                    }
                }
                else
                {
                    if (MM.IsAccept == 0)
                    {
                        MR.FromUserId  = MM.MRUserId;
                        MR.ToUserId    = MM.UserId;
                        MR.IsAccept    = false;
                        MR.IsReject    = true;
                        MR.IsRequested = false;
                        db.MessageRequests.Add(MR);
                        db.SaveChanges();
                        if (MR.User_Master.DeviceToken != null)
                        {
                            if (MR.User_Master.DeviceType == "Android")
                            {
                                Helpers.NotificationHelper.sendMsgCallAccept(0, MR.ToUserId.Value, MR.User_Master.DeviceToken);
                            }
                            else
                            {
                                sendMsgCallAccept(0, MR.ToUserId.Value, MR.User_Master.DeviceToken);
                            }
                        }
                        else if (MR.User_Master1.DeviceToken != null)
                        {
                            if (MR.User_Master1.DeviceType == "Android")
                            {
                                Helpers.NotificationHelper.sendMsgCallAccept(0, MR.ToUserId.Value, MR.User_Master1.DeviceToken);
                            }
                            else
                            {
                                sendMsgCallAccept(0, MR.ToUserId.Value, MR.User_Master1.DeviceToken);
                            }
                        }
                    }
                    else
                    {
                        MR.FromUserId  = MM.MRUserId;
                        MR.ToUserId    = MM.UserId;
                        MR.IsAccept    = false;
                        MR.IsReject    = true;
                        MR.IsRequested = false;
                        db.MessageRequests.Add(MR);
                        db.SaveChanges();
                        if (MR.User_Master.DeviceToken != null)
                        {
                            if (MR.User_Master.DeviceType == "Android")
                            {
                                Helpers.NotificationHelper.sendMsgCallAccept(0, MR.ToUserId.Value, MR.User_Master.DeviceToken);
                            }
                            else
                            {
                                sendMsgCallAccept(0, MR.ToUserId.Value, MR.User_Master.DeviceToken);
                            }
                        }
                        else if (MR.User_Master1.DeviceToken != null)
                        {
                            if (MR.User_Master1.DeviceType == "Android")
                            {
                                Helpers.NotificationHelper.sendMsgCallAccept(0, MR.ToUserId.Value, MR.User_Master1.DeviceToken);
                            }
                            else
                            {
                                sendMsgCallAccept(0, MR.ToUserId.Value, MR.User_Master1.DeviceToken);
                            }
                        }
                    }
                }
                return(MR);
            }
        }
示例#24
0
 public ApiResponse GetChatList(MessageRequestModel requestModel)
 {
     _userDataProvider = new UserDataProvider();
     return(_userDataProvider.GetChatList(requestModel));
 }
示例#25
0
        public SuccessfullOperated<MessageRequestModel> SendMessageToFriendship(int friendshipId, string authorId, MessageRequestModel model)
        {
            var successfullOperated = new SuccessfullOperated<MessageRequestModel>()
            {
                IsSuccessfull = false,
                Element = model
            };

            var friendship = this.data.Friendships
                .All()
                .FirstOrDefault(f => f.Id == friendshipId);

            if (friendship == null)
            {
                return successfullOperated;
            }

            var author = this.data.Users
                .All()
                .FirstOrDefault(u => u.Id == authorId);

            if (author == null)
            {
                return successfullOperated;
            }

            var messageForDb = new Message()
            {
                Author = author,
                Content = model.Content,
                SentOn = DateTime.Now
            };

            try
            {
                model.Id = messageForDb.Id;

                friendship.Messages.Add(messageForDb);
                this.data.SaveChanges();

                successfullOperated.IsSuccessfull = true;

                return successfullOperated;
            }
            catch (Exception)
            {
                return successfullOperated;
            }
        }
示例#26
0
        public HttpResponseMessage SendEmailMessage(MessageRequestModel messageVm)
        {
            var response = new ApiResultViewModel <List <dynamic> >();

            if (ModelState.IsValid)
            {
                try
                {
                    var sb = new List <string> ();

                    var addresses = messageVm.Receipients ?? new string[] { };
                    sb.AddRange(addresses.Where(email => email.ValidEmail()));

                    if (messageVm.Tocustomers)
                    {
                        var allCustomers = _userMgr.CustomersEmail().ToList();

                        allCustomers.ForEach(c =>
                        {
                            if (!sb.Contains(c))
                            {
                                sb.Add(c);
                            }
                        });
                    }

                    if (sb.Count <= 0)
                    {
                        response.errorMessage = "No receipient email address was found. Please confirm and try again.";
                        response.errorStatus  = true;
                        return(Request.CreateResponse(response));
                    }

                    Task.Factory.StartNew(() =>
                    {
                        foreach (var item in sb)
                        {
                            _mailSvc.SendMail(item, IposConfig.AutomatedFromEmail, messageVm.Subject, messageVm.Message, IposConfig.AppName);
                        }
                    });

                    response.message = "Message has been sent successfully.";
                    return(Request.CreateResponse(response));
                }
                catch (Exception e)
                {
                    _logger.Log(e);
#if DEBUG
                    response.errorMessage = e.Message;
                    response.errorStatus  = true;
#else
                    response.errorMessage = "An error occurred while working, Please try again or contact support.";
                    response.errorStatus  = true;
#endif
                    return(Request.CreateResponse(response));
                }
            }

            response.errorMessage = "Incomplete message request. Please confirm try again.";
            response.errorStatus  = true;
            return(Request.CreateResponse(response));
        }
示例#27
0
        private MessageResponseModel Messager(MessageRequestModel model)
        {
            if (!ModelState.IsValid)
            {
                return(new MessageResponseModel()
                {
                    Error = Data.Enums.MessageStatus.InvalidFields,
                    Message = "Required parameter(s) are missing"
                });
            }

            if (!model.Service.Equals(ServiceCode.Sms) && !model.Service.Equals(ServiceCode.Email))
            {
                return(new MessageResponseModel()
                {
                    Error = Data.Enums.MessageStatus.InvalidService,
                    Message = "Invalid service request"
                });
            }

            var gateway = _gatewayService.List()
                          .FirstOrDefault(x => x.ServiceCode == model.Service && x.IsActive == true);

            if (gateway == null)
            {
                return(new MessageResponseModel()
                {
                    Error = Data.Enums.MessageStatus.InactiveGateway,
                    Message = "No active gateway available"
                });
            }

            var client = _clientService.List().ToList().FirstOrDefault(x =>
                                                                       x.ClientId.Equals(model.ClientId) && x.AccessKey.Equals(model.AccesssKey) && x.IsActive == true);

            if (client == null)
            {
                return(new MessageResponseModel()
                {
                    Error = Data.Enums.MessageStatus.InvalidApplication,
                    Message = "No client record is found"
                });
            }

            var existingApplication = _applicationService.List()
                                      .FirstOrDefault(x => x.ClientId == model.ClientId && x.Name.ToLower().Equals(model.AppName.ToLower()) && x.IsActive == true);

            string applicationId;
            string applicationName;

            if (existingApplication == null)
            {
                var applicationModel = new ApplicationModel()
                {
                    ClientId    = model.ClientId,
                    Name        = model.AppName,
                    DateCreated = DateTime.UtcNow
                };
                var newApplication = _applicationService.Create(applicationModel).Result;
                applicationId   = newApplication.ApplicationId;
                applicationName = newApplication.Name;
            }
            else
            {
                applicationId   = existingApplication.ApplicationId;
                applicationName = existingApplication.Name;
            }

            var price        = (model.Service == ServiceCode.Sms) ? _priceSettings.Value.SmsPrice : _priceSettings.Value.EmailPrice;
            var destinations = model.To.Split(',');
            var cost         = destinations.Length * price;



            if (client.Balance < cost)
            {
                return(new MessageResponseModel()
                {
                    Error = Data.Enums.MessageStatus.InsufficientCredit,
                    Message = "Insufficient credit"
                });
            }

            gateway.Password = _generator.Decrypt(gateway.Password).Result;

            try
            {
                //var gatewayResponse = "local testing";

                var gatewayResponse = _messageAdapter.Send(model, gateway);


                client.Balance = client.Balance - cost;
                _clientService.Update(client);

                var request = new RequestModel()
                {
                    ApplicationId = applicationId,
                    GatewayId     = gateway.GatewayId,
                    Recipients    = destinations.Length,
                    Cost          = cost,
                    Response      = gatewayResponse,
                    DateCreated   = DateTime.UtcNow
                };

                var lastRequest = _requestService.Create(request).Result;

                return(new MessageResponseModel()
                {
                    Error = Data.Enums.MessageStatus.MessageSubmitted,
                    Message = "Message(s) submited successfully",
                    Reference = lastRequest.RequestId
                });
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                //throw;
            }



            var response = new MessageResponseModel()
            {
                Error   = Data.Enums.MessageStatus.InternalServerError,
                Message = "Internal server error"
            };

            return(response);
        }
示例#28
0
 public void Add(MessageRequestModel messageRequestModel)
 {
     _wcfDemoDbContext.Set <MessageRequestModel>().Add(messageRequestModel);
     _wcfDemoDbContext.SaveChanges();
 }
 public async Task <ActionResult <bool> > Add(MessageRequestModel model) =>
 await messageService.Add(model.SenderId, model.SenderUsername, model.Title, model.Content);