ConsoleController.cs 13 KB

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