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