Files
Masterarbeit/QuellCode/CentronERP/Centron.Api.docuFORM/DocuFormRestApiClient.cs
T
Christoph Schwörer f045b99a25 Codebasis als Dateien ins Arbeitsrepo statt als Gitlink
QuellCode/CentronERP war nur als Gitlink (Submodul-Referenz auf 79c1142)
getrackt, ohne .gitmodules und ohne erreichbares Remote. Der
Untersuchungsgegenstand der Versuchsreihe war damit nicht reproduzierbar
gesichert: Ein Klon haette ein leeres Verzeichnis erhalten, und die Belege
der 3.287 Anforderungen waeren nicht ueberpruefbar gewesen.

Umstellung:
- Historie nach c:\DEV\CentronERP_git_snapshot_79c1142 ausgelagert
  (vollstaendig lesbar, enthaelt 79c1142 und Vorgaenger 89ccfd6)
- Gitlink aus dem Index entfernt
- Dateiinhalt aufgenommen: 24.557 Dateien, rund 333 MB

Die verschachtelte .gitignore der Codebasis gilt weiter, Build-Artefakte
bleiben ausgeschlossen. Details in Versuche/Versuch_01/_Codebasis-Nachweis.md
2026-08-26 07:43:51 +02:00

132 lines
4.7 KiB
C#

using Centron.Api.docuFORM.Helper;
using Centron.Api.docuFORM.Models;
using Centron.Api.docuFORM.Models.Swagger;
using Centron.Api.docuFORM.Models.Swagger.Responses;
using Centron.Core;
using Centron.Core.Extensions;
using Centron.Interfaces.BL;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Net;
using System.Net.Http.Headers;
using System.Net.Http.Json;
using System.Reflection;
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Centron.Api.docuFORM
{
public class DocuFormRestApiClient : IDocuFormApiClient, IDisposable
{
#region Fields
private readonly HttpClient _httpClient;
private bool _disposed = false;
#endregion
#region Ctor
public DocuFormRestApiClient(string serverAddress)
{
try
{
var trimmedAddress = serverAddress.TrimEnd('/');
var handler = new SocketsHttpHandler() { MaxConnectionsPerServer = 20 };
this._httpClient = new HttpClient(handler) { BaseAddress = new Uri(trimmedAddress) };
this._httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
catch(Exception ex)
{
throw new Exception($"Fehler beim Initalisieren des HTTP-Clients für folgende Adresse \"{serverAddress}\"!{Environment.NewLine}{ex.Message}");
}
}
#endregion
#region Methods
public async Task<string> RequestAuthorization(AuthCodeRequest authCodeRequest)
{
Guard.NotNull(authCodeRequest, nameof(authCodeRequest));
var requestUrl = DocuFormRequestHelper.CreateAuthorizationRequestURI(authCodeRequest);
var response = await this._httpClient.GetAsync(requestUrl);
var contentString = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException($"Fehler während der Authorisierung bei docuFORM: {contentString}");
return contentString;
}
public async Task<AuthTokenResponse> RequestToken(AuthTokenRequest tokenRequest)
{
Guard.NotNull(tokenRequest, nameof(tokenRequest));
var paremeters = DocuFormRequestHelper.RequestToParameters(tokenRequest);
var request = new HttpRequestMessage(HttpMethod.Post, DocuFormRestApiConstants._endpointAuthToken)
{
Content = new FormUrlEncodedContent(paremeters)
};
var response = await this._httpClient.SendAsync(request);
var responseContentString = await response.ReadContentAndThrowIfError();
var authToken = JsonSerializer.Deserialize<AuthTokenResponse>(responseContentString);
if(authToken == null)
throw new HttpRequestException($"No auth token was received!");
return authToken;
}
public async Task<Result<DevicesResponse>> GetAllDevices(string token)
{
var requestUri = DocuFormRestApiConstants._endpointDevices;
var request = new HttpRequestMessage(HttpMethod.Get, requestUri);
var response = await this._httpClient.SendRequestWithToken(request, token);
return await response.CheckResponseAndDeserializeContent<DevicesResponse>();
}
public async Task<Result<DeviceCountersResponse>> GetDeviceCounters(string token, int deviceId, DateTime? requestedDate = null)
{
var requestUri = DocuFormRestApiConstants._endpointDevices + $"/{deviceId}/counters";
if (requestedDate.HasValue)
{
var utcDate = requestedDate.Value.ToUniversalTime();
requestUri += $"?date={utcDate.ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture)}";
}
var request = new HttpRequestMessage(HttpMethod.Get, requestUri);
var response = await this._httpClient.SendRequestWithToken(request, token);
return await response.CheckResponseAndDeserializeContent<DeviceCountersResponse>();
}
#endregion
#region IDisposable Support
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!_disposed && disposing)
{
_httpClient?.Dispose();
_disposed = true;
}
}
#endregion
}
}