Files
BeWoPlaner/Host/GkvAbrechnungClient.aspx.cs
2025-06-11 22:56:25 +02:00

171 lines
3.9 KiB
C#

using BeWo.Data;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.ServiceImplementations;
using BS.Shared;
using BS.Shared.AppSender;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.GkvAbrechnung;
using BS.Shared.Exceptions;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Threading;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Host
{
/// <summary>
///
/// Stellt einen Entpunkt für Clients dar.
/// z.B. app2,app3,app4,...
///
///
/// </summary>
public partial class GkvAbrechnungClient : Page
{
private readonly string INVALID_INPUT = "Bad Request";
private string GkvSecretKey { get; set; } = ConfigurationManager.AppSettings.Get("GkvSecretKey");
public GkvClientRequestDC GkvClientRequest { get; set; }
public void Sleep() => Thread.Sleep(5000);
protected void Page_Load(object sender, EventArgs e)
{
try
{
//https://app5.bewoplaner.de/Host/GkvAbrechungServer?tenant=12345
var str = new StreamReader(Request.InputStream).ReadToEnd();
GkvClientRequest = GkvSender.DeserializeRequest<GkvClientRequestDC>(str, SendInvalidInputResponse);
if (GkvSecretKey is null)
SendErrorResponse(INVALID_INPUT + " 1");
if (GkvSecretKey != GkvClientRequest.GkvSecretKey)
SendErrorResponse(INVALID_INPUT + " 2");
if (GkvClientRequest.Tenant is null)
SendErrorResponse(INVALID_INPUT + " 3");
switch (GkvClientRequest.Type)
{
case RequestType.GkvClientResult:
ClientResult(GkvSender.DeserializeRequest<GkvClientResultRequestDC>(str, SendInvalidInputResponse));
return;
case RequestType.GkvClientSum:
ClientSum(GkvSender.DeserializeRequest<GkvClientSumRequestJson>(str, SendInvalidInputResponse));
return;
default:
SendErrorResponse(INVALID_INPUT + " 4");
return;
}
}
catch (ThreadAbortException eee)
{
}
catch (Exception ex)
{
var ex_text = $"Msg:{ex.Message}\n\n+Stack:{ex.StackTrace}";
SendErrorResponse(ex_text);
}
}
private void ClientResult(GkvClientResultRequestDC req)
{
if (!SessionFacade.IsUserLoggedIn())
SendErrorResponse(INVALID_INPUT + " 4");
if (req.ResultDCs is null || !req.ResultDCs.Any())
SendErrorResponse(INVALID_INPUT + " 5");
// Response
var response = new GkvResponseDC(false);
try
{
var service = new GkvAccountingServiceImp();
service.HandleGkvServerResults(req.ResultDCs);
response.Success = true;
}
catch (GkvException e)
{
response.Message = e.Message;
}
catch (Exception e)
{
response.Message = e.Message;
}
SendResponse(response);
}
private void ClientSum(GkvClientSumRequestJson req)
{
if (req.Start > req.End)
SendErrorResponse(INVALID_INPUT + " 4");
if (!ASPHibernateSessionManager.IsRequestIPValid("GkvSumServerIPAdress"))
SendErrorResponse(INVALID_INPUT + " 5");
// Response
var response = new GkvClientSumResponseJson();
try
{
var sum = DAOFactory.ScriptDAO.GetGkvSumByDateRange(req.Start, req.End);
if(sum is decimal s)
{
response.Sum = s;
}
else
{
response.Message = "sum is null";
}
response.Success = true;
}
catch (GkvException e)
{
response.Message = e.Message;
}
catch (Exception e)
{
response.Message = e.Message;
}
SendResponse(response);
}
#region Senden
private void SendInvalidInputResponse() => SendErrorResponse(INVALID_INPUT);
private void SendErrorResponse(string message)
{
var response = new GkvResponseDC(false, message);
Sleep();
SendResponse(GkvSender.SerializeResponse(response));
}
private void SendResponse(GkvResponseDC res) => SendResponse(GkvSender.SerializeResponse(res));
private void SendResponse(string str)
{
Response.Write(str);
Response.End();
}
#endregion
}
}