Esempio n. 1
0
        public override void OnPut(string key, JObject document, JObject metadata, TransactionInformation transactionInformation)
        {
            if (VersioningContext.IsInVersioningContext)
            {
                return;
            }
            if (key.StartsWith("Raven/", StringComparison.InvariantCultureIgnoreCase))
            {
                return;
            }

            if (metadata.Value <string>(RavenDocumentRevisionStatus) == "Historical")
            {
                return;
            }

            var versioningConfiguration = GetDocumentVersioningConfiguration(metadata);

            if (versioningConfiguration.Exclude)
            {
                return;
            }


            using (VersioningContext.Enter())
            {
                var copyMetadata = new JObject(metadata);
                copyMetadata[RavenDocumentRevisionStatus] = JToken.FromObject("Historical");
                copyMetadata.Remove(RavenDocumentRevision);
                var parentRevision = metadata.Value <string>(RavenDocumentRevision);
                if (parentRevision != null)
                {
                    copyMetadata[RavenDocumentParentRevision] = key + "/revisions/" + parentRevision;
                    metadata[RavenDocumentParentRevision]     = key + "/revisions/" + parentRevision;
                }

                PutResult newDoc = Database.Put(key + "/revisions/", null, document, copyMetadata,
                                                transactionInformation);
                int revision = int.Parse(newDoc.Key.Split('/').Last());

                RemoveOldRevisions(key, revision, versioningConfiguration, transactionInformation);

                metadata[RavenDocumentRevisionStatus] = JToken.FromObject("Current");
                metadata[RavenDocumentRevision]       = JToken.FromObject(revision);
            }
        }
Esempio n. 2
0
        public Task RouteRequest(IOwinContext context, Func <Task> next)
        {
            var versionContext = new VersioningContext(context, _configuration, _traceFilter);

            if (context.GetFeature <IRequestRewriter>() == null)
            {
                context.SetFeature <IRequestRewriter>(versionContext);
            }

            context.SetFeature(versionContext);

            versionContext.RemoveVersionNumber(context);
            if (versionContext.IsVersioned)
            {
                _versionedAssetCount++;
            }

            return(next());
        }