Exemple #1
0
        public virtual ISqlTransactionalOutboxItem <TUniqueIdentifier> CreateNewOutboxItem(
            string publishingTarget,
            TPayload publishingPayload,
            string?fifoGroupingIdentifier = null
            )
        {
            //Validate key required values that are always user provided in this one place...
            publishingTarget.AssertNotNullOrWhiteSpace(nameof(publishingTarget));
            publishingPayload.AssertNotNull(nameof(publishingPayload));

            //Serialize the Payload for Storage with our Outbox Item...
            var serializedPayload = PayloadSerializer.SerializePayload(publishingPayload);

            //Now we can create the fully validated Outbox Item
            var outboxItem = new OutboxProcessingItem <TUniqueIdentifier>()
            {
                //Initialize Internal Variables
                UniqueIdentifier       = UniqueIdentifierFactory.CreateUniqueIdentifier(),
                Status                 = OutboxItemStatus.Pending,
                FifoGroupingIdentifier = fifoGroupingIdentifier,
                PublishAttempts        = 0,
                CreatedDateTimeUtc     = DateTimeOffset.UtcNow,
                //Initialize client provided details
                PublishTarget = publishingTarget,
                Payload       = serializedPayload
            };

            return(outboxItem);
        }
Exemple #2
0
        public virtual ISqlTransactionalOutboxItem <TUniqueIdentifier> CreateExistingOutboxItem(
            TUniqueIdentifier uniqueIdentifier,
            DateTimeOffset createdDateTimeUtc,
            string status,
            string fifoGroupingIdentifier,
            int publishAttempts,
            string publishTarget,
            string serializedPayload
            )
        {
            uniqueIdentifier.AssertNotNull(nameof(uniqueIdentifier));

            if (createdDateTimeUtc == default)
            {
                AssertInvalidArgument(nameof(createdDateTimeUtc), createdDateTimeUtc.ToString(CultureInfo.InvariantCulture));
            }

            if (publishAttempts < 0)
            {
                AssertInvalidArgument(nameof(publishAttempts), publishAttempts.ToString());
            }


            //Validate key required values that are always user provided in this one place...
            publishTarget.AssertNotNullOrWhiteSpace(nameof(publishTarget));
            serializedPayload.AssertNotNullOrWhiteSpace(nameof(serializedPayload));

            //Now we can create the fully validated Outbox Item
            var outboxItem = new OutboxProcessingItem <TUniqueIdentifier>()
            {
                //Initialize Internal Variables
                UniqueIdentifier       = uniqueIdentifier,
                FifoGroupingIdentifier = fifoGroupingIdentifier,
                Status             = Enum.Parse <OutboxItemStatus>(status),
                PublishAttempts    = publishAttempts,
                CreatedDateTimeUtc = createdDateTimeUtc,
                //Initialize client provided details
                PublishTarget = publishTarget,
                Payload       = serializedPayload
            };

            return(outboxItem);
        }