using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassi.Dto;
using gehGassi.Dto.Advertisements;
using gehGassi.Dto.Banners;
using gehGassi.Dto.Common;
using gehGassi.Dto.Dogs;
using gehGassi.Dto.DogWalkers;
using gehGassi.Dto.Favourites;
using gehGassi.Dto.Feedback;
using gehGassi.Dto.Listings;
using gehGassi.Dto.Messages;
using gehGassi.Dto.News;
using gehGassi.Dto.Payment;
using gehGassi.Dto.Pushnotifications;
using gehGassi.Dto.Ratings;
using gehGassi.Dto.Reporting;
using gehGassi.Dto.Walks;
using gehGassiApp.Core.Messaging;
using gehGassiApp.Domain.Advertisements;
using gehGassiApp.Domain.AppVersions;
using gehGassiApp.Domain.Authentication;
using gehGassiApp.Domain.Banners;
using gehGassiApp.Domain.Common;
using gehGassiApp.Domain.Dogs;
using gehGassiApp.Domain.Favourites;
using gehGassiApp.Domain.Feedback;
using gehGassiApp.Domain.Listings;
using gehGassiApp.Domain.Lookup;
using gehGassiApp.Domain.Messages;
using gehGassiApp.Domain.News;
using gehGassiApp.Domain.Payment;
using gehGassiApp.Domain.Pushnotifications;
using gehGassiApp.Domain.Subscriptions;
using gehGassiApp.Domain.Users;
using gehGassiApp.Domain.Vouchers;
using gehGassiApp.Domain.Walkers;
using gehGassiApp.Domain.Walks;
using Platform = gehGassiApp.Domain.Common.Platform;
namespace gehGassiApp.Core.Interfaces
{
///
/// Schnittstellenbeschreibung für einen Service der die Kommunikation mit dem Server ermöglicht
///
public interface ICommunicationService
{
///
/// Prüft ob eine Verbindung zum Server besteht
///
/// true wenn verbunden, false sonst
Task IsConnected();
#region Helper für DebugInfo
bool GetIsOnline();
bool GetHasInternet();
DateTimeOffset? GetLastOnlineCheck();
NetworkAccess GetCurrentNetworkAccess();
#endregion
#region Registrierung
///
/// Prüfen ob ein Benutzername noch verfügbar ist und ob das Passwort ausreicht
///
/// Benutzername
/// Passwort
/// CancellationToken
/// true wenn alles passt, false sonst
Task> RegisterCheckAvailableAsync(string userName, string password, CancellationToken token);
///
/// Prüfen ob ein Passwort ausreicht
///
/// Passwort
/// CancellationToken
/// true wenn alles passt, false sonst
Task> CheckPasswordAsync(string password, CancellationToken token);
///
/// Registrieren eines App-Users
///
/// Benutzername
/// Passwort
/// Land
/// CancellationToken
/// AppUser-Typ
/// Vorname
/// Nachname
/// Geburtsdatum
/// PLZ
/// Ort
/// Bundesland
/// Nationalität
/// Land Hauptwohnsitz
/// true wenn alles passt, false sonst
Task> RegisterAsync(string userName, string password, AppUserType appUserType, string firstName, string lastName, DateTimeOffset? birthDate, string zip, string city, string state, string country, string nationality, string mainResidence, CancellationToken token);
///
/// Registrieren eines App-Users Extern
///
/// Benutzername
/// Passwort
/// Land
/// CancellationToken
/// AppUser-Typ
/// Vorname
/// Nachname
/// Geburtsdatum
/// PLZ
/// Ort
/// Bundesland
/// Token des externen Providers
/// Login-Provider
/// Nationalität
/// Land Hauptwohnsitz
/// true wenn alles passt, false sonst
Task> RegisterExternalAsync(string userName, string password, AppUserType appUserType, string firstName, string lastName, DateTimeOffset? birthDate, string zip, string city, string state, string country, string nationality, string mainResidence, string accessToken, string loginProvider, CancellationToken token);
#endregion
#region Token / Login
///
/// Anmelden eines Benutzers
///
/// Benutzername
/// Passwort
/// CancellationToken
/// CommunicationResult
Task> LoginAsync(string userName, string password, CancellationToken token);
///
/// Anmelden eines Benutzers mittels Acces-Token wegen external Provider
///
/// Access-Token
/// CancellationToken
/// CommunicationResult
Task> LoginExternalAsync(string accessToken, CancellationToken token);
///
/// Anmelden eines Benutzers mittels Apple Provider
///
/// Login-Daten von Apple
/// CancellationToken
/// CommunicationResult
Task> LoginAppleAsync(LoginAppleDto dto, CancellationToken token);
///
/// Abmelden eines Benutzers.
/// Löscht alle Refreshtokens des Benutzers
///
/// Access-Token
/// CancellationToken
/// CommunicationResult
Task> LogoutAsync(string accessToken, CancellationToken token);
///
/// Zurücksetzen des Passworts eines Benutzers
///
/// Benutzername / Email
/// CancellationToken
/// CommunicationResult
Task> ResetPasswordAsync(string userName, CancellationToken token);
///
/// Senden der E-Mail Bestätigung für einen Benutzer
///
/// Benutzername / Email
/// CancellationToken
/// CommunicationResult
Task> ResendConfirmationAsync(string userName, CancellationToken token);
///
/// Anmelden eines Benutzers mittels Refreshtoken
///
/// Aktuelles Accesstoken
/// Refreshtoken
/// CancellationToken
/// CommunicationResult
Task> RefreshTokenAsync(string accessToken, string refreshToken, CancellationToken token);
///
/// Prüfen ob ein Benutzer ein Passwort hat
///
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> HasPasswordAsync(string accessToken, CancellationToken token);
///
/// Hinzufügen eines Passswortes zu einem Benutzer, wenn dieser keines hat
///
/// Benutzername
/// Passwort das hinzugefügt werden soll
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> AddPasswordAsync(string userName, string password, string accessToken, CancellationToken token);
///
/// Ändern des Passwortes eines Benutzers
///
/// Benutzername
/// Passwort das gesetzt werden soll
/// Bisheriges Passwort
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> ChangePasswordAsync(string userName, string password, string oldPassword, string accessToken, CancellationToken token);
///
/// Löschen des Accounts eines Benutzers
///
/// Benutzername
/// Id des Benutzers
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> DeleteAccountAsync(string userName, string userId, string accessToken, CancellationToken token);
#endregion
#region AppUser
///
/// Holt den App-User für den aktuell angemeldeten Benutzer
///
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetAppUserAsync(string accessToken, CancellationToken token);
///
/// Holt den App-User für den aktuell angemeldeten Benutzer Sync!
///
/// Wann wurden das letzte mal Daten erfolgreich geholt? Wenn null, dann alle Daten
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetAppUserSyncAsync(DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
///
/// Aktualisieren eines App-Users am Server
///
/// App-User DTO
/// Foto-Datei
/// Aktuelles Accesstoken
/// CancellationToken
/// Dateiname Photo
/// CommunicationResult
Task> UpdateAppUserAsync(AppUserDto appUserDto, string photoFileName, byte[] photoFile, string accessToken, CancellationToken token);
///
/// Setzen des AppUser Types am Server.
/// Kann nur online erfolgen!
///
/// Dto für das Setzen des Typs
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> SetAppUserTypeAsync(SetAppUserTypeDto setAppUserTypeDto, string accessToken, CancellationToken token);
///
/// Setzen des AppUser Types am Server. Wenn hundebesitzer Walker wird
/// Kann nur online erfolgen!
///
/// Dto für das Setzen des Typs
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> SetAppUserTypeAsync(SetAppUserTypeExDto setAppUserTypeDto, string accessToken, CancellationToken token);
///
/// Hinzufügen eines Payment Users am Server.
///
/// DTO für das Hinzufügen des Payment-Users
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> AddPaymentUserAsync(AddPaymentUserDto addPaymentUserDto, string accessToken, CancellationToken token);
///
/// Blockieren eines App-Users am Server
///
/// Dto für das Blockieren eines anderen App-Users
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> BlockAppUserAsync(BlockCreateDto blockDto, string accessToken, CancellationToken token);
///
/// Blockieren eines App-Users am Server aufheben
///
/// Dto für das Aufheben der Blockierung eines anderen App-Users
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> UnblockAppUserAsync(BlockRemoveDto unblockDto, string accessToken, CancellationToken token);
///
/// Holen von blockierten App-Usern
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// ListCommunicationResult
Task>> GetBlockedAppUsersAsync(BlockedQueryDto query, string accessToken, CancellationToken token);
///
/// Melden eines App-Users
///
/// Dto für das Melden eines anderen App-Users
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> ReportAppUserAsync(AppUserReportDto reportDto, string accessToken, CancellationToken token);
#endregion
#region Walker Profile
///
/// Holt den das Walker Profil für den aktuell angemeldeten Benutzer
///
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetWalkerProfileAsync(string accessToken, CancellationToken token);
///
/// Holt das Walker Profil für den aktuell angemeldeten Benutzer Sync!
///
/// Wann wurden das letzte mal Daten erfolgreich geholt? Wenn null, dann alle Daten
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetWalkerProfileSyncAsync(DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
///
/// Aktualisieren eines Dogwalker Profils am Server
///
/// Profil DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> UpdateWalkerProfileAsync(DogWalkerProfileDto walkerProfileDto, string accessToken, CancellationToken token);
#endregion
#region DogOwners
///
/// Gibt Detailsinfos zu einem DogOwner zurück
///
/// Id des DogOwners
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetDogOwnerAsync(string dogOwnerId, string accessToken, CancellationToken token);
#endregion
#region DogWalkers
///
/// Gibt Detailsinfos zu einem Dogwalker zurück
///
/// Id des Dogwalkers
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetDogWalkerAsync(string dogWalkerId, string accessToken, CancellationToken token);
///
/// Holen von Dogwalkern vom Server.
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// ListCommunicationResult
Task>> GetDogWalkersAsync(DogWalkerQueryDto query, string accessToken, CancellationToken token);
///
/// Holen von Dogwalkern vom Server. Als Lookup
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// ListCommunicationResult
Task>> GetDogWalkersLookupAsync(DogWalkerQueryDto query, string accessToken, CancellationToken token);
///
/// Holen der Walkingtimes vom Server
///
/// Id des DogWalkers
/// Wann wurden das letzte mal Daten erfolgreich geholt? Wenn null, dann alle Daten
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetWalkingTimesForSyncAsync(string dogWalkerId, DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
///
/// Anlegen einer WalkingTime am Server
///
/// WalkingTime
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> CreateWalkingTimeAsync(WalkingTimeDto walkingTimeDto, string accessToken, CancellationToken token);
///
/// Aktualisieren einer WalkingTime am Server
///
/// WalkingTime DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> UpdateWalkingTimeAsync(WalkingTimeDto walkingTimeDto, string accessToken, CancellationToken token);
///
/// Löschen einer WalkingTime am Server
///
/// WalkingTime DTO
/// Id des App-Users
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> DeleteWalkingTimeAsync(WalkingTimeDto walkingTimeDto, string appUserId, string accessToken, CancellationToken token);
///
/// Gibt alle WalkingTimes eins Dogwalkers vom Server zurück
///
/// ID des DogWalkers
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetAllWalkingTimesAsync(string dogWalkerId, string accessToken, CancellationToken token);
#endregion
#region News & NewsCategory
///
/// Holen der News-Kategorien vom Server.
///
/// Wann wurden das letzte mal Daten erfolgreich geholt? Wenn null, dann alle Daten
/// Gewünschte Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetNewsCategoriesAsync(DateTimeOffset? lastUpdate, string language, string accessToken, CancellationToken token);
///
/// Holen von News vom Server.
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetNewsAsync(NewsQueryDto query, string accessToken, CancellationToken token);
#endregion
#region Lookup
///
/// Gibt eine Liste von Dog- Ownern und Walkern basierend auf einem Filter zurück
///
/// Filter
/// Anzahl max. Datensätze
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> LookupEntitiesAsync(string filter, int take, string accessToken, CancellationToken token);
///
/// Gibt eine Liste von Dogwalkern mit Distanz zur aktuellen Position zurück
///
/// Id die ignoriert werden soll falls der Benutzer DogOwner und DogWalker ist
/// Breitengrad
/// Längengrad
/// Anzahl Walker gewünscht
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> LookupDogWalkersAsync(string ignoreId, double lat, double lng, int take, string accessToken, CancellationToken token);
///
/// Gibt Detailsinfos zu einem Dogwalker zurück
///
/// Id des Dogwalkers
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> LookupDogWalkerAsync(string dogWalkerId, string accessToken, CancellationToken token);
#endregion
#region Messages & Conversations
///
/// Holt eine Liste der Konversationen eines Benutzers
///
/// Id des Benutzers (DogOwner | DogWalker)
/// Letztes Update
/// Aktuelles Accesstoken
/// CancellationToken
/// Liste von Konversationen
Task>> GetConversationsAsync(string senderId, DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
///
/// Holt eine Liste der Konversationen eines Benutzers mit Filter am Server.
/// Geblockte oder Gesperrte Benutzer werden nicht zurückgegeben.
///
/// Id des Benutzers (DogOwner | DogWalker)
/// Filter
/// Aktuelles Accesstoken
/// CancellationToken
/// Liste von Konversationen
Task>> GetConversationsWithFilterAsync(string senderId, string filter, string accessToken, CancellationToken token);
///
/// Holt eine Konversationen eines Benutzers mit einem Ziel
///
/// Id des Benutzers (DogOwner | DogWalker)
/// Id des Empfängers
/// Aktuelles Accesstoken
/// CancellationToken
/// Liste von Konversationen
Task> GetConversationByReceipientAsync(string senderId, string receipientId, string accessToken, CancellationToken token);
///
/// Anlegen einer Konversation am Server
///
/// Gewünschte Id der Konversation
/// Id des Senders
/// Id des Empfängers
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> CreateConversationAsync(string conversationId, string senderId, string receiverId, string accessToken, CancellationToken token);
///
/// Holt eine Liste der offenen Nachrichten eines Benutzers
///
/// Id des Benutzers (DogOwner | DogWalker)
/// Letztes Update
/// Aktuelles Accesstoken
/// CancellationToken
/// Liste von Konversationen
Task>> GetMessagesAsync(string senderId, DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
///
/// Holt eine Liste der offenen Nachrichten eines Benutzers für eine Konversation
///
/// Id des Benutzers (DogOwner | DogWalker)
/// Id der Konversation
/// Letztes Update
/// Aktuelles Accesstoken
/// CancellationToken
/// Liste von Konversationen
Task>> GetMessagesAsync(string senderId, string conversationId, DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
///
/// Bestätigen des erfolgreichen Erhalts von Nachrichten für einen Benutzer
///
/// Id des Benutzers (DogOwner | DogWalker)
/// Letztes Update
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> ConfirmMessagesAsync(string senderId, DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
///
/// Bestätigen des erfolgreichen Erhalts von Nachrichten für einen Benutzer für eine Konversation
///
/// Id des Benutzers (DogOwner | DogWalker)
/// Id der Konversation
/// Letztes Update
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> ConfirmMessagesAsync(string senderId, string conversationId, DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
///
/// Anlegen einer Nachricht am Server
///
/// Id des Benutzers (DogOwner | DogWalker)
/// Id des Benutzers Empfänger
/// Nachricht
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> AddMessageAsync(string senderId, string receiverId, Message message, string accessToken, CancellationToken token);
///
/// Holen der Systemnachrichten vom Server für Sync
///
/// Id des AppUsers
/// Wann wurden das letzte mal Daten erfolgreich geholt? Wenn null, dann alle Daten
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetSystemMessagesForSyncAsync(string appUserId, DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
///
/// Bestätigen des erfolgreichen Erhalts von SystemNachrichten für einen Benutzer
///
/// Id des Benutzers (DogOwner | DogWalker)
/// Letztes Update
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> ConfirmSystemMessagesAsync(string senderId, DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
///
/// Entfernen von Systemnachrichten vom Server für einen AppUser und eine bestimmte Kombination aus Key und Table
///
/// Id des AppUsers
/// Typ des AppUsers
/// Key
/// Table
/// Alter als dieses Datum
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> RemoveSystemMessagesAsync(string appUserId, AppUserType appUserType, string key, string table, DateTimeOffset? created, string accessToken, CancellationToken token);
#endregion
#region Listings
///
/// Holen der Branchen und Listungen Übersicht
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetListingsOverviewAsync(QueryDto query, string accessToken, CancellationToken token);
///
/// Holen von Listungen nahe dem Benutzer vom Server.
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetListingsNearAsync(QueryDto query, string accessToken, CancellationToken token);
///
/// Gibt eine laufende Listung zurück
///
/// Id der Listung
/// gewünschte Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetListingRunningAsync(string id, string language, string accessToken, CancellationToken token);
///
/// Holen von Listungen je Branche mit Geo-Einschränkungen
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// ListCommunicationResult
Task>> GetListingsByBranchAsync(ListingQueryDto query, string accessToken, CancellationToken token);
#endregion
#region Banners
///
/// Abfragen eines zufälligen Banners für eine Platzierung
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetBannerForLocationAsync(BannerQueryDto query, string accessToken, CancellationToken token);
///
/// Hinzufügen von Klicks zu einem Banner
///
/// Model für einen Klick für Banner
/// Aktuelles Accesstoken
/// CancellationToken
/// true wenn der Banner noch gültig ist, false sonst
Task> AddClicksAsync(BannerClickDto dtoModel, string accessToken, CancellationToken token);
///
/// Hinzufügen von Views zu einem Banner
///
/// Model für einen View für Banner
/// Aktuelles Accesstoken
/// CancellationToken
/// true wenn der Banner noch gültig ist, false sonst
Task> AddViewsAsync(BannerViewDto dtoModel, string accessToken, CancellationToken token);
#endregion
#region Advertisements
///
/// Holen der Liste der Werbungs-Kategorien welche online sind
///
/// Gewünschte Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetAdvertisementCategoriesOnlineAsync(string language, string accessToken, CancellationToken token);
///
/// Holen von ablaufenden Werbungen mit Geo-Einschränkungen
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetAdvertisementsNearEndAsync(QueryDto query, string accessToken, CancellationToken token);
///
/// Gibt eine laufende Werbung zurück
///
/// Id der Werbung
/// gewünschte Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetAdvertisementRunningAsync(string id, string language, string accessToken, CancellationToken token);
///
/// Holen von Werbungen je Kategorie mit Geo-Einschränkungen
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// ListCommunicationResult
Task>> GetAdvertisementsByCategoryAsync(AdvertisementQueryDto query, string accessToken, CancellationToken token);
#endregion
#region Dogs & Dogsraces
///
/// Holen der Hunderassen vom Server.
///
/// Wann wurden das letzte mal Daten erfolgreich geholt? Wenn null, dann alle Daten
/// Gewünschte Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetDogRacesAsync(DateTimeOffset? lastUpdate, string language, string accessToken, CancellationToken token);
///
/// Holen einer Hunderassen vom Server.
///
/// Id der Hunderasse
/// Gewünschte Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetDogRaceAsync(string id, string language, string accessToken, CancellationToken token);
///
/// Holen der Hunde vom Server
///
/// Id des AppUsers
/// Wann wurden das letzte mal Daten erfolgreich geholt? Wenn null, dann alle Daten
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetDogsAsync(string appUserId, DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
///
/// Holen der Hunde vom Server als MinInfo
///
/// Id des AppUsers
/// Gewünschte Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetDogsMinAsync(string appUserId, string language, string accessToken, CancellationToken token);
///
/// Holen eines Hundes vom Server
///
/// Id des Hundes
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetDogAsync(string dogId, string accessToken, CancellationToken token);
///
/// Anlegen eines Hundes am Server
///
/// Hund DTO
/// Foto-Datei
/// Aktuelles Accesstoken
/// CancellationToken
/// Dateiname Photo
/// CommunicationResult
Task>> AddDogAsync(DogDto dogDto, string photoFileName, byte[] photoFile, string accessToken, CancellationToken token);
///
/// Aktualisieren eines Hundes am Server
///
/// Hund DTO
/// Foto-Datei
/// Aktuelles Accesstoken
/// CancellationToken
/// Dateiname Photo
/// CommunicationResult
Task> UpdateDogAsync(DogDto dogDto, string photoFileName, byte[] photoFile, string accessToken, CancellationToken token);
///
/// Löschen eines Hundes am Server
///
/// Hund DTO
/// Id des App-Users
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> DeleteDogAsync(DogDto dogDto, string appUserId, string accessToken, CancellationToken token);
#endregion
#region Walks
///
/// Gibt die Anzahl öffentlicher Anfragen für einen Benutzer zurück
///
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> CountPublicWalkRequestsAsync(string accessToken, CancellationToken token);
///
/// Holen der öffentlichen Anfragen vom Server
///
/// Id des AppUsers
/// Wann wurden das letzte mal Daten erfolgreich geholt? Wenn null, dann alle Daten
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetPublicWalkRequestsForSyncAsync(string appUserId, DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
///
/// Holen der öffentlichen Anfragen vom Server für die letzten
///
/// Id des AppUsers
/// Gewünschte Sprache
/// Anzahl Datensätze
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetPublicWalkRequestsLatestAsync(string appUserId, string language, int take, string accessToken, CancellationToken token);
///
/// Holen von öffentlichen Anfragen vom Server.
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetPublicWalkRequestsAsync(PublicWalkRequestQueryDto query, string accessToken, CancellationToken token);
///
/// Holen von öffentlichen Anfragen vom Server - erweitert
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetPublicWalkRequestsExAsync(PublicWalkRequestQueryExDto query, string accessToken, CancellationToken token);
///
/// Holen von öffentlichen Anfragen vom Server mit einem Antwortstatus für einen DogWalker
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetPublicWalkRequestsWithResponseStatusAsync(PublicWalkRequestAndResponseStatusQueryDto query, string accessToken, CancellationToken token);
///
/// Holen von öffentlichen Anfragen vom Server mit einem Antwortstatus für einen DogWalker mit erweiterten Suchparametern
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetPublicWalkRequestsWithResponseStatusExAsync(PublicWalkRequestAndResponseStatusQueryExDto query, string accessToken, CancellationToken token);
///
/// Holen einer öffntlichen Anfrage vom Server.
///
/// Id der Anfrage
/// Gewünschte Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetPublicWalkRequestWithNamesAsync(string id, string language, string accessToken, CancellationToken token);
///
/// Anlegen einer öffentlichen Anfrage am Server
///
/// Öffentliche Anfrage
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> CreatePublicWalkRequestAsync(PublicWalkRequestCreateDto requestDto, string accessToken, CancellationToken token);
///
/// Aktualisieren einer öffentlichen Anfrage am Server
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> UpdatePublicWalkRequestAsync(PublicWalkRequestDto requestDto, string accessToken, CancellationToken token);
///
/// Löschen einer öffentlichen Anfrage am Server
///
/// Anfrage DTO
/// Id des App-Users
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> DeletePublicWalkRequestAsync(PublicWalkRequestDto requestDto, string appUserId, string accessToken, CancellationToken token);
///
/// Auswählen eines Angebotes zu einer öffentlichen Anfrage am Server
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> AcceptPublicWalkRequestAsync(PublicWalkRequestAcceptDto requestDto, string accessToken, CancellationToken token);
///
/// Stornieren einer öffentlichen Anfrage am Server
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> CancelPublicWalkRequestAsync(PublicWalkRequestCancelDto requestDto, string accessToken, CancellationToken token);
///
/// Holen der Antworten zu öffentlichen Anfragen vom Server
///
/// Id des AppUsers
/// Wann wurden das letzte mal Daten erfolgreich geholt? Wenn null, dann alle Daten
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetPublicWalkResponsesForSyncAsync(string appUserId, DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
///
/// Holen einer Antworten zu öffentlichen Anfragen vom Server
///
/// Id der Antwort zur öffentlichen Anfrage
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetPublicWalkResponseAsync(string publicWalkResponseId, string accessToken, CancellationToken token);
///
/// Holen einer Antworten zu öffentlichen Anfragen vom Server
///
/// Id der Antwort zur öffentlichen Anfrage
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetPublicWalkResponseWithNamesAsync(string publicWalkResponseId, string accessToken, CancellationToken token);
///
/// Holen einer Antworten zu öffentlichen Anfragen vom Server
///
/// Id des AppUsers
/// Id der öffentlichen Anfrage
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetPublicWalkResponseForWalkerAsync(string appUserId, string publicWalkRequestId, string accessToken, CancellationToken token);
///
/// Anlegen einer Antwort zu einer öffentlichen Anfrage am Server
///
/// Antwort zur Öffentliche Anfrage
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> CreatePublicWalkResponseAsync(PublicWalkResponseDto responseDto, string accessToken, CancellationToken token);
///
/// Aktualisieren einer Antwort zu einer öffentlichen Anfrage am Server
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> UpdatePublicWalkResponseAsync(PublicWalkResponseDto responseDto, string accessToken, CancellationToken token);
///
/// Löschen einer Antwort zu einer öffentlichen Anfrage am Server
///
/// Anfrage DTO
/// Id des App-Users
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> DeletePublicWalkResponseAsync(PublicWalkResponseDto responseDto, string appUserId, string accessToken, CancellationToken token);
///
/// Holen von Antworten zu einer öffentlichen Anfrage vom Server.
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetPublicWalkresponsesAsync(PublicWalkResponseQueryDto query, string accessToken, CancellationToken token);
///
/// Ablehnen eines Angebotes zu einer öffentlichen Anfrage am Server
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> DeclinePublicWalkResponseAsync(PublicWalkResponseDeclineDto requestDto, string accessToken, CancellationToken token);
///
/// Bearbeiten eines bereits gestellten Angebotes für eine offene Anfrage
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> EditPublicWalkResponseAsync(PublicWalkResponseEditDto requestDto, string accessToken, CancellationToken token);
///
/// Stornieren eines bereits gestellten Angebotes für eine offene Anfrage
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> CancelPublicWalkResponseAsync(PublicWalkResponseCancelDto requestDto, string accessToken, CancellationToken token);
///
/// Holen der Walsk vom Server
///
/// Id des AppUsers
/// Wann wurden das letzte mal Daten erfolgreich geholt? Wenn null, dann alle Daten
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetWalksForSyncAsync(string appUserId, DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
///
/// Anlegen eines Walks Anfrage am Server
///
/// Walk
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> CreateWalkAsync(WalkDto walkDto, string accessToken, CancellationToken token);
///
/// Aktualisieren eines Walks am Server
///
/// Walk DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> UpdateWalkAsync(WalkDto walkDto, string accessToken, CancellationToken token);
///
/// Löschen eines Walks am Server
///
/// Walk DTO
/// Id des App-Users
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> DeleteWalkAsync(WalkDto walkDto, string appUserId, string accessToken, CancellationToken token);
///
/// Holen von Walks mit Namen vom Server.
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// ListCommunicationResult
Task>> GetWalksWithNamesAsync(WalksQueryDto query, string accessToken, CancellationToken token);
///
/// Gibt eine Liste der nächsten Walks, laufende, nicht abgeschlossene, nicht bezahlte usw. für einen Hundebesitzer zurück.
///
/// Id des App-Users
/// Datum ab dem gesucht
/// Gewünschte Sprache
/// Datensätze auslassen
/// Datensätze nehmen
/// Aktuelles Accesstoken
/// CancellationToken
/// ListCommunicationResult
Task>> GetNextWalksOwnerAsync(string appUserId, DateTimeOffset date, string language, int take, int skip, string accessToken, CancellationToken token);
///
/// Gibt eine Liste der nächsten Walks, laufende, nicht abgeschlossene, nicht bezahlte usw. für einen Walker zurück.
///
/// Id des App-Users
/// Datum ab dem gesucht
/// Gewünschte Sprache
/// Datensätze auslassen
/// Datensätze nehmen
/// Aktuelles Accesstoken
/// CancellationToken
/// ListCommunicationResult
Task>> GetNextWalksWalkerAsync(string appUserId, DateTimeOffset date, string language, int take, int skip, string accessToken, CancellationToken token);
///
/// Holen von Walks mit Namen vom Server.
/// Sondersituation: Walker bekommen keine Walks unter dem Status Authorized zurück
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// ListCommunicationResult
Task>> GetWalksWithNamesWalkerAsync(WalksQueryDto query, string accessToken, CancellationToken token);
///
/// Holen eines Walks mit Namen vom Server
///
/// ID des Walks
/// Gewünschte Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetWalkWithNamesAsync(string walkId, string language, string accessToken, CancellationToken token);
///
/// Gibt einen Walk zurück, welcher einer öffentlichen Anfrage zugeordnet ist
///
/// ID der öffentlichen Anfrage
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetWalkByPublicRequestAsync(string publicWalkRequestId, string accessToken, CancellationToken token);
///
/// Stornieren eines Walks am Server
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> CancelWalkAsync(WalkCancelDto requestDto, string accessToken, CancellationToken token);
///
/// Starten eines Walks am Server
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> StartWalkAsync(WalkStartDto requestDto, string accessToken, CancellationToken token);
///
/// abschließen eines Walks am Server
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> CompleteWalkAsync(WalkCompleteDto requestDto, string accessToken, CancellationToken token);
///
/// Bestätigen eines Walks am Server
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> ConfirmWalkAsync(WalkConfirmDto requestDto, string accessToken, CancellationToken token);
///
/// Bestätigen eines Walks am Server mit Rating
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> ConfirmWalkWithRatingAsync(WalkConfirmWithRatingDto requestDto, string accessToken, CancellationToken token);
///
/// Setzen des Zahlungsstatus eines Walks am Server
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> SetWalkPaymentStatusAsync(WalkPaymentStatusDto requestDto, string accessToken, CancellationToken token);
///
/// Prüfen ob ein Walk für einen Zeitraum gebucht werden kann
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> IsWalkPossibleAsync(WalkPossibleDto requestDto, string accessToken, CancellationToken token);
///
/// Anlegen eines Walks wenn DIREKT! buchen möglich ist.
/// Wird online versucht und erst dann lokal gespeichert
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> CreateWalkDirectAsync(WalkCreateDto requestDto, string accessToken, CancellationToken token);
///
/// Anlegen eines Walks als Anfrage
/// Wird online versucht und erst dann lokal gespeichert
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> CreateWalkRequestAsync(WalkCreateDto requestDto, string accessToken, CancellationToken token);
///
/// Akzeptieren eines Walks am Server
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> AcceptWalkAsync(WalkAcceptDto requestDto, string accessToken, CancellationToken token);
///
/// Ablehnen eines Walks am Server
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> DeclineWalkAsync(WalkDeclineDto requestDto, string accessToken, CancellationToken token);
///
/// Reklamieren eines Walks am Server
///
/// Anfrage DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> ComplainWalkAsync(WalkComplaintCreateDto requestDto, string accessToken, CancellationToken token);
///
/// Holen einer Reklamation zu einem Walk
///
/// ID des Walks
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetWalkComplaintAsync(string walkId, string accessToken, CancellationToken token);
#endregion
#region Ratings
///
/// Holen der Ratings vom Server
///
/// Id des AppUsers
/// Wann wurden das letzte mal Daten erfolgreich geholt? Wenn null, dann alle Daten
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetRatingsForSyncAsync(string appUserId, DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
///
/// Gibt ein Rating basierend auf Abfragekriterien zurück
///
/// Rating check DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetRatingExAsync(RatingCheckQueryDto ratingCheckDto, string accessToken, CancellationToken token);
///
/// Gibt ein Rating basierend auf der ID zurück
///
/// Id des Ratings
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetRatingAsync(string ratingId, string accessToken, CancellationToken token);
///
/// Anlegen eines Ratings am Server
///
/// Rating
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> CreateRatingAsync(RatingDto ratingDto, string accessToken, CancellationToken token);
///
/// Aktualisieren eines Ratings am Server
///
/// Rating DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> UpdateRatingAsync(RatingDto ratingDto, string accessToken, CancellationToken token);
///
/// Löschen eines Ratings am Server
///
/// Rating DTO
/// Id des App-Users
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> DeleteRatingAsync(RatingDto ratingDto, string appUserId, string accessToken, CancellationToken token);
///
/// Prüfen ob bereits ein Rating vorhanden ist
///
/// Rating check DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> HasRatedAsync(RatingCheckQueryDto ratingCheckDto, string accessToken, CancellationToken token);
///
/// Prüfen ob ein Rating vorgenommen werden kann
///
/// Rating check DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> CanRateAsync(RatingCheckQueryDto ratingCheckDto, string accessToken, CancellationToken token);
///
/// Holen von Ratings mit Namen vom Server.
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// ListCommunicationResult
Task>> GetRatingsWithNamesAsync(RatingsQueryDto query, string accessToken, CancellationToken token);
#endregion
#region Feedback
///
/// Anlegen eines Feedbacks am Server
///
/// Feedback
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> CreateFeedbackAsync(AppFeedbackCreateDto dto, string accessToken, CancellationToken token);
#endregion
#region Favourites
///
/// Holen der Favoriten vom Server
///
/// Id des AppUsers
/// Wann wurden das letzte mal Daten erfolgreich geholt? Wenn null, dann alle Daten
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetFavouritesForSyncAsync(string appUserId, DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
///
/// Anlegen eines Favoriten am Server
///
/// Favorit
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> CreateFavouriteAsync(FavouriteDto favouriteDto, string accessToken, CancellationToken token);
///
/// Aktualisieren eines Favoriten am Server
///
/// Favorit DTO
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> UpdateFavouriteAsync(FavouriteDto favouriteDto, string accessToken, CancellationToken token);
///
/// Löschen eines Favoriten am Server
///
/// Favorit DTO
/// Id des App-Users
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> DeleteFavouriteAsync(FavouriteDto favouriteDto, string appUserId, string accessToken, CancellationToken token);
///
/// Holen der Favoriten für einen Benutzer. Wird mit einem Objekt-Typen verwendet
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetFavouritesListAsync(FavouriteListQueryDto query, string accessToken, CancellationToken token);
#endregion
#region Pushnotifications
///
/// Registrieren / Aktualisieren eines Gerätes für Pushnotifications
///
/// Geräte-Informationen
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> RegisterPushnotificationsAsync(DeviceInstallationDto deviceInstallation, string accessToken, CancellationToken token);
///
/// Deregistrieren eines Gerätes für Pushnotifications
///
/// Id der Installation
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> UnregisterPushnotificationsAsync(string installationId, string accessToken, CancellationToken token);
#endregion
#region Wallets
///
/// Holen der Wallets eines AppUsers vom Server
///
/// Id des AppUsers
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetWalletsAsync(string appUserId, string accessToken, CancellationToken token);
///
/// Gibt den Saldo eines Wallets zurück
///
/// Id des App-Users
/// Typ des Wallets
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetWalletBalanceAsync(string appUserId, WalletType walletType, string accessToken, CancellationToken token);
#endregion
#region Bankkonten
///
/// Holt ein Bankkonto für einen App-User vom Server
///
/// Id des App-Users
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetBankAccountsAsync(string appUserId, string accessToken, CancellationToken token);
///
/// Anlegen oder Bearbeiten eines Bankkontos
///
/// Bankkonto
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult mit einem AppUser der die entsprechende BankId gesetzt hat
Task> CreateOrUpdateBankAccountAsync(BankAccountDto bankAccount, string accessToken, CancellationToken token);
#endregion
#region Transaktionsgebühren
///
/// Holen der Transaktionsgebühren vom Server.
///
/// Wann wurden das letzte mal Daten erfolgreich geholt? Wenn null, dann alle Daten
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetTransactionFeesAsync(DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
#endregion
#region Payment
///
/// Authorisierung der Bezahlung eines Walks mit dem Guthaben eines Wallets
/// Das Geld wird vom Guthabenkonto auf das Transaktions-Konto gelegt
///
/// Id des App-Users
/// Id des Walks
/// Zu zahlender Bertrag
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> AuthorizeWalkWithCreditAsync(string appUserId, string walkId, decimal ammount, string accessToken, CancellationToken token);
///
/// Authorisierung der Bezahlung eines Walks komplett mit einem Gutschein
///
/// Id des Gutscheins
/// Code des Gutscheins
/// Id des App-Users
/// Id des Walks
/// Zu zahlender Bertrag
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> AuthorizeWalkWithVoucherAsync(string voucherId, string voucherCode, string appUserId, string walkId, decimal ammount, string accessToken, CancellationToken token);
///
/// Einzahlen einer Summe auf das Transaktions-Konto eines App-Users mit Bezug auf einen Walk.
/// Es können gebühren sofort auf das Transaktions-Konto des Mandanten abgeführt werden
///
/// Id des App-Users
/// Id des Walks
/// Zu zahlender Bertrag
/// Anfallende Gebühren
/// Betrag der zusätzlich vom Guthabenkonto bezahlt werden muss
/// Typ der Einzahlung
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult mit dem ReturnUrl, wenn erfolgreich
Task> PayInAsync(string appUserId, string walkId, decimal ammount, decimal fees, decimal fromCredit, PayInType payInType, string accessToken, CancellationToken token);
#endregion
#region KYC
///
/// Holen der letzten KYC-Dokumente eines App-Users
///
/// Id des App-Users
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult mit dem aktuell gültigen KYC-Dokument oder null, wenn keines vorhanden
Task> GetLatestKycDocumentAsync(string appUserId, string accessToken, CancellationToken token);
///
/// KYC-Dokument für einen App-User erstellen mit einer Seite
///
/// Id des App-Users
/// Dokument-Quelle
/// Dateiname
/// Datei als byte-Array
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult mit dem aktuell erstellten KYC-Dokument
Task> CreateKycDocumentAsync(string appUserId, IdentityDocumentSource source, string fileOneName, byte[] fileOne, string accessToken, CancellationToken token);
///
/// KYC-Dokument für einen App-User erstellen mit zwei Seiten
///
/// Id des App-Users
/// Dokument-Quelle
/// Dateiname Datei 1
/// Datei 1 als byte-Array
/// Dateiname Datei 2
/// Datei 2 als byte-Array
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult mit dem aktuell erstellten KYC-Dokument
Task> CreateKycDocumentAsync(string appUserId, IdentityDocumentSource source, string fileOneName, byte[] fileOne, string fileTwoName, byte[] fileTwo, string accessToken, CancellationToken token);
#endregion
#region Payouts
///
/// Holen der Auszahlungen vom Server
///
/// Id des AppUsers
/// Wann wurden das letzte mal Daten erfolgreich geholt? Wenn null, dann alle Daten
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetPayoutsForSyncAsync(string appUserId, DateTimeOffset? lastUpdate, string accessToken, CancellationToken token);
///
/// Holen von Auszahlungen vom Server.
///
/// Abfrageobjekt
/// Aktuelles Accesstoken
/// CancellationToken
/// ListCommunicationResult
Task>> GetPayoutsAsync(PayoutQueryDto query, string accessToken, CancellationToken token);
///
/// Erstellen einer Auszahlung
///
/// Id des App-Users
/// Betrag der ausgezahlt werden soll
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> CreatePayoutAsync(string appUserId, decimal ammount, string accessToken, CancellationToken token);
///
/// Gibt eine Auszahlung eines App-Users zurück
///
/// Id des App-Users
/// Id der Auszahlung
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetPayoutAsync(string appUserId, string payoutId, string accessToken, CancellationToken token);
#endregion
#region AppVersion
///
/// Holen der aktuellen Version am Server für die gewählte Plattform
///
/// Plattform
/// Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> CheckCurrentAppVersionAsync(PlatformDto platform, string language, string accessToken, CancellationToken token);
///
/// Holen der aktuellen Version am Server für die gewählte Plattform
///
/// Plattform
/// Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetCurrentAppVersionAsync(PlatformDto platform, string language, string accessToken, CancellationToken token);
#endregion
#region Vouchers - Gutscheine
///
/// Validieren eines Gutschein-Codes für einen AppUser
///
/// Gutscheincode
/// Id des AppUsers
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> CheckVoucherCodeAsync(string voucherCode, string appUserId, string accessToken, CancellationToken token);
///
/// Versucht einen Gutscheincode mit Hilfe eines QR-Codes zu holen
///
/// QR-Code in Text
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> GetVoucherCodeByQrCode(string qrCode, string accessToken, CancellationToken token);
///
/// Versucht einen Gutschein zu reservieren
///
/// Id des Gutscheins
/// Code des Gutscheins
/// Id des AppUsers
/// Id des Walks
/// Betrag - kann kleiner Gutscheinwert sein
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> ReserveVoucherAsync(string voucherId, string code, string appUserId, string walkId, decimal ammount, string accessToken, CancellationToken token);
///
/// Stornieren eines Gutscheins
///
/// Id des Gutscheins
/// Id des AppUsers
/// Id des Walks
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> CancelVoucherAsync(string voucherId, string appUserId, string walkId, string accessToken, CancellationToken token);
#endregion
#region Abos - Subscriptions
///
/// Gibt eine Liste von verfügbaren Abos zurück
///
/// AppMode - Hundebesitzer oder Walker
/// Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetSubscriptionsAsync(AppMode appMode, string language, string accessToken, CancellationToken token);
///
/// Gibt eine Liste von gebuchten Abos zurück
///
/// Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetMySubscriptionsAsync(string language, string accessToken, CancellationToken token);
///
/// Gibt eine Liste von gebuchten und aktiven Abos zurück
///
/// Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> GetMyActiveSubscriptionsAsync(string language, string accessToken, CancellationToken token);
///
/// Erstellen einer Abo-Buchung
///
/// AppUserId
/// Id des Abos
/// Sprache
/// InAppBillingPurchase serialisiert als JSON
/// Optional: Ablaufdatum das gesetzt werden soll
/// Plattform auf der das Abo erstellt wird
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task>> CreateSubscriptionAsync(string appUserId, string subscriptionId, string language, string inAppBillingPurchase, DateTime? expirationDateToSet, Platform platform, string accessToken, CancellationToken token);
///
/// Wechseln eines Abos in der Gruppe für eine Abo-Buchung
///
/// Id der Abo-Buchung
/// AppUserId
/// Id des Abos auf das gechselt werden soll
/// Sprache
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> SwitchSubscriptionAsync(long bookingId, string appUserId, string subscriptionId, string language, string accessToken, CancellationToken token);
///
/// Stornieren einer Abo-Buchung
///
/// Abo-Buchungs ID
/// AppUserId
/// Sprache
/// Plattform auf der das Abo erstellt wurde
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> CancelSubscriptionAsync(long bookingId, string appUserId, string language, Platform platform, string accessToken, CancellationToken token);
///
/// Verlängern einer Abo-Buchung
///
/// Abo-Buchungs ID
/// AppUserId
/// Sprache
/// Plattform auf der das Abo erstellt wurde
/// Aktuelles Accesstoken
/// CancellationToken
/// CommunicationResult
Task> RenewSubscriptionAsync(long bookingId, string appUserId, string language, Platform platform, string accessToken, CancellationToken token);
#endregion
}
///
/// Ergebnis einer Kommunikation mit dem Server
///
/// Typ des Rückgabewertes
public class CommunicationResult
{
///
/// Erfolgreich?
///
public bool Success { get; set; }
///
/// Wenn nicht erfolgreich, Fehlermeldung
///
public string ErrorMessage { get; set; }
///
/// Der original Fehlercode, falls basierend darauf noch Aktionen folgen müssen
///
public CommunicationErrors ErrorCode { get; set; }
///
/// Wert wenn erfolgreich
///
public T Value { get; set; }
public CommunicationResult()
{
Success = false;
ErrorMessage = string.Empty;
ErrorCode = CommunicationErrors.None;
}
}
///
/// Ergebnis einer Kommunikation mit dem Server für Listen.
/// Beinhaltet zusätzliche Infos für das Paging
///
/// Typ des Rückgabewertes
public class ListCommunicationResult : CommunicationResult
{
///
/// Gesamt verfügbare Datensätze
///
public int Total { get; set; }
///
/// Effektiv genommen - kann gegenüber Anfrage geändert werden, wenn weniger Datensätze da sind
///
public int Take { get; set; }
///
/// Effektiv ausgelassen - kann gegenüber Abfrage verändert werden, wenn weniger Datensätze
///
public int Skip { get; set; }
public ListCommunicationResult()
{
Total = 0;
Skip = -1;
Take = -1;
}
}
}