ResourceController.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. using Microsoft.AspNetCore.Mvc;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using TEAMModelOS.SDK.Context.Exception;
  7. using TEAMModelOS.SDK;
  8. using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
  9. using TEAMModelOS.SDK.DI;
  10. using TEAMModelOS.Service.Models;
  11. using System.Text.Json;
  12. using TEAMModelOS.SDK.Helper.Common.StringHelper;
  13. namespace TEAMModelOS.Controllers
  14. {
  15. [Route("api/[controller]")]
  16. [ApiController]
  17. public class ResourceController : BaseController
  18. {
  19. private AzureStorageFactory _table;
  20. private AzureCosmosFactory _cosmos;
  21. private SnowflakeId SnowflakeId;
  22. public ResourceController(AzureStorageFactory table, AzureCosmosFactory cosmos, SnowflakeId _SnowflakeId)
  23. {
  24. _table = table;
  25. _cosmos = cosmos;
  26. SnowflakeId = _SnowflakeId;
  27. }
  28. /// <summary>
  29. /// 保存或更新SyllabusResource
  30. /// </summary>
  31. /// <param name="request"></param>
  32. /// <returns></returns>
  33. [HttpPost("upsertAll")]
  34. public async Task<BaseResponse> UpsertAll(List<Resource> request)
  35. {
  36. ResponseBuilder builder = ResponseBuilder.custom();
  37. if (request.IsNotEmpty())// != null )
  38. {
  39. List<Resource> resource = request;
  40. foreach (Resource item in resource)
  41. {
  42. if (item.id == null)
  43. {
  44. item.id = SnowflakeId.NextId()+""; //item.sha1Code + "-" + item.extension + "-" + item.size;
  45. }
  46. }
  47. List<Resource> ts = await _cosmos.SaveOrUpdateAll(resource);
  48. builder.Data("保存或新增成功");
  49. }
  50. return builder.build();
  51. }
  52. /// <summary>
  53. /// 获取SyllabusResource
  54. /// </summary>
  55. /// <param name="request"></param>
  56. /// <returns></returns>
  57. [HttpPost("find")]
  58. public async Task<BaseResponse> Find(JsonElement request)
  59. {
  60. // request.@params.TryAdd("PartitionKey", request.lang);
  61. ResponseBuilder builder = ResponseBuilder.custom();
  62. if (StringHelper.getKeyCount(request) > 0)
  63. {
  64. List<Resource> data = new List<Resource>();
  65. data = await _cosmos.FindByDict<Resource>(request);
  66. return builder.Data(data.OrderBy(m => m.createTime)).Extend(new Dictionary<string, object> { { "count", data.IsNotEmpty() ? data.Count : 0 } }).build();
  67. }
  68. else {
  69. return builder.Error(ResponseCode.PARAMS_ERROR, "参数异常!").build();
  70. }
  71. }
  72. /// <summary>
  73. /// 获取SyllabusResource
  74. /// </summary>
  75. /// <param name="request"></param>
  76. /// <returns></returns>
  77. [HttpPost("findById")]
  78. public async Task<BaseResponse> FindSyllabusResourceById(List<string> request)
  79. {
  80. // request.@params.TryAdd("PartitionKey", request.lang);
  81. ResponseBuilder builder = ResponseBuilder.custom();
  82. if (request != null)
  83. {
  84. List<Resource> data = new List<Resource>();
  85. data = await _cosmos.FindByIds<Resource>(request);
  86. return builder.Data(data.OrderBy(m => m.createTime)).Extend(new Dictionary<string, object> { { "count", data.IsNotEmpty() ? data.Count : 0 } }).build();
  87. }
  88. else
  89. { return builder.Error(ResponseCode.PARAMS_ERROR, "参数异常!").build(); }
  90. }
  91. /// <summary>
  92. /// 删除 SyllabusResource
  93. /// </summary>
  94. /// <param name="request"></param>
  95. /// <returns></returns>
  96. [HttpPost("delete")]
  97. public async Task<BaseResponse> DeleteSyllabusResource(JsonElement request)
  98. {
  99. ResponseBuilder builder = ResponseBuilder.custom();
  100. List<Resource> syllabusResources = await Delete<Resource>(request, builder);
  101. foreach (Resource syllabusResource in syllabusResources) {
  102. string blobUrl = syllabusResource.blobUrl;
  103. if (!string.IsNullOrEmpty(blobUrl))
  104. {
  105. // await _azureBlobDBRepository.Deleteblob(blobUrl);
  106. }
  107. string compressUrl = syllabusResource.compressUrl;
  108. if (!string.IsNullOrEmpty(compressUrl))
  109. {
  110. // await _azureBlobDBRepository.Deleteblob(compressUrl);
  111. }
  112. }
  113. return builder.build();
  114. }
  115. private async Task<List<T>> Delete<T>(JsonElement request, ResponseBuilder builder)where T:ID
  116. {
  117. //Dictionary<string, object> dict = new Dictionary<string, object>();
  118. var emobj = request.EnumerateObject();
  119. int keys = 0;
  120. while (emobj.MoveNext())
  121. {
  122. keys++;
  123. //dict[emobj.Current.Name] = emobj.Current.Value;
  124. }
  125. if (keys > 0)
  126. {
  127. List<T> schoolBlocks = await _cosmos.FindByDict<T>(request);
  128. Type t = typeof(T);
  129. if (schoolBlocks.IsNotEmpty())
  130. {
  131. await _cosmos.DeleteAll<T>(schoolBlocks);
  132. builder.Data("删除成功");
  133. }
  134. return schoolBlocks;
  135. }
  136. else {
  137. builder.Error(ResponseCode.PARAMS_ERROR, "参数异常!");
  138. return null;
  139. }
  140. }
  141. /// <summary>
  142. /// 查询 资源被引用次数
  143. /// </summary>
  144. /// <param name="request"></param>
  145. /// <returns></returns>
  146. [HttpPost("reference")]
  147. public async Task<BaseResponse> Reference(JsonElement request)
  148. {
  149. ResponseBuilder builder = ResponseBuilder.custom();
  150. Dictionary<string, object> dict = new Dictionary<string, object>();
  151. var emobj = request.EnumerateObject();
  152. while (emobj.MoveNext())
  153. {
  154. dict[emobj.Current.Name] = emobj.Current.Value;
  155. }
  156. List<ResourceReference> data = new List<ResourceReference>();
  157. data = await _table.FindListByDict<ResourceReference>(dict);
  158. return builder.Data(data.OrderBy(m => m.CreateTime)).Extend(new Dictionary<string, object> { { "count", data.Count } }).build();
  159. }
  160. }
  161. }