using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using gehGassi.Dto.Common; using gehGassiApp.Core.Interfaces.Synchronization; using gehGassiApp.Domain.Common; using gehGassiApp.Domain.Payment; using gehGassiApp.Domain.Users; using gehGassiApp.Domain.Walks; namespace gehGassiApp.Core.Interfaces { /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Zahlungen übernimmt /// public interface IPaymentService: ISyncPushPullService { /// /// Gibt eine Liste von Wallets eines App-Users zurück /// /// Id des App-Users /// 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); /// /// Gibt die Bankverbindung eines App-Users zurück /// /// Id des App-Users /// Aktuelles Accesstoken /// CancellationToken /// CommunicationResult Task> GetBankAccountAsync(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(BankAccount bankAccount, string accessToken, CancellationToken token); /// /// 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); /// /// 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); /// /// Gibt Walks vom Server zurück /// /// Id App-Users /// Liste von Sortierangaben /// Wie viele Walks sollen abgerufen werden? -1 Wenn nicht anwenden. /// Wie viele Walks sollen ausgelassen werden? -1 Wenn nicht anwenden. /// Aktuelles Accesstoken /// CancellationToken /// Nächster Walk oder null, wenn keiner vorhanden Task>> GetPayoutsAsync(string appUserId, List sortOrders, int take, int skip, 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); } }