LearnController.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514
  1. using Azure.Cosmos;
  2. using Microsoft.AspNetCore.Http;
  3. using Microsoft.AspNetCore.Mvc;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IdentityModel.Tokens.Jwt;
  7. using System.IO;
  8. using System.Text.Json;
  9. using System.Threading.Tasks;
  10. using TEAMModelOS.SDK.Models;
  11. using TEAMModelOS.SDK;
  12. using TEAMModelOS.SDK.Context.Constant.Common;
  13. using TEAMModelOS.SDK.DI;
  14. using TEAMModelOS.SDK.Extension;
  15. using TEAMModelOS.SDK.Helper.Common.StringHelper;
  16. using TEAMModelOS.SDK.Helper.Common.ValidateHelper;
  17. namespace TEAMModelOS.Controllers.Learn
  18. {
  19. // TODO 代码优化
  20. /// <summary>
  21. /// 学习活动
  22. /// </summary>
  23. [ProducesResponseType(StatusCodes.Status200OK)]
  24. [ProducesResponseType(StatusCodes.Status400BadRequest)]
  25. [Route("common/learn")]
  26. [ApiController]
  27. public class LearnController: ControllerBase
  28. {
  29. private readonly SnowflakeId _snowflakeId;
  30. private readonly AzureCosmosFactory _azureCosmos;
  31. private readonly AzureServiceBusFactory _serviceBus;
  32. public LearnController(AzureCosmosFactory azureCosmos, AzureServiceBusFactory serviceBus, SnowflakeId snowflakeId)
  33. {
  34. _snowflakeId = snowflakeId;
  35. _serviceBus = serviceBus;
  36. _azureCosmos = azureCosmos;
  37. }
  38. // /// <summary>
  39. // /// 保存或更新学习任务
  40. // /// </summary>
  41. // /// <param name="request"></param>
  42. // /// <returns></returns>
  43. // [ProducesDefaultResponseType]
  44. // [HttpPost("upsert-task")]
  45. // public async Task<IActionResult> UpsertTask(LearnTask request)
  46. // {
  47. // /*//if (!requert.TryGetProperty("id_token", out JsonElement id_token)) return BadRequest();
  48. // if (!requert.TryGetProperty("id", out JsonElement id)) return BadRequest();
  49. // if (!requert.TryGetProperty("school_code", out JsonElement school_code)) return BadRequest();
  50. // *//* var jwt = new JwtSecurityToken(id_token.GetString());
  51. // if (!jwt.Payload.Iss.Equals("account.teammodel", StringComparison.Ordinal)) return BadRequest();
  52. // var id = jwt.Payload.Sub;*//*
  53. // var client = _azureCosmos.GetCosmosClient();
  54. // var response = await client.GetContainer("TEAMModelOS", "Teacher").ReadItemStreamAsync(id.ToString(), new PartitionKey($"LearnTask-{id}"));
  55. // if (response.Status == 200)
  56. // {
  57. // using var json = await JsonDocument.ParseAsync(response.ContentStream);
  58. // }
  59. // else
  60. // {
  61. // //如果沒有,則初始化LearnTask
  62. // requert.TryGetProperty("endTime", out JsonElement endTime);
  63. // requert.TryGetProperty("status", out JsonElement status);
  64. // requert.TryGetProperty("type", out JsonElement type);
  65. // requert.TryGetInt64(out long createTime);
  66. // requert.TryGetProperty("stage", out JsonElement stage);
  67. // requert.TryGetProperty("passScore", out JsonElement passScore);
  68. // if (createTime <= 0)
  69. // {
  70. // createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  71. // }
  72. // if (endTime.GetInt64() > 0)
  73. // {
  74. // //设定结束时间
  75. // string msgEndId = _snowflakeId.NextId() + "";
  76. // await _serviceBus.GetServiceBusClient().SendLeamMessage<LearnTask>(Constants.TopicName, id, $"LearnTask-{id}", endTime.GetInt64(), 300, msgEndId);
  77. // }
  78. // using var stream = new MemoryStream();
  79. // using var writer = new Utf8JsonWriter(stream); //new JsonWriterOptions() { Indented = true }
  80. // writer.WriteStartObject();
  81. // writer.WriteString("code", $"LearnTask-{id}");
  82. // writer.WriteString("id", id.ToString());
  83. // writer.WriteNumber("endTime", endTime.GetInt64());
  84. // writer.WriteNumber("status", status.GetInt32());
  85. // writer.WriteNumber("type", type.GetInt32());
  86. // writer.WriteNumber("stage", stage.GetInt32());
  87. // writer.WriteNumber("createTime", createTime);
  88. // writer.WriteNumber("passScore", passScore.GetInt32());
  89. // writer.WriteEndObject();
  90. // writer.Flush();
  91. // //Debug
  92. // //string teacher = Encoding.UTF8.GetString(stream.ToArray());
  93. // response = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher").CreateItemStreamAsync(stream, new PartitionKey($"LearnTask-{id}"));
  94. // }*/
  95. // var client = _azureCosmos.GetCosmosClient();
  96. // LearnTask learnTask;
  97. // request.pk = typeof(LearnTask).Name;
  98. // if (string.IsNullOrEmpty(request.id))
  99. // {
  100. // request.id = _snowflakeId.NextId() + "";
  101. // request.code = typeof(LearnTask).Name + "-" + request.code;
  102. // request.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  103. // learnTask = await client.GetContainer("TEAMModelOS", "Teacher").CreateItemAsync(request, new PartitionKey($"{request.code}"));
  104. // //await _azureCosmos.Save(request);
  105. // }
  106. // else
  107. // {
  108. // learnTask = await client.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync(request, request.id, new PartitionKey($"{request.code}"));
  109. // //await _azureCosmos.Update(request);
  110. // }
  111. // return Ok(new { learnTask });
  112. // /* ResponseBuilder builder = ResponseBuilder.custom();
  113. // if (request.createTime <= 0) {
  114. // request.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  115. // }
  116. // if (request.endTime > 0) {
  117. // //设定结束时间
  118. // string msgEndId = _snowflakeId.NextId()+"";
  119. // await _serviceBus.GetServiceBusClient().SendLeamMessage<LearnTask>(Constants.TopicName, request.id, request.code, request.endTime, 300, msgEndId);
  120. // }
  121. // await _azureCosmos.Save(request);
  122. // return builder.Data(request).build();*/
  123. // }
  124. // /// <summary>
  125. // /// 查询学习任务
  126. // /// </summary>
  127. // /// <param name="request"></param>
  128. // /// <returns></returns>
  129. // [ProducesDefaultResponseType]
  130. // [HttpPost("find-task")]
  131. // public async Task<IActionResult> FindTask(JsonElement requert)
  132. // {
  133. // var client = _azureCosmos.GetCosmosClient();
  134. // if (!requert.TryGetProperty("id", out JsonElement id)) return BadRequest();
  135. // //var (id, name, picture, _) = HttpContext.GetAuthTokenInfo();
  136. ///* if (!requert.TryGetProperty("id_token", out JsonElement id_token)) return BadRequest();
  137. // var jwt = new JwtSecurityToken(id_token.GetString());
  138. // if (!jwt.Payload.Iss.Equals("account.teammodel", StringComparison.Ordinal)) return BadRequest();
  139. // var id = jwt.Payload.Sub;*/
  140. // List<object> tasks = new List<object>();
  141. // var query = $"select c.id,c.endTime,c.status, c.type,c.createTime,c.stage,c.passScore from c";
  142. // await foreach (var item in client.GetContainer("TEAMModelOS", "Student").GetItemQueryStreamIterator(queryText: query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"LearnTask-{id}") }))
  143. // {
  144. // using var json = await JsonDocument.ParseAsync(item.ContentStream);
  145. // if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  146. // {
  147. // foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  148. // {
  149. // tasks.Add(obj.ToObject<object>());
  150. // }
  151. // }
  152. // }
  153. // return Ok(new { tasks });
  154. // /*ResponseBuilder builder = ResponseBuilder.custom();
  155. // if (request.TryGetProperty("id",out _) || request.TryGetProperty("code",out _))
  156. // {
  157. // List<LearnTask> tasks = await _azureCosmos.FindByDict<LearnTask>(request);
  158. // return builder.Data(tasks).build();
  159. // }
  160. // else {
  161. // return builder.Error(ResponseCode.PARAMS_ERROR, "参数异常!").build();
  162. // }*/
  163. // }
  164. // /// <summary>
  165. // /// 删除学习任务
  166. // /// </summary>
  167. // /// <param name="request"></param>
  168. // /// <returns></returns>
  169. // [ProducesDefaultResponseType]
  170. // [HttpPost("delete-task")]
  171. // public async Task<IActionResult> DeleteTask(IdPk request)
  172. // {
  173. // ResponseBuilder builder = ResponseBuilder.custom();
  174. // return Ok(await _azureCosmos.DeleteAsync<LearnTask>(request));
  175. // }
  176. // /// <summary>
  177. // /// 保存或更新学习单元单元
  178. // /// </summary>
  179. // /// <param name="request"></param>
  180. // /// <returns></returns>
  181. // [ProducesDefaultResponseType]
  182. // [HttpPost("upsert-unit")]
  183. // public async Task<IActionResult> UpsertUnit(LearnUnit request)
  184. // {
  185. // var client = _azureCosmos.GetCosmosClient();
  186. // LearnUnit learnUnit;
  187. // request.pk = typeof(LearnUnit).Name;
  188. // if (string.IsNullOrEmpty(request.id))
  189. // {
  190. // request.id = _snowflakeId.NextId() + "";
  191. // request.code = typeof(LearnUnit).Name + "-" + request.code;
  192. // request.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  193. // learnUnit = await client.GetContainer("TEAMModelOS", "Teacher").CreateItemAsync(request, new PartitionKey($"{request.code}"));
  194. // //await _azureCosmos.Save(request);
  195. // }
  196. // else
  197. // {
  198. // request.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  199. // learnUnit = await client.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync(request, request.id, new PartitionKey($"{request.code}"));
  200. // //await _azureCosmos.Update(request);
  201. // }
  202. // return Ok(new { learnUnit });
  203. // /*if (!requert.TryGetProperty("id_token", out JsonElement id_token)) return BadRequest();
  204. // if (!requert.TryGetProperty("school_code", out JsonElement school_code)) return BadRequest();
  205. // var jwt = new JwtSecurityToken(id_token.GetString());
  206. // if (!jwt.Payload.Iss.Equals("account.teammodel", StringComparison.Ordinal)) return BadRequest();
  207. // var id = jwt.Payload.Sub;
  208. // var client = _azureCosmos.GetCosmosClient();
  209. // var response = await client.GetContainer("TEAMModelOS", "Teacher").ReadItemStreamAsync(id, new PartitionKey($"LearnUnit-{id}"));
  210. // if (response.Status == 200)
  211. // {
  212. // using var json = await JsonDocument.ParseAsync(response.ContentStream);
  213. // }
  214. // else
  215. // {
  216. // //如果沒有,則初始化LearnTask
  217. // requert.TryGetProperty("endTime", out JsonElement endTime);
  218. // requert.TryGetProperty("status", out JsonElement status);
  219. // requert.TryGetProperty("type", out JsonElement type);
  220. // //requert.TryGetInt64(out long createTime);
  221. // requert.TryGetProperty("stage", out JsonElement stage);
  222. // requert.TryGetProperty("passScore", out JsonElement passScore);
  223. // long createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  224. // using var stream = new MemoryStream();
  225. // using var writer = new Utf8JsonWriter(stream); //new JsonWriterOptions() { Indented = true }
  226. // writer.WriteStartObject();
  227. // writer.WriteString("code", $"LearnUnit-{id}");
  228. // writer.WriteString("id", id);
  229. // writer.WriteNumber("endTime", endTime.GetInt64());
  230. // writer.WriteNumber("status", status.GetInt32());
  231. // writer.WriteNumber("type", type.GetInt32());
  232. // writer.WriteNumber("stage", stage.GetInt32());
  233. // writer.WriteNumber("createTime", createTime);
  234. // writer.WriteNumber("passScore", passScore.GetInt32());
  235. // writer.WriteEndObject();
  236. // writer.Flush();
  237. // //Debug
  238. // //string teacher = Encoding.UTF8.GetString(stream.ToArray());
  239. // response = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher").CreateItemStreamAsync(stream, new PartitionKey($"LearnUnit-{id}"));
  240. // }
  241. // return Ok();*/
  242. // /*ResponseBuilder builder = ResponseBuilder.custom();
  243. // if (string.IsNullOrEmpty(request.id))
  244. // {
  245. // request.id = _snowflakeId.NextId() + "";
  246. // request.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  247. // await _azureCosmos.Save(request);
  248. // }
  249. // else
  250. // {
  251. // await _azureCosmos.Update(request);
  252. // }
  253. // return builder.Data(request).build();*/
  254. // }
  255. // /// <summary>
  256. // /// 查询学习单元
  257. // /// </summary>
  258. // /// <param name="request"></param>
  259. // /// <returns></returns>
  260. // [ProducesDefaultResponseType]
  261. // [HttpPost("find-unit")]
  262. // public async Task<IActionResult> FindUnit(JsonElement requert)
  263. // {
  264. // var client = _azureCosmos.GetCosmosClient();
  265. // if (!requert.TryGetProperty("code", out JsonElement code)) return BadRequest();
  266. // //var (id, name, picture, _) = HttpContext.GetAuthTokenInfo();
  267. ///* if (!requert.TryGetProperty("id_token", out JsonElement id_token)) return BadRequest();
  268. // var jwt = new JwtSecurityToken(id_token.GetString());
  269. // if (!jwt.Payload.Iss.Equals("account.teammodel", StringComparison.Ordinal)) return BadRequest();
  270. // var id = jwt.Payload.Sub;*/
  271. // List<object> units = new List<object>();
  272. // var query = $"select c.id,c.resource,c.item, c.name,c.createTime from c";
  273. // await foreach (var item in client.GetContainer("TEAMModelOS", "Teacher").GetItemQueryStreamIterator(queryText: query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"LearnUnit-{code}") }))
  274. // {
  275. // using var json = await JsonDocument.ParseAsync(item.ContentStream);
  276. // if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  277. // {
  278. // foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  279. // {
  280. // units.Add(obj.ToObject<object>());
  281. // }
  282. // }
  283. // }
  284. // return Ok(new { units });
  285. // /*ResponseBuilder builder = ResponseBuilder.custom();
  286. // if (StringHelper.getKeyCount(request) > 0)
  287. // {
  288. // return builder.Data(await _azureCosmos.FindByDict<LearnUnit>(request)).build();
  289. // }
  290. // else {
  291. // return builder.build();
  292. // }*/
  293. // }
  294. // /// <summary>
  295. // /// 删除学习单元
  296. // /// </summary>
  297. // /// <param name="request"></param>
  298. // /// <returns></returns>
  299. // [ProducesDefaultResponseType]
  300. // [HttpPost("delete-unit")]
  301. // public async Task<IActionResult> DeleteUnit(IdPk request)
  302. // {
  303. // ResponseBuilder builder = ResponseBuilder.custom();
  304. // return Ok(await _azureCosmos.DeleteAsync<LearnUnit>(request));
  305. // }
  306. // /// <summary>
  307. // /// 保存或新增编序学习活动
  308. // /// </summary>
  309. // /// <param name="request"></param>
  310. // /// <returns></returns>
  311. // [ProducesDefaultResponseType]
  312. // [HttpPost("upsert-process")]
  313. // public async Task<IActionResult> UpsertProcess(LearnProcess request) {
  314. // //ResponseBuilder builder = ResponseBuilder.custom();
  315. // var client = _azureCosmos.GetCosmosClient();
  316. // LearnProcess learnProcess;
  317. // request.pk = typeof(LearnProcess).Name;
  318. // if (string.IsNullOrEmpty(request.id))
  319. // {
  320. // request.id = _snowflakeId.NextId() + "";
  321. // request.code = typeof(LearnProcess).Name + "-" + request.code;
  322. // request.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  323. // learnProcess = await client.GetContainer("TEAMModelOS", "Teacher").CreateItemAsync(request, new PartitionKey($"LearnProcess-{request.code}"));
  324. // // await _azureCosmos.Save<LearnProcess>(request);
  325. // }
  326. // else {
  327. // learnProcess = await client.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync(request, request.id,new PartitionKey($"{request.code}"));
  328. // //await _azureCosmos.Update<LearnProcess>(request);
  329. // }
  330. // return Ok(new { learnProcess });
  331. // }
  332. // /// <summary>
  333. // /// 查询编序学习活动
  334. // /// </summary>
  335. // /// <param name="request"></param>
  336. // /// <returns></returns>
  337. // [ProducesDefaultResponseType]
  338. // [HttpPost("find-process")]
  339. // public async Task<IActionResult> FindProcess(JsonElement requert)
  340. // {
  341. // var client = _azureCosmos.GetCosmosClient();
  342. // if (!requert.TryGetProperty("id", out JsonElement id)) return BadRequest();
  343. // //var (id, name, picture, _) = HttpContext.GetAuthTokenInfo();
  344. ///* if (!requert.TryGetProperty("id_token", out JsonElement id_token)) return BadRequest();
  345. // var jwt = new JwtSecurityToken(id_token.GetString());
  346. // if (!jwt.Payload.Iss.Equals("account.teammodel", StringComparison.Ordinal)) return BadRequest();
  347. // var id = jwt.Payload.Sub;*/
  348. // List<object> process = new List<object>();
  349. // var query = $"select c.id,c.name,c.subjectCode, c.periodCode,c.Introduce from c where id = {id}";
  350. // await foreach (var item in client.GetContainer("TEAMModelOS", "Teacher").GetItemQueryStreamIterator(queryText: query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"LearnProcess-{id}") }))
  351. // {
  352. // using var json = await JsonDocument.ParseAsync(item.ContentStream);
  353. // if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  354. // {
  355. // foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  356. // {
  357. // process.Add(obj.ToObject<object>());
  358. // }
  359. // }
  360. // }
  361. // return Ok(new { process });
  362. // /* ResponseBuilder builder = ResponseBuilder.custom();
  363. // if (StringHelper.getKeyCount(request) > 0) {
  364. // builder.Data(await _azureCosmos.FindByDict<LearnProcess>(request));
  365. // }
  366. // return builder.build();*/
  367. // }
  368. // /// <summary>
  369. // /// 删除编序学习活动
  370. // /// </summary>
  371. // /// <param name="request"></param>
  372. // /// <returns></returns>
  373. // [ProducesDefaultResponseType]
  374. // [HttpPost("delete-process")]
  375. // public async Task<IActionResult> DeleteProcess(IdPk request)
  376. // {
  377. // //ResponseBuilder builder = ResponseBuilder.custom();
  378. // if (request != null)
  379. // {
  380. // await _azureCosmos.DeleteAsync<LearnProcess>(request);
  381. // }
  382. // return Ok(request);
  383. // }
  384. // /// <summary>
  385. // /// 保存或新增作答记录
  386. // /// </summary>
  387. // /// <param name="request"></param>
  388. // /// <returns></returns>
  389. // [ProducesDefaultResponseType]
  390. // [HttpPost("upsert-record")]
  391. // public async Task<IActionResult> UpsertRecord(List<LearnRecord> request)
  392. // {
  393. // //ResponseBuilder builder = ResponseBuilder.custom();
  394. // List<LearnRecord> leanProcesses = null;
  395. // if (ValidateHelper.IsValid(request))
  396. // {
  397. // request.ForEach(c => {
  398. // if (string.IsNullOrEmpty(c.id)) {
  399. // c.code = typeof(LearnRecord).Name + "-" + c.code;
  400. // }
  401. // });
  402. // leanProcesses = await _azureCosmos.SaveOrUpdateAll<LearnRecord>(request);
  403. // //builder.Data(leanProcesses);
  404. // }
  405. // return Ok(leanProcesses);
  406. // }
  407. // /// <summary>
  408. // /// 查询编序作答记录
  409. // /// </summary>
  410. // /// <param name="request"></param>
  411. // /// <returns></returns>
  412. // [ProducesDefaultResponseType]
  413. // [HttpPost("find-record")]
  414. // public async Task<IActionResult> FindRecord(JsonElement requert)
  415. // {
  416. // var client = _azureCosmos.GetCosmosClient();
  417. // if (!requert.TryGetProperty("id", out JsonElement id)) return BadRequest();
  418. // //var (id, name, picture, _) = HttpContext.GetAuthTokenInfo();
  419. ///* if (!requert.TryGetProperty("id_token", out JsonElement id_token)) return BadRequest();
  420. // var jwt = new JwtSecurityToken(id_token.GetString());
  421. // if (!jwt.Payload.Iss.Equals("account.teammodel", StringComparison.Ordinal)) return BadRequest();
  422. // var id = jwt.Payload.Sub;*/
  423. // List<object> records = new List<object>();
  424. // var query = $"select c.id,c.steps from c where id = {id}";
  425. // await foreach (var item in client.GetContainer("TEAMModelOS", "Student").GetItemQueryStreamIterator(queryText: query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"LearnRecord-{id}") }))
  426. // {
  427. // using var json = await JsonDocument.ParseAsync(item.ContentStream);
  428. // if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
  429. // {
  430. // foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  431. // {
  432. // records.Add(obj.ToObject<object>());
  433. // }
  434. // }
  435. // }
  436. // return Ok(new { records });
  437. // /* ResponseBuilder builder = ResponseBuilder.custom();
  438. // if (StringHelper.getKeyCount(request) > 0)
  439. // {
  440. // builder.Data(await _azureCosmos.FindByDict<LearnRecord>(request));
  441. // }
  442. // return builder.build();*/
  443. // }
  444. // /// <summary>
  445. // /// 删除作答记录
  446. // /// </summary>
  447. // /// <param name="request"></param>
  448. // /// <returns></returns>
  449. // [ProducesDefaultResponseType]
  450. // [HttpPost("delete-record")]
  451. // public async Task<IActionResult> DeleteRecord(IdPk request)
  452. // {
  453. // //ResponseBuilder builder = ResponseBuilder.custom();
  454. // if (request != null)
  455. // {
  456. // await _azureCosmos.DeleteAsync<LearnRecord>(request);
  457. // }
  458. // return Ok(request);
  459. // }
  460. }
  461. }