ConsoleController.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  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. [HttpPost("{ticket}/workspace")]
  128. public async Task<ResultValueDto<WorkspaceRDto>> CreateWorkspace(string ticket, [FromBody] WorkspaceCDto workspace)
  129. {
  130. CheckAccess(ticket);
  131. return await Call(async () => await _srvWorkspace.CreateWorkspaceAsync(workspace));
  132. }
  133. #endregion
  134. #region *** Documents ***
  135. [HttpGet("{Ticket}/documents/{scope}")]
  136. public async Task<ResultsValueDto<DocumentRDto>> GetAllDocuments(string ticket, DocumentsScopeEnums scope, [FromHeader] string page, [FromHeader] string pageSize)
  137. {
  138. CheckAccess(ticket);
  139. return await Call(async () => await _srvDocument.GetAllDocumentsAsync(scope, new HeaderPagingDto(page, pageSize)));
  140. }
  141. [HttpGet("{Ticket}/workspace/{wrkspApiKey}/documents/{scope}")]
  142. public async Task<ResultsValueDto<DocumentRDto>> GetAllWorkspaceDocuments(string ticket, DocumentsScopeEnums scope,string wrkspApiKey,[FromHeader] string apiKeyPassword, [FromHeader] string page, [FromHeader] string pageSize, [FromHeader] string context)
  143. {
  144. CheckAccess(ticket);
  145. return await Call(async () =>
  146. {
  147. var id = await _srvWorkspace.GetWorkspaceIdByAPIAccess(wrkspApiKey, apiKeyPassword, context);
  148. return await _srvDocument.GetAllDocumentsAsync(id, scope, new HeaderPagingDto(page, pageSize));
  149. });
  150. }
  151. [HttpGet("{Ticket}/workspace/{wrkspApiKey}/document/{documentId}")]
  152. public async Task<ResultValueDto<DocumentRDto>> GetAllWorkspaceDocument(string ticket, string wrkspApiKey,long documentId,[FromHeader] string apiKeyPassword, [FromHeader] string context)
  153. {
  154. CheckAccess(ticket);
  155. return await Call(async () =>
  156. {
  157. var id = await _srvWorkspace.GetWorkspaceIdByAPIAccess(wrkspApiKey, apiKeyPassword, context);
  158. return await _srvDocument.GetDocumentAsync(id, documentId);
  159. });
  160. }
  161. [HttpGet("{Ticket}/workspace/{wrkspApiKey}/document/{documentId}/artifact/{artifactId}/content")]
  162. public async Task<IActionResult> GetWorkspaceDocumentArtifactContent(string ticket, string wrkspApiKey,long documentId,long artifactId,[FromHeader] string apiKeyPassword, [FromHeader] string context)
  163. {
  164. // TODO: May wrap to better way
  165. try
  166. {
  167. CheckAccess(ticket);
  168. var id = await _srvWorkspace.GetWorkspaceIdByAPIAccess(wrkspApiKey, apiKeyPassword, context);
  169. var content = await _srvDocument.GetArtifactAsync(id, documentId, artifactId);
  170. return new FileStreamResult(content.Item1, content.Item2);
  171. }
  172. catch (Exception e)
  173. {
  174. return Problem(e.Message);
  175. }
  176. }
  177. [HttpPost("{Ticket}/workspace/{wrkspApiKey}/document")]
  178. public async Task<ResultValueDto<DocumentRDto>> CreateWorkspaceDocument(string ticket, string wrkspApiKey,[FromHeader] string apiKeyPassword, [FromHeader] string context, [FromBody] DocumentCDto document)
  179. {
  180. CheckAccess(ticket);
  181. return await Call(async () =>
  182. {
  183. var id = await _srvWorkspace.GetWorkspaceIdByAPIAccess(wrkspApiKey, apiKeyPassword, context);
  184. return await _srvDocument.CreateDocumentAsync(id, document);
  185. });
  186. }
  187. [HttpPost("{Ticket}/workspace/{wrkspApiKey}/document/{documentId}/artifact/input")]
  188. public async Task<ResultValueDto<ArtifactRDto>> AppendWorkspaceDocumentArtifact(string ticket, string wrkspApiKey, long documentId,[FromHeader] string apiKeyPassword, [FromHeader] string context, [FromBody] ArtifactCDto artifact, IFormFile content)
  189. {
  190. CheckAccess(ticket);
  191. return await Call(async () =>
  192. {
  193. var id = await _srvWorkspace.GetWorkspaceIdByAPIAccess(wrkspApiKey, apiKeyPassword, context);
  194. await using var stream = content.OpenReadStream();
  195. return await _srvDocument.AppendArtifactAsync(id, documentId, artifact, ArtifactTypeEnum.Input, stream);
  196. });
  197. }
  198. #endregion
  199. }
  200. }