public async Task <IResponseOutput> Sync(ApiSyncInput input)
 {
     return(await _apiServices.SyncAsync(input));
 }
Example #2
0
        public async Task <IResponseOutput> SyncAsync(ApiSyncInput input)
        {
            //查询所有api
            var apis = await _apiRepository.Select.ToListAsync();

            var paths = apis.Select(a => a.Path).ToList();

            //path处理
            foreach (var api in input.Apis)
            {
                api.Path       = api.Path?.Trim().ToLower();
                api.ParentPath = api.ParentPath?.Trim().ToLower();
            }

            #region 执行插入
            //执行父级api插入
            var parentApis = input.Apis.FindAll(a => a.ParentPath.IsNull());
            var pApis      = (from a in parentApis where !paths.Contains(a.Path) select a).ToList();
            if (pApis.Count > 0)
            {
                var insertPApis = _mapper.Map <List <ApiEntity> >(pApis);
                insertPApis = await _apiRepository.InsertAsync(insertPApis);

                apis.AddRange(insertPApis);
            }

            //执行子级api插入
            var childApis = input.Apis.FindAll(a => a.ParentPath.NotNull());
            var cApis     = (from a in childApis where !paths.Contains(a.Path) select a).ToList();
            if (cApis.Count > 0)
            {
                var insertCApis = _mapper.Map <List <ApiEntity> >(cApis);
                insertCApis = await _apiRepository.InsertAsync(insertCApis);

                apis.AddRange(insertCApis);
            }
            #endregion

            #region 修改和禁用
            {
                //api修改
                ApiEntity     a;
                List <string> labels;
                string        label;
                string        desc;
                foreach (var api in parentApis)
                {
                    a = apis.Find(a => a.Path == api.Path);
                    if (a?.Id > 0)
                    {
                        labels        = api.Label?.Split("\r\n")?.ToList();
                        label         = labels != null && labels.Count > 0 ? labels[0] : string.Empty;
                        desc          = labels != null && labels.Count > 1 ? string.Join("\r\n", labels.GetRange(1, labels.Count() - 1)) : string.Empty;
                        a.ParentId    = 0;
                        a.Label       = label;
                        a.Description = desc;
                        a.Enabled     = true;
                    }
                }
            }

            {
                //api修改
                ApiEntity     a;
                ApiEntity     pa;
                List <string> labels;
                string        label;
                string        desc;
                foreach (var api in childApis)
                {
                    a  = apis.Find(a => a.Path == api.Path);
                    pa = apis.Find(a => a.Path == api.ParentPath);
                    if (a?.Id > 0)
                    {
                        labels = api.Label?.Split("\r\n")?.ToList();
                        label  = labels != null && labels.Count > 0 ? labels[0] : string.Empty;
                        desc   = labels != null && labels.Count > 1 ? string.Join("\r\n", labels.GetRange(1, labels.Count() - 1)) : string.Empty;

                        a.ParentId    = pa?.Id;
                        a.Label       = label;
                        a.Description = desc;
                        a.HttpMethods = api.HttpMethods;
                        a.Enabled     = true;
                    }
                }
            }

            {
                //api禁用
                var inputPaths   = input.Apis.Select(a => a.Path).ToList();
                var disabledApis = (from a in apis where !inputPaths.Contains(a.Path) select a).ToList();
                if (disabledApis.Count > 0)
                {
                    foreach (var api in disabledApis)
                    {
                        api.Enabled = false;
                    }
                }
            }
            #endregion

            //批量更新
            await _apiRepository.UpdateDiy.SetSource(apis)
            .UpdateColumns(a => new { a.ParentId, a.Label, a.HttpMethods, a.Description, a.Enabled })
            .ExecuteAffrowsAsync();

            return(ResponseOutput.Ok());
        }