TestController.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using Azure.Cosmos;
  2. using Microsoft.AspNetCore.Mvc;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text.Json;
  7. using System.Threading.Tasks;
  8. using TEAMModelOS.SDK.DI;
  9. using TEAMModelOS.SDK.Extension;
  10. namespace TEAMModelOS.Controllers.XTest
  11. {
  12. [Route("test")]
  13. [ApiController]
  14. public class TestController :ControllerBase
  15. {
  16. private readonly AzureStorageFactory _azureStorage;
  17. private readonly AzureRedisFactory _azureRedis;
  18. private readonly AzureCosmosFactory _azureCosmos;
  19. public TestController(AzureCosmosFactory azureCosmos, AzureRedisFactory azureRedis, AzureStorageFactory azureStorage) {
  20. _azureCosmos = azureCosmos;
  21. _azureRedis = azureRedis;
  22. _azureStorage = azureStorage;
  23. }
  24. /// <summary>
  25. /// 测试blob多线程写入同一个文件
  26. /// </summary>
  27. /// <returns></returns>
  28. [ProducesDefaultResponseType]
  29. [HttpGet("multiple-blob")]
  30. public async Task<IActionResult> MultipleBlob() {
  31. List<Task<string>> tasks = new List<Task<string>>();
  32. for (int i = 0; i < 100; i++) {
  33. tasks.Add(_azureStorage.UploadFileByContainer("hbcn", $"{i}", "test", $"index.json"));
  34. }
  35. await Task.WhenAll(tasks);
  36. return Ok();
  37. }
  38. /// <summary>
  39. /// 测试redis通配符
  40. /// </summary>
  41. /// <param name="request"></param>
  42. /// <returns></returns>
  43. [ProducesDefaultResponseType]
  44. [HttpGet("test-redis")]
  45. public async Task<IActionResult> TestRedis( ) {
  46. var db = _azureRedis.GetRedisClient(8);
  47. //var keys = server.Keys(pattern: "Vote*", database: db.Database);
  48. //foreach (var key in keys) {
  49. // Console.WriteLine(key);
  50. //}
  51. // db.HashScanAsync()
  52. return Ok() ;
  53. }
  54. /// <summary>
  55. /// 删除
  56. /// </summary>
  57. /// <param name="request"></param>
  58. /// <returns></returns>
  59. [ProducesDefaultResponseType]
  60. //[AuthToken(Roles = "teacher")]
  61. [HttpPost("delete")]
  62. public async Task<IActionResult> Delete(JsonElement request)
  63. {
  64. try
  65. {
  66. if (!request.TryGetProperty("code", out JsonElement code)) return BadRequest();
  67. if (!request.TryGetProperty("scope", out JsonElement scope)) return BadRequest();
  68. var client = _azureCosmos.GetCosmosClient();
  69. List<Task> tasksFiles = new List<Task>();
  70. var query = $"select c.id from c ";
  71. if (scope.ToString().Equals("school"))
  72. {
  73. var ids = client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"{code}") });
  74. await foreach (var id in ids)
  75. {
  76. using var json = await JsonDocument.ParseAsync(id.ContentStream);
  77. var jsonList = json.RootElement.GetProperty("Documents").EnumerateArray();
  78. //批量删除
  79. foreach (var obj in jsonList)
  80. {
  81. tasksFiles.Add(client.GetContainer("TEAMModelOS", "School").DeleteItemStreamAsync(obj.GetProperty("id").ToString(), new PartitionKey($"{code}")));
  82. }
  83. }
  84. }
  85. else if (scope.ToString().Equals("teacher")) {
  86. var ids = client.GetContainer("TEAMModelOS", "Teacher").GetItemQueryStreamIterator(queryText: query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"{code}") });
  87. await foreach (var id in ids)
  88. {
  89. using var json = await JsonDocument.ParseAsync(id.ContentStream);
  90. var jsonList = json.RootElement.GetProperty("Documents").EnumerateArray();
  91. //批量删除
  92. foreach (var obj in jsonList)
  93. {
  94. //tasksFiles.Add(client.GetContainer("TEAMModelOS", "Teacher").DeleteItemStreamAsync(obj.GetProperty("id").ToString(), new PartitionKey($"{code}")));
  95. }
  96. }
  97. }
  98. await Task.WhenAll(tasksFiles);
  99. return Ok(new { code = 1 });
  100. }
  101. catch (Exception e)
  102. {
  103. return BadRequest(e.StackTrace);
  104. }
  105. }
  106. }
  107. }