ApiStreamController.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. using AipGateway.API.Application;
  2. using AipGateway.API.Application.Interfaces.Services;
  3. using AipGateway.API.Domain.Models.Request;
  4. using AipGateway.API.Domain.Models.Response;
  5. using Microsoft.AspNetCore.Mvc;
  6. using Swashbuckle.AspNetCore.Annotations;
  7. using System.ComponentModel.DataAnnotations;
  8. using System.Diagnostics;
  9. namespace AipGateway.AIP.Service.Controllers
  10. {
  11. [ApiController]
  12. [Route("/api/v1/stream")]
  13. [Produces("application/json")]
  14. public class ApiStreamController : BaseController
  15. {
  16. private readonly ILogger<ApiStreamController> _log;
  17. private readonly IApiStreamService _service;
  18. public ApiStreamController(ILogger<ApiStreamController> log, IApiStreamService apiStreamService)
  19. {
  20. _log = log;
  21. _service = apiStreamService;
  22. }
  23. [HttpPost("info")]
  24. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseInfo>))]
  25. public async Task<IResult> GetStreamInfo([FromBody] RequestStreamInfo req)
  26. {
  27. return await CreateResponseAsync(async () =>
  28. {
  29. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_STREAM_INFO, req.apiKey, req);
  30. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  31. var response = await _service.GetInfo(req);
  32. return Results.Ok(ResponseSuccess(HttpContext, response));
  33. });
  34. }
  35. [HttpPost("set-label")]
  36. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseStream>))]
  37. public async Task<IResult> SetStreamLabel([FromBody] RequestStreamSet req)
  38. {
  39. return await CreateResponseAsync(async () =>
  40. {
  41. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_STREAM_SET_LABEL, req.apiKey, req);
  42. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  43. var response = await _service.SetLabel(req);
  44. return Results.Ok(ResponseSuccess(HttpContext, response));
  45. });
  46. }
  47. [HttpPost("set-labels")]
  48. [SwaggerResponse(200, type: typeof(ApiResponseModel<List<ResponseStream>>))]
  49. public async Task<IResult> SetStreamLabels([FromBody] RequestMultiStreamSet req)
  50. {
  51. return await CreateResponseAsync(async () =>
  52. {
  53. Stopwatch sw = new Stopwatch();
  54. sw.Start();
  55. _log.LogInformation("*** Start SetStreamLabels: {0} EA.", req.streams.Count);
  56. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_STREAM_SET_LABELS, req.apiKey, req);
  57. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  58. int ii = 0;
  59. int jobs = req.streams.Count;
  60. List<ResponseStream> result = new List<ResponseStream>();
  61. var tasks = new Task<ResponseStream>[jobs];
  62. foreach (var obj in req.streams)
  63. {
  64. RequestStreamSet reqSet = new RequestStreamSet {
  65. apiKey = req.apiKey,
  66. email = req.email,
  67. decryptKey = req.decryptKey,
  68. aipGuid = req.aipGuid,
  69. comment = req.comment,
  70. stream = new RequestStream
  71. {
  72. dispFileName = obj.dispFileName,
  73. fileData = obj.fileData,
  74. }
  75. };
  76. tasks[ii++] = _service.SetLabel(reqSet);
  77. }
  78. await Task.WhenAll(tasks);
  79. foreach (var task in tasks)
  80. {
  81. result.Add(task.Result);
  82. }
  83. HttpContext.Items[GlobalConstants.API_RESULT_CODE] = 0;
  84. HttpContext.Items[GlobalConstants.API_RESULT_MESSAGE] = GlobalConstants.API_RESULT_SUCCESS;
  85. sw.Stop();
  86. _log.LogInformation("*** ...End SetStreamLabels: {0} EA. {1,6} ms.", req.streams.Count, sw.ElapsedMilliseconds.ToString("#,##0"));
  87. return Results.Ok(new ApiResponseModel<List<ResponseStream>>()
  88. {
  89. success = true,
  90. errorCode = 0,
  91. errorMessage = GlobalConstants.API_RESULT_SUCCESS,
  92. result = result,
  93. });
  94. });
  95. }
  96. [HttpPost("delete-label")]
  97. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseStream>))]
  98. public async Task<IResult> DelStreamLabel([FromBody] RequestStreamDel req)
  99. {
  100. return await CreateResponseAsync(async () =>
  101. {
  102. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_STREAM_DELETE_LABELS, req.apiKey, req);
  103. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  104. var response = await _service.DelLabel(req);
  105. return Results.Ok(ResponseSuccess(HttpContext, response));
  106. });
  107. }
  108. [HttpPost("delete-labels")]
  109. [SwaggerResponse(200, type: typeof(ApiResponseModel<List<ResponseStream>>))]
  110. public async Task<IResult> DelStreamLabels([FromBody] RequestMultiStreamDel req)
  111. {
  112. return await CreateResponseAsync(async () =>
  113. {
  114. Stopwatch sw = new Stopwatch();
  115. sw.Start();
  116. _log.LogInformation("*** Start DelStreamLabels: {0} EA.", req.streams.Count);
  117. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_STREAM_DELETE_LABEL, req.apiKey, req);
  118. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  119. int ii = 0;
  120. int jobs = req.streams.Count;
  121. List<ResponseStream> result = new List<ResponseStream>();
  122. var tasks = new Task<ResponseStream>[jobs];
  123. foreach (var obj in req.streams)
  124. {
  125. RequestStreamDel reqSet = new RequestStreamDel {
  126. apiKey = req.apiKey,
  127. email = req.email,
  128. decryptKey = req.decryptKey,
  129. comment = req.comment,
  130. stream = new RequestStream {
  131. dispFileName = obj.dispFileName,
  132. fileData = obj.fileData,
  133. }
  134. };
  135. tasks[ii++] = _service.DelLabel(reqSet);
  136. }
  137. await Task.WhenAll(tasks);
  138. foreach (var task in tasks)
  139. {
  140. result.Add(task.Result);
  141. }
  142. HttpContext.Items[GlobalConstants.API_RESULT_CODE] = 0;
  143. HttpContext.Items[GlobalConstants.API_RESULT_MESSAGE] = GlobalConstants.API_RESULT_SUCCESS;
  144. sw.Stop();
  145. _log.LogInformation("*** ...End DelStreamLabels: {0} EA. {1,6} ms.", req.streams.Count, sw.ElapsedMilliseconds.ToString("#,##0"));
  146. return Results.Ok(new ApiResponseModel<List<ResponseStream>>()
  147. {
  148. success = true,
  149. errorCode = 0,
  150. errorMessage = GlobalConstants.API_RESULT_SUCCESS,
  151. result = result,
  152. });
  153. });
  154. }
  155. [HttpPost("set-protection")]
  156. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseStream>))]
  157. public async Task<IResult> SetStreamProtection([FromBody] RequestStreamSet req)
  158. {
  159. return await CreateResponseAsync(async () =>
  160. {
  161. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_STREAM_SET_PROTECTION, req.apiKey, req);
  162. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  163. var response = await _service.SetProtection(req);
  164. return Results.Ok(ResponseSuccess(HttpContext, response));
  165. });
  166. }
  167. [HttpPost("delete-protection")]
  168. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseStream>))]
  169. public async Task<IResult> DelStreamProtection([FromBody] RequestStreamDel req)
  170. {
  171. return await CreateResponseAsync(async () =>
  172. {
  173. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_STREAM_DELETE_PROTECTIN, req.apiKey, req);
  174. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  175. var response = await _service.DelProtection(req);
  176. return Results.Ok(ResponseSuccess(HttpContext, response));
  177. });
  178. }
  179. [HttpPost("set-label-protection")]
  180. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseStream>))]
  181. public async Task<IResult> SetStreamLabelProtection([FromBody] RequestStreamAllSet req)
  182. {
  183. return await CreateResponseAsync(async () =>
  184. {
  185. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_STREAM_SET_LABEL_PROTECTION, req.apiKey, req);
  186. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  187. var response = await _service.SetLabelProtection(req);
  188. return Results.Ok(ResponseSuccess(HttpContext, response));
  189. });
  190. }
  191. [HttpPost("delete-label-protection")]
  192. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseStream>))]
  193. public async Task<IResult> DelStreamLabelProtection([FromBody] RequestStreamDel req)
  194. {
  195. return await CreateResponseAsync(async () =>
  196. {
  197. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_STREAM_DELETE_LABEL_PROTECTION, req.apiKey, req);
  198. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  199. var response = await _service.DelLabelProtection(req);
  200. return Results.Ok(ResponseSuccess(HttpContext, response));
  201. });
  202. }
  203. [HttpPost("encrypt")]
  204. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseStream>))]
  205. public async Task<IResult> EncryptStream([Required] IFormFile file, [Required] string apiKey, [Required] string email)
  206. {
  207. return await CreateResponseAsync(async () =>
  208. {
  209. RequestBase req = new RequestBase
  210. {
  211. apiKey = apiKey,
  212. email = email,
  213. decryptKey = string.Empty,
  214. apiGuid = string.Empty
  215. };
  216. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_STREAM_ENCRYPT, apiKey, req);
  217. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  218. var response = await _service.EncryptFile(file, req);
  219. return Results.Ok(ResponseSuccess(HttpContext, response));
  220. });
  221. }
  222. [HttpPost("decrypt")]
  223. [SwaggerResponse(200, type: typeof(ApiResponseModel<ResponseStream>))]
  224. public async Task<IResult> DecryptStream([Required] IFormFile file, [Required] string apiKey, [Required] string email)
  225. {
  226. return await CreateResponseAsync(async () =>
  227. {
  228. RequestBase req = new RequestBase
  229. {
  230. apiKey = apiKey,
  231. email = email,
  232. decryptKey = string.Empty,
  233. apiGuid = string.Empty
  234. };
  235. GlobalConstants.SetAuthorization(HttpContext, GlobalConstants.API_STREAM_DECRYPT, apiKey, req);
  236. HttpContext.Items[GlobalConstants.API_REQUEST] = (RequestBase)req;
  237. var response = await _service.DecryptFile(file, req);
  238. return Results.Ok(ResponseSuccess(HttpContext, response));
  239. });
  240. }
  241. }
  242. }