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