コード例 #1
0
        public async Task <IActionResult> GetSchemas([FromRoute][BindRequired] string applicationId)
        {
            var data  = (await _store.GetByApplicationId(applicationId)).AsList();
            var count = data.Count;
            var page  = new Page <SchemaVersion>(data, count, 0, count, count);
            var slice = new Operation <IPage <SchemaVersion> >(page);

            Response.MaybeEnvelope(Request, _apiOptions.CurrentValue.JsonConversion, slice.Data, slice.Errors, out var body);
            return(Ok(body));
        }
コード例 #2
0
        public async Task <VersionContext> FindByKeyAsync(string versionKey)
        {
            var versions = await _store.GetByApplicationId(_options.CurrentValue.ApplicationId);

            //
            // Match by revision:
            if (int.TryParse(versionKey, out var revision))
            {
                // ReSharper disable once PossibleMultipleEnumeration
                foreach (var version in versions)
                {
                    if (version.Revision == revision)
                    {
                        return(MatchedContext(version));
                    }
                }

                return(VersionContext.None);
            }

            //
            // Match by fingerprint:
            if (ulong.TryParse(versionKey, out var fingerprint))
            {
                // ReSharper disable once PossibleMultipleEnumeration
                foreach (var version in versions)
                {
                    if (version.Fingerprint == fingerprint)
                    {
                        return(MatchedContext(version));
                    }
                }

                return(VersionContext.None);
            }

            //
            // Resolve to latest version:
            // ReSharper disable once PossibleMultipleEnumeration
            var latest = versions.LastOrDefault();

            if (latest == null)
            {
                return(VersionContext.None);
            }

            return(MatchedContext(latest));
        }
コード例 #3
0
        public async Task <ApplicationVersion> DeriveApplicationVersion(string applicationId)
        {
            var current = await _schemas.GetByApplicationId(applicationId);

            // make a dictionary to order the hash lookup
            var manifest = current.OrderBy(x => x.Name).ToDictionary(k => k.Name, v => v.Fingerprint);

            // create a new application version that can be associated with an API version
            var hashes  = current.Select(x => x.Fingerprint).ToList();
            var version = new ApplicationVersion
            {
                ApplicationId = applicationId,
                Fingerprint   = ValueHash.ComputeHash(new { Fingerprints = hashes }),
                Manifest      = manifest
            };

            return(version);
        }