258 lines
11 KiB
C#
258 lines
11 KiB
C#
using gehGassi.Dto;
|
|
using gehGassiApp.Core.Interfaces;
|
|
using gehGassiApp.Core.Resources;
|
|
using gehGassiApp.Domain.Common;
|
|
using gehGassiApp.Domain.Subscriptions;
|
|
using Platform = gehGassiApp.Domain.Common.Platform;
|
|
|
|
namespace gehGassiApp.Core.Services
|
|
{
|
|
/// <summary>
|
|
/// Service für die Verwaltung von Abonnements
|
|
/// </summary>
|
|
public class SubscriptionService : ISubscriptionService
|
|
{
|
|
private readonly ICommunicationService _communicationService;
|
|
|
|
/// <summary>
|
|
/// Erstellt eine Instanz
|
|
/// </summary>
|
|
/// <param name="communicationService">Instanz eines ICommunicationService</param>
|
|
public SubscriptionService(ICommunicationService communicationService)
|
|
{
|
|
_communicationService = communicationService;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine Liste von verfügbaren Abos zurück
|
|
/// </summary>
|
|
/// <param name="appMode">AppMode - Hundebesitzer oder Walker</param>
|
|
/// <param name="language">Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>CommunicationResult</returns>
|
|
public async Task<CommunicationResult<List<Subscription>>> GetSubscriptionsAsync(AppMode appMode, string language, string accessToken, CancellationToken token)
|
|
{
|
|
var result = new CommunicationResult<List<Subscription>>() { Value = null };
|
|
|
|
var isConnected = await _communicationService.IsConnected();
|
|
if (isConnected)
|
|
{
|
|
var communicationResult = await _communicationService.GetSubscriptionsAsync(appMode, language, accessToken, token);
|
|
if (communicationResult.Success)
|
|
return communicationResult;
|
|
}
|
|
else
|
|
{
|
|
result.Success = false;
|
|
result.ErrorCode = CommunicationErrors.ServerNoConnection;
|
|
result.ErrorMessage = Errors.Server_NoConnection;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine Liste von gebuchten Abos zurück
|
|
/// </summary>
|
|
/// <param name="language">Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>CommunicationResult</returns>
|
|
public async Task<CommunicationResult<List<AppUserSubscription>>> GetMySubscriptionsAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
var result = new CommunicationResult<List<AppUserSubscription>>() { Value = null };
|
|
|
|
var isConnected = await _communicationService.IsConnected();
|
|
if (isConnected)
|
|
{
|
|
var communicationResult = await _communicationService.GetMySubscriptionsAsync(language, accessToken, token);
|
|
if (communicationResult.Success)
|
|
return communicationResult;
|
|
}
|
|
else
|
|
{
|
|
result.Success = false;
|
|
result.ErrorCode = CommunicationErrors.ServerNoConnection;
|
|
result.ErrorMessage = Errors.Server_NoConnection;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt eine Liste von gebuchten aktiven Abos zurück
|
|
/// </summary>
|
|
/// <param name="language">Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>CommunicationResult</returns>
|
|
public async Task<CommunicationResult<List<AppUserSubscription>>> GetMyActiveSubscriptionsAsync(string language, string accessToken, CancellationToken token)
|
|
{
|
|
var result = new CommunicationResult<List<AppUserSubscription>>() { Value = null };
|
|
|
|
var isConnected = await _communicationService.IsConnected();
|
|
if (isConnected)
|
|
{
|
|
var communicationResult = await _communicationService.GetMyActiveSubscriptionsAsync(language, accessToken, token);
|
|
if (communicationResult.Success)
|
|
return communicationResult;
|
|
}
|
|
else
|
|
{
|
|
result.Success = false;
|
|
result.ErrorCode = CommunicationErrors.ServerNoConnection;
|
|
result.ErrorMessage = Errors.Server_NoConnection;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Erstellen einer Abo-Buchung
|
|
/// </summary>
|
|
/// <param name="appUserId">AppUserId</param>
|
|
/// <param name="subscriptionId">Id des Abos</param>
|
|
/// <param name="language">Sprache</param>
|
|
/// <param name="inAppBillingPurchase">InAppBillingPurchase serialisiert als JSON</param>
|
|
/// <param name="expirationDateToSet">Optional: Ablaufdatum das gesetzt werden soll</param>
|
|
/// <param name="platform">Plattform auf welcher das Abo erstellt wird</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>CommunicationResult</returns>
|
|
public async Task<CommunicationResult<AppUserSubscription>> CreateSubscriptionAsync(string appUserId, string subscriptionId, string language, string inAppBillingPurchase, DateTime? expirationDateToSet, Platform platform, string accessToken, CancellationToken token)
|
|
{
|
|
var result = new CommunicationResult<AppUserSubscription>() { Value = null };
|
|
|
|
var isConnected = await _communicationService.IsConnected();
|
|
if (isConnected)
|
|
{
|
|
var communicationResult = await _communicationService.CreateSubscriptionAsync(appUserId, subscriptionId, language, inAppBillingPurchase, expirationDateToSet, platform, accessToken, token);
|
|
if (communicationResult.Success && communicationResult.Value.Status != CreateStatus.Error)
|
|
{
|
|
if (communicationResult.Value.Status == CreateStatus.Success)
|
|
{
|
|
result.Success = true;
|
|
result.Value = communicationResult.Value.Value;
|
|
}
|
|
else
|
|
{
|
|
result.Success = false;
|
|
result.ErrorCode = CommunicationErrors.Subscription_Exists;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
result.Success = false;
|
|
result.ErrorCode = CommunicationErrors.ServerNoConnection;
|
|
result.ErrorMessage = Errors.Server_NoConnection;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Wechseln eines Abos in der Gruppe für eine Abo-Buchung
|
|
/// </summary>
|
|
/// <param name="bookingId">Id der Abo-Buchung</param>
|
|
/// <param name="appUserId">AppUserId</param>
|
|
/// <param name="subscriptionId">Id des Abos auf das gechselt werden soll</param>
|
|
/// <param name="language">Sprache</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>CommunicationResult</returns>
|
|
public async Task<CommunicationResult<AppUserSubscription>> SwitchSubscriptionAsync(long bookingId, string appUserId, string subscriptionId, string language, string accessToken, CancellationToken token)
|
|
{
|
|
var result = new CommunicationResult<AppUserSubscription>() { Value = null };
|
|
|
|
var isConnected = await _communicationService.IsConnected();
|
|
if (isConnected)
|
|
{
|
|
var communicationResult = await _communicationService.SwitchSubscriptionAsync(bookingId, appUserId, subscriptionId, language, accessToken, token);
|
|
if (communicationResult.Success)
|
|
return communicationResult;
|
|
|
|
result.Success = false;
|
|
result.ErrorCode = communicationResult.ErrorCode;
|
|
}
|
|
else
|
|
{
|
|
result.Success = false;
|
|
result.ErrorCode = CommunicationErrors.ServerNoConnection;
|
|
result.ErrorMessage = Errors.Server_NoConnection;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Stornieren einer Abo-Buchung
|
|
/// </summary>
|
|
/// <param name="bookingId">Abo-Buchungs ID</param>
|
|
/// <param name="appUserId">AppUserId</param>
|
|
/// <param name="language">Sprache</param>
|
|
/// <param name="platform">Plattform auf der das Abo erstellt wurde</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>CommunicationResult</returns>
|
|
public async Task<CommunicationResult<AppUserSubscription>> CancelSubscriptionAsync(long bookingId, string appUserId, string language, Platform platform, string accessToken, CancellationToken token)
|
|
{
|
|
var result = new CommunicationResult<AppUserSubscription>() { Value = null };
|
|
|
|
var isConnected = await _communicationService.IsConnected();
|
|
if (isConnected)
|
|
{
|
|
var communicationResult = await _communicationService.CancelSubscriptionAsync(bookingId, appUserId, language, platform, accessToken, token);
|
|
if (communicationResult.Success)
|
|
return communicationResult;
|
|
|
|
result.Success = false;
|
|
result.ErrorCode = communicationResult.ErrorCode;
|
|
}
|
|
else
|
|
{
|
|
result.Success = false;
|
|
result.ErrorCode = CommunicationErrors.ServerNoConnection;
|
|
result.ErrorMessage = Errors.Server_NoConnection;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Verlängern einer Abo-Buchung
|
|
/// </summary>
|
|
/// <param name="bookingId">Abo-Buchungs ID</param>
|
|
/// <param name="appUserId">AppUserId</param>
|
|
/// <param name="language">Sprache</param>
|
|
/// <param name="platform">Plattform auf der das Abo erstellt wurde</param>
|
|
/// <param name="accessToken">Aktuelles Accesstoken</param>
|
|
/// <param name="token">CancellationToken</param>
|
|
/// <returns>CommunicationResult</returns>
|
|
public async Task<CommunicationResult<AppUserSubscription>> RenewSubscriptionAsync(long bookingId, string appUserId, string language, Platform platform, string accessToken, CancellationToken token)
|
|
{
|
|
var result = new CommunicationResult<AppUserSubscription>() { Value = null };
|
|
|
|
var isConnected = await _communicationService.IsConnected();
|
|
if (isConnected)
|
|
{
|
|
var communicationResult = await _communicationService.RenewSubscriptionAsync(bookingId, appUserId, language, platform, accessToken, token);
|
|
if (communicationResult.Success)
|
|
return communicationResult;
|
|
|
|
result.Success = false;
|
|
result.ErrorCode = communicationResult.ErrorCode;
|
|
}
|
|
else
|
|
{
|
|
result.Success = false;
|
|
result.ErrorCode = CommunicationErrors.ServerNoConnection;
|
|
result.ErrorMessage = Errors.Server_NoConnection;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|
|
}
|