using System; using System.Collections.Generic; using System.IO; using System.Linq; using Sers.Core.Module.Api.ApiDesc; using Sers.Gover.Base; using Sers.Gover.Base.Model; using Vit.Core.Module.Log; using Vit.Core.Util.Common; using Vit.Extensions; namespace Sers.Gover.Persistence { public class Persistence_ApiDesc { static string GetFilePath(string jsonFileName) { foreach (char invalidChar in Path.GetInvalidFileNameChars()) jsonFileName = jsonFileName.Replace(invalidChar, '_'); return CommonHelp.GetAbsPath(new[] { "Data", "Sers", "Gover", "ApiDesc", jsonFileName }); } /// /// 持久化ApiStation所有ApiDesc(demo: /Data/Sers/Gover/ApiDesc/_Sys_.json) /// /// public static void ApiDesc_SaveApiStationToJsonFile(ApiStationData data) { try { var filePath = GetFilePath(data.stationName + ".json"); var apiDescs = data.apiServices.Values.Select(m => m.apiDesc).ToList(); if (apiDescs.Count == 0) { if(File.Exists(filePath)) File.Delete(filePath); } else { var fileContent = apiDescs.SerializeToBytes(); Directory.CreateDirectory(Path.GetDirectoryName(filePath)); File.WriteAllBytes(filePath, fileContent); } } catch (System.Exception ex) { Logger.Error(ex); } } public static void ApiDesc_LoadAllFromJsonFile(ApiStationMng apiStationMng) { try { var foldPath = CommonHelp.GetAbsPath(new[] { "Data", "Sers", "Gover", "ApiDesc" }); if (!Directory.Exists(foldPath)) return; string[] files = Directory.GetFiles(foldPath, "*.json"); foreach (string filePath in files) { try { ArraySegment fileContent = File.ReadAllBytes(filePath).BytesToArraySegmentByte(); var apiDescs = fileContent.DeserializeFromArraySegmentByte>(); foreach (var apiDesc in apiDescs) { apiStationMng.ApiStation_GetOrAddByRoute(apiDesc.route)?.ApiService_GetOrAdd(apiDesc); } } catch (Exception ex) { Logger.Error(ex); } } } catch (Exception ex) { Logger.Error(ex); } } } }