using Microsoft.AspNetCore.Http; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using TEAMModelOS.Model.Core.Models; using TEAMModelOS.Model.Syllabus.Dtos; using TEAMModelOS.Model.Syllabus.Models; using TEAMModelOS.SDK.Context.Exception; using TEAMModelOS.SDK.Helper.Common.CollectionHelper; using TEAMModelOS.SDK.Helper.Common.JsonHelper; using TEAMModelOS.SDK.Module.AzureTable.Interfaces; using TEAMModelOS.Service.Core.Implements; using TEAMModelOS.Service.Syllabus.Interfaces; namespace TEAMModelOS.Service.Syllabus.Implements { public class SyllabusService : BaseService, ISyllabusService { //private readonly IAzureTableDBRepository _azureTableDBRepository; //public SyllabusService(IAzureTableDBRepository azureTableDBRepository) { // _azureTableDBRepository = azureTableDBRepository; //} public async Task> SaveOrUpdateAll(List trees ,string lang ) { List nodes = new List(); TreeToList(trees, nodes); List nods = MessagePackHelper.JsonToObject>(MessagePackHelper.ObjectToJson(nodes)); nods.ForEach(m => { m.PartitionKey = lang; }); await SaveOrUpdateAll(nods); List treess = ListToTree(nods); return treess; // return Task.Factory.StartNew(() => { return treess; }); } public List TreeToList(List trees, List nodes) { nodes.AddRange(MessagePackHelper.JsonToObject>(MessagePackHelper.ObjectToJson(trees))); foreach (SyllabusTree tree in trees) { if (null != tree.Children && tree.Children.Count > 0) { TreeToList(tree.Children, nodes); } } return nodes; } public async Task> FindSyllabusTreeByDict(Dictionary dict) { List syllabusNodes = await FindListByDict(dict); return ListToTree(syllabusNodes); } private List ListToTree(List noes) { List list = MessagePackHelper.JsonToObject>(MessagePackHelper.ObjectToJson(noes)); var lookup = list.ToDictionary(n => n.RowKey, n => n); return GetChild(list, lookup); } public List GetChild(List list, Dictionary dict) { list = list.OrderBy(m => m.Order).ToList(); List trees = new List(); foreach (SyllabusTree node in list) { bool flag = dict.TryGetValue(node.Pid, out SyllabusTree syllabus); if (flag && syllabus != null) { syllabus.Children.Add(node); } else { trees.Add(node); } } return trees; } } }