Ver código fonte

更新我的最爱

CrazyIter_Bin 4 anos atrás
pai
commit
bc4986d9ad

+ 58 - 0
TEAMModelOS.SDK/Models/Cosmos/Teacher/Favorite.cs

@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using TEAMModelOS.SDK.Models.Cosmos.Common;
+
+namespace TEAMModelOS.SDK.Models.Cosmos.Teacher
+{
+    /// <summary>
+    /// 课纲-我喜欢的,我的收藏
+    /// </summary>
+    public class Favorite : CosmosEntity
+    {
+        public Favorite() {
+            pk = "Favorite";
+            ttl = -1;
+            //code ="Favorite-tmdid"
+        }
+        public List<Tnode> nodes { get; set; }
+        /// <summary>
+        /// 名称 默认选中节点名称,或者自定义输入名称
+        /// </summary>
+        public string name { get; set; }
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        public long createTime { get; set; }
+        /// <summary>
+        /// 引用来源课纲id
+        /// </summary>
+        public string fromId { get; set; }
+        /// <summary>
+        /// 引用来源 课纲Code 分区键
+        /// </summary>
+        public string fromCode { get; set; }
+    }
+    public class FavoriteTree{
+        public string id { get; set; }
+        public string code { get; set; }
+        public string pk { get; set; } = "Favorite";
+        /// <summary>
+        /// 名称 默认选中节点名称,或者自定义输入名称
+        /// </summary>
+        public string name { get; set; }
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        public long createTime { get; set; }
+        /// <summary>
+        /// 引用来源课纲id
+        /// </summary>
+        public string fromId { get; set; }
+        /// <summary>
+        /// 引用来源 课纲Code 分区键
+        /// </summary>
+        public string fromCode { get; set; }
+        public List<SyllabusTree> nodes { get; set; }
+    }
+}

+ 84 - 0
TEAMModelOS/Controllers/Syllabus/FavoriteController.cs

@@ -0,0 +1,84 @@
+using Azure.Cosmos;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text.Json;
+using System.Threading.Tasks;
+using TEAMModelOS.Models;
+using TEAMModelOS.SDK.DI;
+using TEAMModelOS.SDK.Extension;
+using TEAMModelOS.SDK.Models.Cosmos.Common;
+using TEAMModelOS.SDK.Models.Cosmos.Teacher;
+using TEAMModelOS.Services.Common;
+
+namespace TEAMModelOS.Controllers
+{
+    [ProducesResponseType(StatusCodes.Status200OK)]
+    [ProducesResponseType(StatusCodes.Status400BadRequest)]
+    //[Authorize(Roles = "IES5")]
+    [Route("teacher/favorite")]
+    [ApiController]
+    public class FavoriteController: ControllerBase
+    {
+        private readonly AzureCosmosFactory _azureCosmos;
+        private readonly SnowflakeId _snowflakeId;
+        private readonly DingDing _dingDing;
+        private readonly Option _option;
+
+        public FavoriteController(AzureCosmosFactory azureCosmos, SnowflakeId snowflakeId, DingDing dingDing, IOptionsSnapshot<Option> option)
+        {
+            _azureCosmos = azureCosmos;
+            _snowflakeId = snowflakeId;
+            _dingDing = dingDing;
+            _option = option?.Value; ;
+        }
+        /// <summary>
+        /// 保存或更新 
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("upsert")]
+        public async Task<IActionResult> Upsert(FavoriteTree request)
+        {
+            try
+            {
+                var client = _azureCosmos.GetCosmosClient();
+                request.pk = "Favorite";
+                request.code = request.pk + "-" + request.code;
+                //request.ttl = -1;
+                List<Tnode> nodes = new List<Tnode>();
+                SyllabusService.TreeToList(request.nodes, nodes);
+                if (string.IsNullOrEmpty(request.id))
+                {
+
+                    request.id = Guid.NewGuid().ToString();
+                    request = await client.GetContainer("TEAMModelOS", "Teacher").CreateItemAsync(request, new PartitionKey($"{request.code}"));
+                }
+                else
+                {
+                    var response = await client.GetContainer("TEAMModelOS", "Teacher").ReadItemStreamAsync(request.id, new PartitionKey($"{request.code}"));
+                    if (response.Status == 200)
+                    {
+                        using var json = await JsonDocument.ParseAsync(response.ContentStream);
+                        var info = json.ToObject<Favorite>();
+                        request = await client.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync(request, info.id, new PartitionKey($"{info.code}"));
+                    }
+                    else
+                    {
+                        request = await client.GetContainer("TEAMModelOS", "Teacher").CreateItemAsync(request, new PartitionKey($"{request.code}"));
+                    }
+                }
+                return Ok(new { room = request });
+            }
+            catch (Exception e)
+            {
+                await _dingDing.SendBotMsg($"OS,{_option.Location},common/teacher/favorite\n{e.Message}", GroupNames.醍摩豆服務運維群組);
+                return BadRequest();
+            }
+        }
+    }
+}

+ 5 - 56
TEAMModelOS/Controllers/Syllabus/SyllabusController.cs

@@ -15,13 +15,14 @@ using TEAMModelOS.SDK.Models;
 using Microsoft.AspNetCore.Http;
 using TEAMModelOS.SDK.Models.Cosmos.Common;
 using Azure.Cosmos;
