コード例 #1
0
        public async Task <IActionResult> SubmitEpicomPost([FromBody] SubmitEpicomPost command)
        {
            command.EpiComUserId = User.FindFirst(MerlinClaim.EpiComUserId).Value;
            command.IdSubmitted  = User.Identity.Name;

            await rules
            .EpiComUserIdMustBeInt()
            .Apply(command, ModelState);

            var epicomPostUrl = await readContext.Codes
                                .Where(code => code.CdType.Equals("FDENS") && code.CdValue.Equals("POST WEB SERVICE"))
                                .Select(code => code.DsDesc)
                                .FirstOrDefaultAsync();

            Uri epicomPostUri = new Uri(epicomPostUrl);

            com.epicomfl.PostsSoapClient c = new com.epicomfl.PostsSoapClient(com.epicomfl.PostsSoapClient.EndpointConfiguration.PostsSoap, epicomPostUrl, (epicomPostUri.Scheme.ToLower() == "https"));
            c.ClientCredentials.Windows.ClientCredential.Domain   = config["EPICOM_DOMAIN"];
            c.ClientCredentials.Windows.ClientCredential.UserName = config["EPICOM_UID"];
            c.ClientCredentials.Windows.ClientCredential.Password = config["EPICOM_PWD"];

            command.PendingPostId = await c.CreatePendingMessageAsync(
                command.TopicId,
                command.Title,
                command.Message,
                int.Parse(command.EpiComUserId));

            await service.Execute(command);

            var uri = Url.Action("Get", new { id = command.PendingPostId });

            //TODO:  Why does this return an empty object?
            //var post = await epicomRepository.GetEpicomPostDetails(command.PendingPostId.Value);

            return(Created(uri, command));
        }
コード例 #2
0
        public async Task Execute(SubmitEpicomPost command)
        {
            //var outbreak = await writeContext.Outbreak.FindAsync(command.OutbreakId);

            //outbreak.IdEpicomPending = command.PendingPostId;

            //await writeContext.SaveChangesAsync();

            var currentForumId = await outbreakEventsRepository.GetEventDescription(command.OutbreakId, "EPICOM_FORUM");

            var currentTopicId = await outbreakEventsRepository.GetEventDescription(command.OutbreakId, "EPICOM_TOPIC");

            var currentTitle = await outbreakEventsRepository.GetEventDescription(command.OutbreakId, "EPICOM_TITLE");


            List <String> chunks = new List <String>();
            int           os     = 0;

            while (os < command.Message.Length)
            {
                int s = Math.Min(1000, command.Message.Length - os);
                chunks.Add(command.Message.Substring(os, s));
                os += s;
            }

            var currentMessageBody = "";

            var message = await writeContext.OutbreakEvents
                          .Where(x => x.CdEventType.Equals("EPICOM_MESSAGE") && x.IdOutbreak == command.OutbreakId)
                          .OrderByDescending(x => x.IdKey)
                          .Select(x => new
            {
                sequenceId = x.IdSequence,
                desc       = x.DsDesc
            })
                          .ToListAsync();

            foreach (var m in message)
            {
                currentMessageBody = m.desc + currentMessageBody;
                if (m.sequenceId == 0)
                {
                    break;
                }
            }

            var EventId = (int)await sequenceGenerator.GetNextAsync(SequenceType.OutbreakEventId);

            OutbreakEvents PendingPostEvent = new OutbreakEvents
            {
                IdOutbreak  = command.OutbreakId,
                CdEventType = "EPICOM_PENDING_ID",
                IdEvent     = EventId,
                CdSubType   = "",
                DsDesc      = command.PendingPostId.ToString(),
                IdSequence  = 0,
                IdAdded     = command.IdSubmitted
            };

            if (!writeContext.OutbreakEvents.Any(outbreakEvent => (outbreakEvent.DsDesc.Equals(PendingPostEvent.DsDesc)) && (outbreakEvent.CdEventType.Equals(PendingPostEvent.CdEventType) && (outbreakEvent.IdOutbreak == PendingPostEvent.IdOutbreak))))
            {
                writeContext.OutbreakEvents.Add(PendingPostEvent);
            }

            if (!command.ForumId.ToString().Equals(currentForumId))
            {
                EventId = (int)await sequenceGenerator.GetNextAsync(SequenceType.OutbreakEventId);

                OutbreakEvents ForumEvent = new OutbreakEvents
                {
                    IdOutbreak  = command.OutbreakId,
                    CdEventType = "EPICOM_FORUM",
                    IdEvent     = EventId,
                    CdSubType   = "",
                    DsDesc      = command.ForumId.ToString(),
                    IdSequence  = 0,
                    IdAdded     = command.IdSubmitted
                };

                writeContext.OutbreakEvents.Add(ForumEvent);
            }

            if (!command.TopicId.ToString().Equals(currentTopicId))
            {
                EventId = (int)await sequenceGenerator.GetNextAsync(SequenceType.OutbreakEventId);

                OutbreakEvents TopicEvent = new OutbreakEvents
                {
                    IdOutbreak  = command.OutbreakId,
                    CdEventType = "EPICOM_TOPIC",
                    IdEvent     = EventId,
                    CdSubType   = "",
                    DsDesc      = command.TopicId.ToString(),
                    IdSequence  = 0,
                    IdAdded     = command.IdSubmitted
                };

                writeContext.OutbreakEvents.Add(TopicEvent);
            }


            if (!command.Title.Equals(currentTitle))
            {
                EventId = (int)await sequenceGenerator.GetNextAsync(SequenceType.OutbreakEventId);


                OutbreakEvents TitleEvent = new OutbreakEvents
                {
                    IdOutbreak  = command.OutbreakId,
                    CdEventType = "EPICOM_TITLE",
                    IdEvent     = EventId,
                    CdSubType   = "",
                    DsDesc      = command.Title,
                    IdSequence  = 0,
                    IdAdded     = command.IdSubmitted
                };

                writeContext.OutbreakEvents.Add(TitleEvent);
            }

            if (!String.IsNullOrEmpty(command.Message) && !command.Message.Equals(currentMessageBody))
            {
                int            sequence = 0;
                OutbreakEvents MessageEvent;
                var            EId = (int)await sequenceGenerator.GetNextAsync(SequenceType.OutbreakEventId);

                foreach (string chunk in chunks)
                {
                    MessageEvent = new OutbreakEvents
                    {
                        IdOutbreak  = command.OutbreakId,
                        CdEventType = "EPICOM_MESSAGE",
                        IdEvent     = EId,
                        CdSubType   = "",
                        DsDesc      = chunk,
                        IdSequence  = sequence,
                        IdAdded     = command.IdSubmitted
                    };

                    writeContext.OutbreakEvents.Add(MessageEvent);
                    sequence += 1;
                }
            }



            await writeContext.SaveChangesAsync();
        }