96 lines
5.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassiApp.Domain.Common;
using gehGassiApp.Domain.Subscriptions;
using Platform = gehGassiApp.Domain.Common.Platform;
namespace gehGassiApp.Core.Interfaces
{
/// <summary>
/// Schnittstellenbeschreibung für einen Service der die Abonnements verwalten kann
/// </summary>
public interface ISubscriptionService
{
/// <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>
Task<CommunicationResult<List<Subscription>>> GetSubscriptionsAsync(AppMode appMode, string language, string accessToken, CancellationToken token);
/// <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>
Task<CommunicationResult<List<AppUserSubscription>>> GetMySubscriptionsAsync(string language, string accessToken, CancellationToken token);
/// <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>
Task<CommunicationResult<List<AppUserSubscription>>> GetMyActiveSubscriptionsAsync(string language, string accessToken, CancellationToken token);
/// <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>
Task<CommunicationResult<AppUserSubscription>> CreateSubscriptionAsync(string appUserId, string subscriptionId, string language, string inAppBillingPurchase, DateTime? expirationDateToSet, Platform platform, string accessToken, CancellationToken token);
/// <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>
Task<CommunicationResult<AppUserSubscription>> SwitchSubscriptionAsync(long bookingId, string appUserId, string subscriptionId, string language, string accessToken, CancellationToken token);
/// <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>
Task<CommunicationResult<AppUserSubscription>> CancelSubscriptionAsync(long bookingId, string appUserId, string language, Platform platform, string accessToken, CancellationToken token);
/// <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>
Task<CommunicationResult<AppUserSubscription>> RenewSubscriptionAsync(long bookingId, string appUserId, string language, Platform platform, string accessToken, CancellationToken token);
}
}