+using TEAMModelOS.Services.Common;
 
 namespace TEAMModelOS.Controllers
 {
     [ProducesResponseType(StatusCodes.Status200OK)]
     [ProducesResponseType(StatusCodes.Status400BadRequest)]
     //[Authorize(Roles = "IES5")]
-    [Route("syllabus")]
+    [Route("common/syllabus")]
     [ApiController]
     //[Authorize]
     public class SyllabusController : ControllerBase
@@ -224,14 +225,14 @@ namespace TEAMModelOS.Controllers
         {
             List<Tnode> nodes = new List<Tnode>();
             Syllabus syllabus = new Syllabus();
-            TreeToList(request.trees, nodes);
+            SyllabusService.TreeToList(request.trees, nodes);
             syllabus.children = nodes;
             syllabus.id = !string.IsNullOrEmpty(request.id) ? request.id : Guid.NewGuid().ToString() ;
             syllabus.code =$"Syllabus-{request.code}" ;
             syllabus.pk = "Syllabus";
             syllabus.ttl = -1;
             await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").UpsertItemAsync<Syllabus>(syllabus,new Azure.Cosmos.PartitionKey(syllabus.code));
-            List<SyllabusTree> trees = ListToTree(nodes);
+            List<SyllabusTree> trees = SyllabusService. ListToTree(nodes);
             request.trees = trees;
             return request;
         }
@@ -249,59 +250,7 @@ namespace TEAMModelOS.Controllers
             return nodes;
         }
 
-        private List<Tnode> TreeToList(List<SyllabusTree> trees, List<Tnode> nodes)
-        {
-            int index = 0;
-            foreach (SyllabusTree tr in trees)
-            {
-                tr.order = index;
-                index++;
-            }
-            trees = trees.OrderBy(x => x.order).ToList();
-            nodes.AddRange(trees.ToJsonString().ToObject<List<Tnode>>());
-
-            foreach (SyllabusTree tree in trees)
-            {
-                if (null != tree.children && tree.children.Count > 0)
-                {
-                    TreeToList(tree.children, nodes);
-                }
-            }
-            return nodes;
-        }
-        private List<SyllabusTree> ListToTree(List<Tnode> noes)
-        {
-            List<SyllabusTree> list = noes.ToJsonString().ToObject<List<SyllabusTree>>();
-            //var lookup = list.ToDictionary(n => n.RowKey, n => n);
-
-            var res = from r in list group r by r.id into g select g;
-            Dictionary<string, SyllabusTree> blockDict = new Dictionary<string, SyllabusTree>();
-            foreach (var s in res)
-            {
-                blockDict.TryAdd(s.First().id, s.First());
-            }
-            return GetChild(list, blockDict);
-        }
-
-        private List<SyllabusTree> GetChild(List<SyllabusTree> list, Dictionary<string, SyllabusTree> dict)
-        {
-            //  list = list.OrderBy(m => m.Order).ToList();
-            List<SyllabusTree> trees = new List<SyllabusTree>();
-            trees = trees.OrderBy(x => x.order).ToList();
-            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;
-        }
+        
         //private async Task<List<Syllabus>> SaveOrUpdateToNodes(List<Tnode> syllabusNodes)
         //{
         //    List<Syllabus> syllabuses;

+ 67 - 0
TEAMModelOS/Services/Common/SyllabusService.cs

@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using TEAMModelOS.SDK.Extension;
+using TEAMModelOS.SDK.Models;
+using TEAMModelOS.SDK.Models.Cosmos.Common;
+
+namespace TEAMModelOS.Services.Common
+{
+    public static class SyllabusService
+    {
+        public static List<Tnode> TreeToList(List<SyllabusTree> trees, List<Tnode> nodes)
+        {
+            int index = 0;
+            foreach (SyllabusTree tr in trees)
+            {
+                tr.order = index;
+                index++;
+            }
+            trees = trees.OrderBy(x => x.order).ToList();
+            nodes.AddRange(trees.ToJsonString().ToObject<List<Tnode>>());
+
+            foreach (SyllabusTree tree in trees)
+            {
+                if (null != tree.children && tree.children.Count > 0)
+                {
+                    TreeToList(tree.children, nodes);
+                }
+            }
+            return nodes;
+        }
+        public static List<SyllabusTree> ListToTree(List<Tnode> noes)
+        {
+            List<SyllabusTree> list = noes.ToJsonString().ToObject<List<SyllabusTree>>();
+            //var lookup = list.ToDictionary(n => n.RowKey, n => n);
+
+            var res = from r in list group r by r.id into g select g;
+            Dictionary<string, SyllabusTree> blockDict = new Dictionary<string, SyllabusTree>();
+            foreach (var s in res)
+            {
+                blockDict.TryAdd(s.First().id, s.First());
+            }
+            return GetChild(list, blockDict);
+        }
+
+        private static List<SyllabusTree> GetChild(List<SyllabusTree> list, Dictionary<string, SyllabusTree> dict)
+        {
+            //  list = list.OrderBy(m => m.Order).ToList();
+            List<SyllabusTree> trees = new List<SyllabusTree>();
+            trees = trees.OrderBy(x => x.order).ToList();
+            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;
+        }
+    }
+}