ConsoleController.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.IO;
  5. using System.Threading.Tasks;
  6. using BO.AppServer.Business;
  7. using BO.AppServer.Business.Services;
  8. using BO.AppServer.Metadata.Dto;
  9. using BO.AppServer.Metadata.Enums;
  10. using Microsoft.AspNetCore.Authorization;
  11. using Microsoft.AspNetCore.Http;
  12. using Microsoft.AspNetCore.Mvc;
  13. using Microsoft.Extensions.Logging;
  14. using Quadarax.Foundation.Core.Data.Interface.Entity.Dto;
  15. namespace BO.AppServer.Web.Services
  16. {
  17. [Authorize]
  18. [Route("api/[controller]")]
  19. [ApiController]
  20. public class ConsoleController : Base<ConsoleController>
  21. {
  22. private UserService _srvUsers;
  23. private CatalogueService _srvCatalogue;
  24. private WorkspaceService _srvWorkspace;
  25. private DocumentService _srvDocument;
  26. protected override RoleEnum LoginRoleAllowed => RoleEnum.Console;
  27. public ConsoleController(UserService srvUsers,
  28. CatalogueService srvCatalogue,
  29. WorkspaceService srvWorkspace,
  30. DocumentService srvDocument,
  31. ILoggerFactory logger,
  32. AccessService srvAccess) : base(logger, srvAccess)
  33. {
  34. _srvUsers = srvUsers ?? throw new ArgumentNullException(nameof(srvUsers));
  35. _srvCatalogue = srvCatalogue ?? throw new ArgumentNullException(nameof(srvCatalogue));
  36. _srvWorkspace = srvWorkspace ?? throw new ArgumentNullException(nameof(srvWorkspace));
  37. _srvDocument = srvDocument ?? throw new ArgumentNullException(nameof(srvDocument));
  38. }
  39. #region *** User ***
  40. [HttpGet("{ticket}/users/{scope}")]
  41. public async Task<ResultsValueDto<UserRDto>> GetAllUsers(string ticket, UserScopeEnums scope, [FromHeader] string page, [FromHeader] string pageSize)
  42. {
  43. CheckAccess(ticket);
  44. return await Call(async () => await _srvUsers.GetAllUsersAsync(scope, new HeaderPagingDto(page, pageSize)));
  45. }
  46. [HttpGet("{ticket}/user/{identificationType}/{identificationValue}")]
  47. public async Task<ResultValueDto<UserRDto>> GetUser(string ticket, IdentificationTypeEnum identificationType, string identificationValue)
  48. {
  49. CheckAccess(ticket);
  50. return await Call(async () => await _srvUsers.GetUserAsync(1));
  51. }
  52. [HttpPost("{ticket}/user")]
  53. public async Task<ResultValueDto<UserRDto>> CreateUser(string ticket, [FromBody] UserCDto user)
  54. {
  55. CheckAccess(ticket);
  56. return await Call(async () => await _srvUsers.CreateUserAsync(user));
  57. }
  58. #endregion
  59. #region *** Catalogues ***
  60. [HttpGet("{Ticket}/bplans/{scope}")]
  61. public async Task<ResultsValueDto<BillingPlanRDto>> GetAllBillingPlans(string ticket, BillingPlanScopeEnums scope, [FromHeader] string page, [FromHeader] string pageSize)
  62. {
  63. CheckAccess(ticket);
  64. return await Call(async () => await _srvCatalogue.GetBillingPlansAsync(scope, new HeaderPagingDto(page, pageSize)));
  65. }
  66. [HttpPost("{Ticket}/bplan")]
  67. public async Task<ResultValueDto<BillingPlanRDto>> CreateBillingPlan(string ticket, [FromBody] BillingPlanCDto billingPlan)
  68. {
  69. CheckAccess(ticket);
  70. return await Call(async () => await _srvCatalogue.CreateBillingPlanAsync(billingPlan));
  71. }
  72. [HttpPut("{Ticket}/bplan")]
  73. public async Task<ResultValueDto<BillingPlanRDto>> UpdateBillingPlan(string ticket, [FromBody] BillingPlanUDto billingPlan)
  74. {
  75. CheckAccess(ticket);
  76. return await Call(async () => await _srvCatalogue.UpdateBillingPlanAsync(billingPlan));
  77. }
  78. [HttpGet("{Ticket}/mtypes/{scope}")]
  79. public async Task<ResultsValueDto<MimeTypeRDto>> GetAllMimeTypes(string ticket, MimeTypeScopeEnums scope, [FromHeader] string page, [FromHeader] string pageSize)
  80. {
  81. CheckAccess(ticket);
  82. return await Call(async () => await _srvCatalogue.GetMimeTypesAsync(scope, new HeaderPagingDto(page, pageSize)));
  83. }
  84. [HttpPost("{Ticket}/mtype")]
  85. public async Task<ResultValueDto<MimeTypeRDto>> CreateMimeType(string ticket, [FromBody] MimeTypeCDto mimeType)
  86. {
  87. CheckAccess(ticket);
  88. return await Call(async () => await _srvCatalogue.CreateMimeTypeAsync(mimeType));
  89. }
  90. [HttpPut("{Ticket}/mtype")]
  91. public async Task<ResultValueDto<MimeTypeRDto>> UpdateMimeType(string ticket, [FromBody] MimeTypeUDto mimeType)
  92. {
  93. CheckAccess(ticket);
  94. return await Call(async () => await _srvCatalogue.UpdateMimeTypeAsync(mimeType));
  95. }
  96. #endregion
  97. #region *** Statistics ***
  98. [HttpGet("{ticket}/versions")]
  99. public async Task<ResultsValueDto<AssemblyInfoDto>> GetVersions(string ticket)
  100. {
  101. CheckAccess(ticket);
  102. return await Call(async () =>
  103. {
  104. var assemblies = AppDomain.CurrentDomain.GetAssemblies();
  105. var result = new List<AssemblyInfoDto>();
  106. foreach (var assembly in assemblies)
  107. {
  108. var fiv = FileVersionInfo.GetVersionInfo(assembly.Location);
  109. result.Add(new AssemblyInfoDto()
  110. {
  111. FileVersion = fiv.FileVersion,
  112. AssemblyVersion = assembly.GetName().Version?.ToString(),
  113. Name = assembly.GetName().Name
  114. });
  115. }
  116. return new ResultsValueDto<AssemblyInfoDto>(result);
  117. });
  118. }
  119. #endregion
  120. #region *** Workspace ***
  121. [HttpGet("{Ticket}/workspaces/{scope}")]
  122. public async Task<ResultsValueDto<WorkspaceRDto>> GetAllWorkspaces(string ticket, WorkspaceScopeEnums scope, [FromHeader] string page, [FromHeader] string pageSize, [FromHeader] string context)
  123. {
  124. CheckAccess(ticket);
  125. return await Call(async () => await _srvWorkspace.GetWorkspacesAsync(scope, new HeaderPagingDto(page, pageSize), context));
  126. }
  127. [HttpGet("{ticket}/workspace/{identificationType}/{identificationValue}")]
  128. public async Task<ResultValueDto<WorkspaceRDto>> GetWorkspace(string ticket, WorkspaceIdentificationTypeEnum identificationType, string identificationValue)
  129. {
  130. CheckAccess(ticket);
  131. return await Call(async () => await _srvWorkspace.GetWorkspace(identificationType, identificationValue));
  132. }
  133. [HttpPost("{ticket}/workspace")]
  134. public async Task<ResultValueDto<WorkspaceRDto>> CreateWorkspace(string ticket, [FromBody] WorkspaceCDto workspace)
  135. {
  136. CheckAccess(ticket);
  137. return await Call(async () => await _srvWorkspace.CreateWorkspaceAsync(workspace));
  138. }
  139. #endregion
  140. #region *** Documents ***
  141. [HttpGet("{Ticket}/documents/{scope}")]
  142. public async Task<ResultsValueDto<DocumentRDto>> GetAllDocuments(string ticket, DocumentsScopeEnums scope, [FromHeader] string page, [FromHeader] string pageSize)
  143. {
  144. CheckAccess(ticket);
  145. return await Call(async () => await _srvDocument.GetAllDocumentsAsync(scope, new HeaderPagingDto(page, pageSize)));
  146. }
  147. [HttpGet("{Ticket}/workspace/{wrkspApiKey}/documents/{scope}")]
  148. public async Task<ResultsValueDto<DocumentRDto>> GetAllWorkspaceDocuments(string ticket, DocumentsScopeEnums scope,string wrkspApiKey,[FromHeader] string apiKeyPassword, [FromHeader] string page, [FromHeader] string pageSize, [FromHeader] string context)
  149. {
  150. CheckAccess(ticket);
  151. return await Call(async () =>
  152. {
  153. var id = await _srvWorkspace.GetWorkspaceIdByAPIAccess(wrkspApiKey, apiKeyPassword, context);
  154. return await _srvDocument.GetAllDocumentsAsync(id, scope, new HeaderPagingDto(page, pageSize));
  155. });
  156. }
  157. [HttpGet("{Ticket}/workspace/{wrkspApiKey}/document/{documentId}")]
  158. public async Task<ResultValueDto<DocumentRDto>> GetWorkspaceDocument(string ticket, string wrkspApiKey,long documentId,[FromHeader] string apiKeyPassword, [FromHeader] string context)
  159. {
  160. CheckAccess(ticket);
  161. return await Call(async () =>
  162. {
  163. var id = await _srvWorkspace.GetWorkspaceIdByAPIAccess(wrkspApiKey, apiKeyPassword, context);
  164. return await _srvDocument.GetDocumentAsync(id, documentId);
  165. });
  166. }
  167. [HttpGet("{Ticket}/workspace/{wrkspApiKey}/document")]
  168. public async Task<ResultValueDto<DocumentRDto>> GetWorkspaceDocumentByName(string ticket, string wrkspApiKey,[FromHeader]string documentName,[FromHeader] string apiKeyPassword, [FromHeader] string context)
  169. {
  170. CheckAccess(ticket);
  171. return await Call(async () =>
  172. {
  173. var id = await _srvWorkspace.GetWorkspaceIdByAPIAccess(wrkspApiKey, apiKeyPassword, context);
  174. return await _srvDocument.GetDocumentByNameAsync(id, documentName);
  175. });
  176. }
  177. [HttpGet("{Ticket}/workspace/{wrkspApiKey}/document/{identificationType}/{identificationValue}")]
  178. public async Task<ResultValueDto<DocumentRDto>> GetWorkspaceDocumentByIdentification(string ticket, string wrkspApiKey,[FromHeader] string apiKeyPassword, IdentificationTypeEnum identificationType, string identificationValue, [FromHeader] string context)
  179. {
  180. CheckAccess(ticket);
  181. return await Call(async () =>
  182. {
  183. var id = await _srvWorkspace.GetWorkspaceIdByAPIAccess(wrkspApiKey, apiKeyPassword, context);
  184. return await _srvDocument.GetDocumentAsync(id,identificationType,identificationValue);
  185. });
  186. }
  187. [HttpGet("{Ticket}/workspace/{wrkspApiKey}/document/{documentId}/artifact/{artifactId}/content")]
  188. public async Task<IActionResult> GetWorkspaceDocumentArtifactContent(string ticket, string wrkspApiKey,long documentId,long artifactId,[FromHeader] string apiKeyPassword, [FromHeader] string context)
  189. {
  190. // TODO: May wrap to better way
  191. try
  192. {
  193. CheckAccess(ticket);
  194. var id = await _srvWorkspace.GetWorkspaceIdByAPIAccess(wrkspApiKey, apiKeyPassword, context);
  195. var content = await _srvDocument.GetArtifactAsync(id, documentId, artifactId);
  196. return new FileStreamResult(content.Item1, content.Item2);
  197. }
  198. catch (Exception e)
  199. {
  200. return Problem(e.Message);
  201. }
  202. }
  203. [HttpPost("{Ticket}/workspace/{wrkspApiKey}/document")]
  204. public async Task<ResultValueDto<DocumentRDto>> CreateWorkspaceDocument(string ticket, string wrkspApiKey,[FromHeader] string apiKeyPassword, [FromHeader] string context, [FromBody] DocumentCDto document)
  205. {
  206. CheckAccess(ticket);
  207. return await Call(async () =>
  208. {
  209. var id = await _srvWorkspace.GetWorkspaceIdByAPIAccess(wrkspApiKey, apiKeyPassword, context);
  210. return await _srvDocument.CreateDocumentAsync(id, document);
  211. });
  212. }
  213. [HttpPost("{Ticket}/workspace/{wrkspApiKey}/document/{documentId}/artifact/input")]
  214. [RequestFormLimits(MultipartBodyLengthLimit = 209715200)]
  215. [RequestSizeLimit(209715200)]
  216. // [FromBody] ArtifactCDto artifact,
  217. public async Task<ResultValueDto<ArtifactRDto>> AppendWorkspaceDocumentArtifact(string ticket, string wrkspApiKey, long documentId,[FromHeader] string apiKeyPassword, [FromHeader] string context, [FromHeader] bool overwrite, IFormFile content)
  218. {
  219. CheckAccess(ticket);
  220. return await Call(async () =>
  221. {
  222. var id = await _srvWorkspace.GetWorkspaceIdByAPIAccess(wrkspApiKey, apiKeyPassword, context);
  223. var artifact = _srvDocument.CreateArtifactDto(content.FileName, content.ContentType);
  224. await using var stream = content.OpenReadStream();
  225. return await _srvDocument.AppendArtifactAsync(id, documentId, artifact, overwrite, ArtifactTypeEnum.Input, stream);
  226. });
  227. }
  228. [HttpDelete("{Ticket}/workspace/{wrkspApiKey}/document/{documentId}/artifact")]
  229. public async Task<ResultsValueDto<ArtifactRDto>> DeleteWorkspaceDocumentArtifacts(string ticket, string wrkspApiKey, long documentId,[FromHeader] string apiKeyPassword, [FromHeader] string context, [FromHeader] bool force)
  230. {
  231. CheckAccess(ticket);
  232. return await Call(async () =>
  233. {
  234. var id = await _srvWorkspace.GetWorkspaceIdByAPIAccess(wrkspApiKey, apiKeyPassword, context);
  235. return await _srvDocument.ClearDocumentArtifactsAsync(id, documentId,force);
  236. });
  237. }
  238. #endregion
  239. }
  240. }