EdgegapAppApi.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. using System.Net;
  2. using System.Net.Http;
  3. using System.Threading.Tasks;
  4. using Edgegap.Editor.Api.Models.Requests;
  5. using Edgegap.Editor.Api.Models.Results;
  6. namespace Edgegap.Editor.Api
  7. {
  8. /// <summary>
  9. /// Wraps the v1/app API endpoint: Applications Control API.
  10. /// - API Doc | https://docs.edgegap.com/api/#tag/Applications
  11. /// </summary>
  12. public class EdgegapAppApi : EdgegapApiBase
  13. {
  14. public EdgegapAppApi(
  15. ApiEnvironment apiEnvironment,
  16. string apiToken,
  17. EdgegapWindowMetadata.LogLevel logLevel = EdgegapWindowMetadata.LogLevel.Error)
  18. : base(apiEnvironment, apiToken, logLevel)
  19. {
  20. }
  21. #region API Methods
  22. /// <summary>
  23. /// POST to v1/app
  24. /// - Create an application that will regroup application versions.
  25. /// - API Doc | https://docs.edgegap.com/api/#tag/Applications/operation/application-post
  26. /// </summary>
  27. /// <returns>
  28. /// Http info with GetCreateAppResult data model
  29. /// - Success: 200
  30. /// - Fail: 409 (app already exists), 400 (reached limit)
  31. /// </returns>
  32. public async Task<EdgegapHttpResult<GetCreateAppResult>> CreateApp(CreateAppRequest request)
  33. {
  34. HttpResponseMessage response = await PostAsync("v1/app", request.ToString());
  35. EdgegapHttpResult<GetCreateAppResult> result = new EdgegapHttpResult<GetCreateAppResult>(response); // MIRROR CHANGE: 'new()' not supported in Unity 2020
  36. bool isSuccess = response.StatusCode == HttpStatusCode.OK; // 200
  37. if (!isSuccess)
  38. return result;
  39. return result;
  40. }
  41. /// <summary>
  42. /// GET to v1/app
  43. /// - Get an application that will regroup application versions.
  44. /// - API Doc | https://docs.edgegap.com/api/#tag/Applications/operation/application-post
  45. /// </summary>
  46. /// <returns>
  47. /// Http info with GetCreateAppResult data model
  48. /// - Success: 200
  49. /// </returns>
  50. public async Task<EdgegapHttpResult<GetCreateAppResult>> GetApp(string appName)
  51. {
  52. HttpResponseMessage response = await GetAsync($"v1/app/{appName}");
  53. EdgegapHttpResult<GetCreateAppResult> result = new EdgegapHttpResult<GetCreateAppResult>(response); // MIRROR CHANGE: 'new()' not supported in Unity 2020
  54. bool isSuccess = response.StatusCode == HttpStatusCode.OK; // 200
  55. if (!isSuccess)
  56. return result;
  57. return result;
  58. }
  59. /// <summary>
  60. /// PATCH to v1/app/{app_name}/version/{version_name}
  61. /// - Update an *existing* application version with new specifications.
  62. /// - API Doc | https://docs.edgegap.com/api/#tag/Applications/operation/app-versions-patch
  63. /// </summary>
  64. /// <returns>
  65. /// Http info with UpdateAppVersionRequest data model
  66. /// - Success: 200
  67. /// </returns>
  68. public async Task<EdgegapHttpResult<UpsertAppVersionResult>> UpdateAppVersion(UpdateAppVersionRequest request)
  69. {
  70. string relativePath = $"v1/app/{request.AppName}/version/{request.VersionName}";
  71. HttpResponseMessage response = await PatchAsync(relativePath, request.ToString());
  72. EdgegapHttpResult<UpsertAppVersionResult> result = new EdgegapHttpResult<UpsertAppVersionResult>(response); // MIRROR CHANGE: 'new()' not supported in Unity 2020
  73. bool isSuccess = response.StatusCode == HttpStatusCode.OK; // 200
  74. if (!isSuccess)
  75. return result;
  76. return result;
  77. }
  78. /// <summary>
  79. /// POST to v1/app/{app_name}/version
  80. /// - Create an new application version with new specifications.
  81. /// - API Doc | https://docs.edgegap.com/api/#tag/Applications/operation/app-version-post
  82. /// </summary>
  83. /// <returns>
  84. /// Http info with UpdateAppVersionRequest data model
  85. /// - Success: 200 (no result model)
  86. /// - Fail: 409 (app already exists), 400 (reached limit)
  87. /// </returns>
  88. public async Task<EdgegapHttpResult<UpsertAppVersionResult>> CreateAppVersion(CreateAppVersionRequest request)
  89. {
  90. string relativePath = $"v1/app/{request.AppName}/version";
  91. HttpResponseMessage response = await PostAsync(relativePath, request.ToString());
  92. EdgegapHttpResult<UpsertAppVersionResult> result = new EdgegapHttpResult<UpsertAppVersionResult>(response); // MIRROR CHANGE: 'new()' not supported in Unity 2020
  93. bool isSuccess = response.StatusCode == HttpStatusCode.OK; // 200
  94. if (!isSuccess)
  95. return result;
  96. return result;
  97. }
  98. #endregion // API Methods
  99. #region Chained API Methods
  100. /// <summary>
  101. /// PATCH and/or POST to v1/app/: Upsert an *existing* application version with new specifications.
  102. /// - Consumes either 1 or 2 API calls: 1st tries to PATCH, then POST if PATCH fails (!exists).
  103. /// - API POST Doc | https://docs.edgegap.com/api/#tag/Applications/operation/app-version-post
  104. /// - API PATCH Doc | https://docs.edgegap.com/api/#tag/Applications/operation/app-versions-patch
  105. /// </summary>
  106. /// <returns>
  107. /// Http info with UpdateAppVersionRequest data model
  108. /// - Success: 200 (no result model)
  109. /// - Fail: 409 (app already exists), 400 (reached limit)
  110. /// </returns>
  111. public async Task<EdgegapHttpResult<UpsertAppVersionResult>> UpsertAppVersion(UpdateAppVersionRequest request)
  112. {
  113. EdgegapHttpResult<UpsertAppVersionResult> result = await UpdateAppVersion(request); // PATCH
  114. if (result.HasErr)
  115. {
  116. // Try to create, instead
  117. CreateAppVersionRequest createAppVersionRequest = CreateAppVersionRequest.FromUpdateRequest(request);
  118. result = await CreateAppVersion(createAppVersionRequest); // POST
  119. }
  120. bool isSuccess = result.StatusCode == HttpStatusCode.OK; // 200
  121. if (!isSuccess)
  122. return result;
  123. return result;
  124. }
  125. #endregion // Chained API Methods
  126. }
  127. }