| | |
| | | } |
| | | } |
| | | |
| | | var resources = await SaveResourcesAsync(models, traceId, rep); |
| | | var resources = await SaveResourcesAsync(models, rep); |
| | | |
| | | DynamicControllersHotPlug(resources, provider); |
| | | |
| | |
| | | /// <param name="traceId"></param> |
| | | /// <param name="rep"></param> |
| | | /// <returns></returns> |
| | | private static async Task<List<Resource>> SaveResourcesAsync(List<ResourceModel> models, string traceId, IRepository<Resource> rep = null) |
| | | private static async Task<List<Resource>> SaveResourcesAsync(List<ResourceModel> models, IRepository<Resource> rep = null) |
| | | { |
| | | rep = rep ?? Db.GetRepository<Resource>(); |
| | | var resources = await rep.AsQueryable() |
| | |
| | | if (resource == null) |
| | | { |
| | | resource = new Resource(); |
| | | resource.Id = IDGen.NextID(); |
| | | resource.CreatedTime = DateTimeOffset.Now; |
| | | model.Adapt(resource); |
| | | await rep.InsertAsync(resource); |
| | | resources.Add(resource); |
| | | } |
| | | else |
| | | { |
| | | model.Adapt(resource); |
| | | await rep.UpdateAsync(resource); |
| | | var resourceBakModel = new ResourceModel(); |
| | | resource.Adapt(resourceBakModel); |
| | | resourceBakModel.TraceId = model.TraceId; |
| | | resourceBakModel.DynamicAssemblyName = model.DynamicAssemblyName; |
| | | if (resourceBakModel.ToJson() != model.ToJson()) |
| | | { |
| | | model.Adapt(resource); |
| | | resource.UpdatedTime = DateTimeOffset.Now; |
| | | await rep.UpdateAsync(resource); |
| | | } |
| | | } |
| | | } |
| | | |
| | | var expiredResources = resources.Where(it => it.TraceId != traceId).ToList(); |
| | | var expiredResources = resources.Where(it => !models.Any(m => m.Route == it.Route && m.Method == it.Method)).ToList(); |
| | | foreach (var expiredResource in expiredResources) |
| | | { |
| | | expiredResource.IsExpired = true; |
| | | await rep.UpdateAsync(expiredResource); |
| | | //expiredResource.IsExpired = true; |
| | | //await rep.UpdateAsync(expiredResource); |
| | | await rep.DeleteAsync(expiredResource); |
| | | } |
| | | |
| | | return resources.Where(it => !it.IsExpired).ToList(); |