public void ImportNewVersion(ApiVersionInfo newswaggerdoc) { var last = GetLastVersion(); if (last==null||last.md5!=newswaggerdoc.md5) { File.WriteAllText(basepath + "/"+filefolder + "/swagger" + newswaggerdoc.md5 + ".json", JsonConvert.SerializeObject(newswaggerdoc)); //Append new changelogs string changelog =newswaggerdoc.GenDateTime.ToString()+"\r\n"+ newswaggerdoc.ChangeLogs + "\r\n"; File.AppendAllText(basepath + "/"+filefolder + "/changelogs.json", changelog); } }
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var _swaggerstore = IocManager.Instance.Resolve<ISwaggerStore>(); var setting = Its.Configuration.Settings.Get<Config.SwaggerToolSettings>(); //using refletions to internal var swaggerProvider = (ISwaggerProvider)_config.GetType().GetMethod("GetSwaggerProvider", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).Invoke(_config, new object[] { request }); var rootUrl = (string)_config.GetType().GetMethod("GetRootUrl", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).Invoke(_config, new object[] { request }); var apiVersion = request.GetRouteData().Values["apiVersion"].ToString(); try { var swaggerDoc = swaggerProvider.GetSwagger(rootUrl, apiVersion); var last = _swaggerstore.GetLastVersion(); ApiVersionInfo info = new ApiVersionInfo(); info.GenDateTime = DateTime.Now.ToString(); info.SwaggerDoc = JsonConvert.SerializeObject(swaggerDoc, Formatting.Indented, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore, Converters = new[] { new VendorExtensionsConverter() } }); var md5 = MD5.Create(); using (var stream =new MemoryStream(Encoding.UTF8.GetBytes(info.SwaggerDoc))) { info.md5 = BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", ""); } if (last!=null) { SwaggerDiff diff = new SwaggerDiff(); var re= diff.Diff(info.SwaggerDoc, last.SwaggerDoc); //info.BackwardsCompatible = re.Item2; info.ChangeLogs = FormatChangelogDesc(re); } _swaggerstore.ImportNewVersion(info); var content =new StringContent(_swaggerstore.GetChangeLogInfo()); return TaskFor(new HttpResponseMessage { Content = content }); } catch (UnknownApiVersion ex) { return TaskFor(request.CreateErrorResponse(HttpStatusCode.NotFound, ex)); } }