|
@@ -0,0 +1,126 @@
|
|
|
+using Microsoft.AspNetCore.Mvc;
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Linq;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using TEAMModelOS.Models;
|
|
|
+using TEAMModelOS.SDK;
|
|
|
+using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
|
|
|
+using TEAMModelOS.SDK.DI;
|
|
|
+using System.Text.Json;
|
|
|
+using TEAMModelOS.SDK.Helper.Common.StringHelper;
|
|
|
+using TEAMModelOS.SDK.Models;
|
|
|
+using Microsoft.AspNetCore.Http;
|
|
|
+using TEAMModelOS.SDK.Extension;
|
|
|
+using Azure.Cosmos;
|
|
|
+using Microsoft.AspNetCore.Authentication;
|
|
|
+using System.Text;
|
|
|
+using TEAMModelOS.SDK.DI.AzureCosmos.Inner;
|
|
|
+using Microsoft.Extensions.Options;
|
|
|
+namespace TEAMModelOS.Controllers
|
|
|
+{
|
|
|
+ [ProducesResponseType(StatusCodes.Status200OK)]
|
|
|
+ [ProducesResponseType(StatusCodes.Status400BadRequest)]
|
|
|
+ //[Authorize(Roles = "IES5")]
|
|
|
+ [Route("knowledges")]
|
|
|
+ [ApiController]
|
|
|
+ public class KnowledgesController: ControllerBase
|
|
|
+ {
|
|
|
+ private readonly SnowflakeId _snowflakeId;
|
|
|
+ private readonly AzureCosmosFactory _azureCosmos;
|
|
|
+ private readonly DingDing _dingDing;
|
|
|
+ private readonly Option _option;
|
|
|
+ public KnowledgesController(AzureCosmosFactory azureCosmos, SnowflakeId snowflakeId, DingDing dingDing, IOptionsSnapshot<Option> option)
|
|
|
+ {
|
|
|
+ _azureCosmos = azureCosmos;
|
|
|
+ _snowflakeId = snowflakeId;
|
|
|
+ _dingDing = dingDing;
|
|
|
+ _option = option?.Value;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ {
|
|
|
+ "periodId": "ca484aa8-e7b5-4a7c-8ef3-bd9e7b7d4fp2",
|
|
|
+ "subjectId":"ac73f07d-2cc8-4174-85ae-b39cc5b6beef",
|
|
|
+ "scope":"school",
|
|
|
+ "owner":"hbcn",
|
|
|
+ "points": [
|
|
|
+ "一元一次方程","二元一次方程","一元二次方程","直线方程","三元一次方程","鸡兔同笼问题","微积分方程","函数有界性","函数单调性","函数奇偶性","函数周期性","函数连续性","函数凹凸性",
|
|
|
+ "常函数","一次函数","二次函数","三次函数","四次函数","五次函数","幂函数","指数函数","对数函数","三角函数","反三角函数","常数函数",
|
|
|
+ "正弦函数","余弦函数","正切函数","余切函数","正割函数","余割函数","正矢函数","余矢函数","半正矢函数","半余矢函数","外正割函数","外余割函数"
|
|
|
+ ],
|
|
|
+ "blocks":[
|
|
|
+ {
|
|
|
+ "name": "方程式" ,
|
|
|
+ "points":["一元一次方程","二元一次方程","一元二次方程","直线方程","三元一次方程","鸡兔同笼问题","微积分方程"]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "name": "函数的特性" ,
|
|
|
+ "points": ["函数有界性","函数单调性","函数奇偶性","函数周期性","函数连续性","函数凹凸性"]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "name": "多项式函数" ,
|
|
|
+ "points": ["常函数","一次函数","二次函数","三次函数","四次函数","五次函数"]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "name": "基本初等函数" ,
|
|
|
+ "points": ["幂函数","指数函数","对数函数","三角函数","反三角函数","常数函数"]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "name": "三角函数" ,
|
|
|
+ "points":["正弦函数","余弦函数","正切函数","余切函数","正割函数","余割函数","正矢函数","余矢函数","半正矢函数","半余矢函数","外正割函数","外余割函数"]
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ */
|
|
|
+ [ProducesDefaultResponseType]
|
|
|
+ [HttpPost("upsert")]
|
|
|
+ public async Task<IActionResult> Upsert(TEAMModelOS.SDK.Models.Cosmos.School.Knowledge knowledge) {
|
|
|
+ var client = _azureCosmos.GetCosmosClient();
|
|
|
+ knowledge.code = $"Knowledge-{knowledge.owner}-{knowledge.subjectId}";
|
|
|
+ StringBuilder sql = new StringBuilder($"select value(c) from c where c.periodId = '{knowledge.periodId}'");
|
|
|
+ TEAMModelOS.SDK.Models.Cosmos.School.Knowledge old = null;
|
|
|
+ await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<TEAMModelOS.SDK.Models.Cosmos.School.Knowledge>(queryText: sql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"{ knowledge.code}") }))
|
|
|
+ {
|
|
|
+ old = item;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (old != null)
|
|
|
+ {
|
|
|
+ knowledge.id = old.id;
|
|
|
+ knowledge = await client.GetContainer("TEAMModelOS", "School").ReplaceItemAsync(knowledge, old.id, new PartitionKey($"{knowledge.code}"));
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ knowledge.id = Guid.NewGuid().ToString();
|
|
|
+ knowledge = await client.GetContainer("TEAMModelOS", "School").CreateItemAsync(knowledge, new PartitionKey($"{knowledge.code}"));
|
|
|
+ }
|
|
|
+ return Ok(knowledge);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * {
|
|
|
+ ?"periodId": "ca484aa8-e7b5-4a7c-8ef3-bd9e7b7d4fp2",
|
|
|
+ !"subjectId": "ac73f07d-2cc8-4174-85ae-b39cc5b6beef",
|
|
|
+ !"school_code": "hbcn"
|
|
|
+ }
|
|
|
+ **/
|
|
|
+ [ProducesDefaultResponseType]
|
|
|
+ [HttpPost("find")]
|
|
|
+ public async Task<IActionResult> Find(JsonElement request) {
|
|
|
+ var client = _azureCosmos.GetCosmosClient();
|
|
|
+ request.TryGetProperty("periodId", out JsonElement periodId);
|
|
|
+ if (!request.TryGetProperty("subjectId", out JsonElement subjectId)) return BadRequest();
|
|
|
+ if (!request.TryGetProperty("school_code", out JsonElement school_code)) return BadRequest();
|
|
|
+ string code = $"Knowledge-{school_code}-{subjectId}";
|
|
|
+ StringBuilder sql = new StringBuilder($"select value(c) from c");
|
|
|
+ if (periodId.ValueKind.Equals(JsonValueKind.String)) {
|
|
|
+ sql.Append($" where c.periodId = '{periodId}'");
|
|
|
+ }
|
|
|
+ List<TEAMModelOS.SDK.Models.Cosmos.School.Knowledge> knowledges = new List<SDK.Models.Cosmos.School.Knowledge>() ;
|
|
|
+ await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<TEAMModelOS.SDK.Models.Cosmos.School.Knowledge>(queryText: sql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"{code}") }))
|
|
|
+ {
|
|
|
+ knowledges.Add(item);
|
|
|
+ }
|
|
|
+ return Ok(knowledges);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|