|
@@ -2,12 +2,21 @@
|
|
|
using Microsoft.AspNetCore.Http;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
using Microsoft.Extensions.Options;
|
|
|
+using System.Collections.Generic;
|
|
|
using System.Text.Json;
|
|
|
using System.Threading.Tasks;
|
|
|
using TEAMModelOS.Filter;
|
|
|
using TEAMModelOS.Models;
|
|
|
+using TEAMModelOS.SDK;
|
|
|
using TEAMModelOS.SDK.DI;
|
|
|
-
|
|
|
+using TEAMModelOS.SDK.Models;
|
|
|
+using TEAMModelOS.SDK.Extension;
|
|
|
+using System.Text;
|
|
|
+using System;
|
|
|
+using Azure.Cosmos;
|
|
|
+using TEAMModelOS.SDK.Models.Service;
|
|
|
+using System.Linq;
|
|
|
+using HTEXLib.COMM.Helpers;
|
|
|
namespace TEAMModelOS.Controllers.Both
|
|
|
{
|
|
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
|
@@ -34,12 +43,114 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
}
|
|
|
[ProducesDefaultResponseType]
|
|
|
[HttpPost("upsert-knowledge")]
|
|
|
+#if !DEBUG
|
|
|
+
|
|
|
[Authorize(Roles = "IES")]
|
|
|
[AuthToken(Roles = "admin", Permissions = "knowledge-upd")]
|
|
|
+#endif
|
|
|
public async Task<IActionResult> UpsertKnowledge(JsonElement json)
|
|
|
{
|
|
|
+ KnowledgeTreeDto knowledge = json.GetProperty("knowledge").ToObject<KnowledgeTreeDto>();
|
|
|
+ List<TagOldNew> old_new = null;
|
|
|
+ if (json.TryGetProperty("old_new", out JsonElement _old_new))
|
|
|
+ {
|
|
|
+ old_new = _old_new.ToObject<List<TagOldNew>>();
|
|
|
+ }
|
|
|
+ ValidResult validResult = knowledge.Valid();
|
|
|
+ if (!validResult.isVaild)
|
|
|
+ {
|
|
|
+ return BadRequest(validResult);
|
|
|
+ }
|
|
|
+ var client = _azureCosmos.GetCosmosClient();
|
|
|
|
|
|
-
|
|
|
+ string code = string.Empty;
|
|
|
+ Knowledge old = null;
|
|
|
+ var blocks = new List<Block>();
|
|
|
+ var points = new HashSet<string>();
|
|
|
+ var nodes = new List<PointNode>();
|
|
|
+ KnowledgeService.TreeToList(knowledge.tree, nodes, blocks, points);
|
|
|
+ if (knowledge.scope.Equals("school"))
|
|
|
+ {
|
|
|
+ if (!string.IsNullOrWhiteSpace(knowledge.subjectId) && !string.IsNullOrWhiteSpace(knowledge.periodId))
|
|
|
+ {
|
|
|
+ code = $"Knowledge-{knowledge.owner}-{knowledge.subjectId}";
|
|
|
+ StringBuilder sql = new StringBuilder($"select value c from c where c.periodId = '{knowledge.periodId}'");
|
|
|
+ await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<Knowledge>
|
|
|
+ (queryText: sql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey(code) }))
|
|
|
+ {
|
|
|
+ old = item;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (old!=null)
|
|
|
+ {
|
|
|
+ knowledge.id = old.id;
|
|
|
+ foreach (var p in old.points) {
|
|
|
+ points.Add(p);
|
|
|
+ }
|
|
|
+ foreach (var b in old.blocks) {
|
|
|
+ var bks= blocks.FindAll(x => x.name.Equals(b.name));
|
|
|
+ if (bks.IsNotEmpty())
|
|
|
+ {
|
|
|
+ foreach (var bk in bks)
|
|
|
+ {
|
|
|
+ bk.points.AddRange(b.points);
|
|
|
+ bk.points= bk.points.Distinct().ToList();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ blocks.Add(b);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ knowledge.id = Guid.NewGuid().ToString();
|
|
|
+ }
|
|
|
+ Knowledge knowledgeDb = new Knowledge
|
|
|
+ {
|
|
|
+ id=knowledge.id,
|
|
|
+ code=code,
|
|
|
+ name=knowledge.name,
|
|
|
+ periodId=knowledge.periodId,
|
|
|
+ subjectId =knowledge.subjectId,
|
|
|
+ scope=knowledge.scope,
|
|
|
+ blocks=blocks,
|
|
|
+ pk="Knowledge",
|
|
|
+ points=points.ToList(),
|
|
|
+ nodes=nodes,
|
|
|
+ owner=knowledge.owner,
|
|
|
+ };
|
|
|
+ return Ok(knowledgeDb);
|
|
|
+ // await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS,Constant.School).UpsertItemAsync(knowledgeDb,new PartitionKey(code));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ code=$"Knowledge-{knowledge.owner}";
|
|
|
+ if (!string.IsNullOrWhiteSpace(knowledge.id))
|
|
|
+ {
|
|
|
+ Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReadItemStreamAsync(knowledge.id, new PartitionKey(code));
|
|
|
+ if (response.Status!=200)
|
|
|
+ {
|
|
|
+ knowledge.id = Guid.NewGuid().ToString();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Knowledge knowledgeDb = new Knowledge
|
|
|
+ {
|
|
|
+ id=knowledge.id,
|
|
|
+ code=code,
|
|
|
+ name=knowledge.name,
|
|
|
+ periodId=knowledge.periodId,
|
|
|
+ subjectId =knowledge.subjectId,
|
|
|
+ scope=knowledge.scope,
|
|
|
+ blocks=blocks,
|
|
|
+ pk="Knowledge",
|
|
|
+ points=points.ToList(),
|
|
|
+ nodes=nodes,
|
|
|
+ owner=knowledge.owner,
|
|
|
+ };
|
|
|
+ return Ok(knowledgeDb);
|
|
|
+ // await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(knowledgeDb, new PartitionKey(code));
|
|
|
+ }
|
|
|
return Ok();
|
|
|
}
|
|
|
}
|