using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using gehGassi.Dto.Common; using gehGassi.Dto.Walks; using gehGassiApp.Core.Interfaces.Synchronization; using gehGassiApp.Domain.Common; using gehGassiApp.Domain.Walks; namespace gehGassiApp.Core.Interfaces { /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Walks ermöglicht /// public interface IWalkService : IService, ISyncPushPullService { /// /// Gibt einen Walk mit Namen aufgelöst zurück. Kommt vom Server /// /// Id des Walks /// Gewünschte Sprache /// Aktuelles Accesstoken /// CancellationToken /// WalkWithNames oder null, wenn nicht gefunden Task> GetWalkWithNamesAsync(string walkId, string language, string accessToken, CancellationToken token); /// /// Gibt den nächsten Walk für einen Hundebesitzer zurück /// /// Id des Hundebesitzers /// Datum ab wann gesucht werden soll. Normalerweise "Jetzt" /// Gewünschte Sprache /// Aktueller appMode /// Aktuelle Position /// Aktuelles Accesstoken /// CancellationToken /// Nächster Walk oder null, wenn keiner vorhanden Task> GetNextWalkForOwnerAsync(string ownerId, DateTimeOffset date, string language, AppMode appMode, LocationDto location, string accessToken, CancellationToken token); /// /// Gibt den nächsten Walk für einen Dogwalker zurück /// /// Id des Hundebesitzers /// Datum ab wann gesucht werden soll. Normalerweise "Jetzt" /// Gewünschte Sprache /// Aktueller appMode /// Aktuelle Position /// Aktuelles Accesstoken /// CancellationToken /// Nächster Walk oder null, wenn keiner vorhanden Task> GetNextWalkForWalkerAsync(string walkerId, DateTimeOffset date, string language, AppMode appMode, LocationDto location, string accessToken, CancellationToken token); /// /// Gibt Walks vom Server zurück /// /// Id des Hundebesitzers - angeben wenn für Hundebesitzer /// Id des Dogwalkers - angeben wenn für DogWalker /// Datum ab wann gesucht werden soll. Normalerweise "Jetzt", leer für alle /// Status des Walks, NULL wenn alle /// Service Type, NULL wenn alle /// Zahlungsstatus, NULL wenn alle /// Optinal: Filter Hund /// Optional: Filter Walker /// Optional: Filter Owner /// Stornierte ignorieren /// Sollen Walks die noch eine Anfrage sind, ohne Akzeptiert oder Agelehnt ignorniert werden? /// Sollen abgelehnte Anfragen ignoriert werden? /// Liste von Sortierangaben /// Gewünschte Sprache /// Aktueller appMode /// Aktuelle Position /// 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>> GetWalksAsync(string dogOwnerId, string dogWalkerId, DateTimeOffset? date, WalkStatus? status, WalkServiceType? serviceType, PaymentStatus? paymentStatus, string dogFilter, string walkerFilter, string ownerFilter, bool ignoreCancelled, bool ignoreRequested, bool ignoreDeclined, List sortOrders, string language, AppMode appMode, LocationDto location, int take, int skip, string accessToken, CancellationToken token); /// /// Gibt Walks vom Server zurück. /// Sondersituation: Für Walker werden nur Walks mit einem Paymentstatus größer gleich Authorized zurück /// /// Id des Hundebesitzers - angeben wenn für Hundebesitzer /// Id des Dogwalkers - angeben wenn für DogWalker /// Datum ab wann gesucht werden soll. Normalerweise "Jetzt", leer für alle /// Status des Walks, NULL wenn alle /// Service Type, NULL wenn alle /// Zahlungsstatus, NULL wenn alle /// Optinal: Filter Hund /// Optional: Filter Walker /// Optional: Filter Owner /// Stornierte ignorieren /// Sollen Walks die noch eine Anfrage sind, ohne Akzeptiert oder Agelehnt ignorniert werden? /// Sollen abgelehnte Anfragen ignoriert werden? /// Liste von Sortierangaben /// Gewünschte Sprache /// Aktueller appMode /// Aktuelle Position /// 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>> GetWalksWalkerAsync(string dogOwnerId, string dogWalkerId, DateTimeOffset? date, WalkStatus? status, WalkServiceType? serviceType, PaymentStatus? paymentStatus, string dogFilter, string walkerFilter, string ownerFilter, bool ignoreCancelled, bool ignoreRequested, bool ignoreDeclined, List sortOrders, string language, AppMode appMode, LocationDto location, int take, int skip, 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); /// /// Gibt einen Walk zurück, welcher einer öffentlichen Anfrage zugeordnet ist - nur Lokal /// /// Id der öffentlichen Anfrage /// Walk oder null, wenn nicht gefunden Task GetWalkByPublicRequestAsync(string publicWalkRequestId); /// /// Gibt einen Walk zurück, welcher einer öffentlichen Anfrage zugeordnet ist - nur online /// /// Id der öffentlichen Anfrage /// Walk oder null, wenn nicht gefunden Task> GetWalkByPublicRequestAsync(string publicWalkRequestId, string accessToken, CancellationToken token); /// /// Stornieren eines Walks /// /// ID des Walks /// Quelle der Stornierung /// Grund der Stornierung /// Aktuelles Accesstoken /// CancellationToken /// true wenn erfolgreich, false sonst Task CancelAsync(string walkId, CancellationSource cancellationSource, string cancellationReason, string accessToken, CancellationToken token); /// /// Starten eines Walks /// /// ID des Walks /// Aktuelles Accesstoken /// CancellationToken /// true wenn erfolgreich, false sonst Task StartAsync(string walkId, string accessToken, CancellationToken token); /// /// Abschließen eines Walks /// /// ID des Walks /// Kotabsatz? /// Info des Walkers zum abschluss /// Punkte für die Bewertung des Walks /// Anmerkungen zum Rating des Walks /// Punkte für die Bewertung des Hundes / der Hunde /// Anmerkung zum Rating des Hundes / der Hunde /// Aktuelles Accesstoken /// CancellationToken /// true wenn erfolgreich, false sonst Task CompleteAsync(string walkId, bool defactation, string completedInfo, decimal ratingPoints, string ratingComment, decimal ratingDogsPoints, string ratingDogsComment, string accessToken, CancellationToken token); /// /// Zahlungsstatus eines Walks setzen /// /// ID des Walks /// Zahlungsstatus der gesetzt werden soll /// Aktuelles Accesstoken /// CancellationToken /// true wenn erfolgreich, false sonst Task SetPaymentStatusAsync(string walkId, PaymentStatus paymentStatus, string accessToken, CancellationToken token); /// /// Prüfen ob ein Walk für einen DogWalker in einem Zeitraum gebucht werden kann /// /// Id des DogWalkers /// Start /// Ende /// Aktuelles Accesstoken /// CancellationToken /// true wenn verfügbar, false sonst Task IsWalkPossibleAsync(string dogWalkerId, DateTimeOffset start, DateTimeOffset end, string accessToken, CancellationToken token); /// /// Anlegen eines Walks wenn DIREKT! buchen möglich ist. /// Wird online versucht und erst dann lokal gespeichert /// /// WalkCreateDto /// Aktuelles Accesstoken /// CancellationToken /// Angelegter Walk oder null, wenn nicht erfolgreich Task> CreateWalkDirectAsync(WalkCreateDto requestDto, string accessToken, CancellationToken token); /// /// Anlegen eines Walks als Anfrage /// Wird online versucht und erst dann lokal gespeichert /// /// WalkCreateDto /// Aktuelles Accesstoken /// CancellationToken /// Angelegter Walk oder null, wenn nicht erfolgreich Task> CreateWalkRequestAsync(WalkCreateDto requestDto, string accessToken, CancellationToken token); /// /// Akzeptieren eines Walks /// /// ID des Walks /// Aktuelles Accesstoken /// CancellationToken /// true wenn erfolgreich, false sonst Task AcceptAsync(string walkId, string accessToken, CancellationToken token); /// /// Ablehnen eines Walks /// /// ID des Walks /// Grund der Ablehnung /// Aktuelles Accesstoken /// CancellationToken /// true wenn erfolgreich, false sonst Task DeclineAsync(string walkId, string declineReason, string accessToken, CancellationToken token); /// /// Gibt zurück ob ein Walker Anfragen hat /// /// Id des Walkers /// true wenn ja, false sonst Task HasRequestedAsync(string dogWalkerId); /// /// Gibt eine Liste von Walks zurück, welche gleich gestartet werden sollen /// /// ID des AppUsers /// Datum für den Vergleich /// Liste von Walks die gestartet werden sollen Task> GetWalksToStartAsync(string appUserId, DateTimeOffset date); /// /// Gibt eine Liste von Walks zurück, welche beendet werden sollen /// /// ID des App-Users /// Datum für den Vergleich /// Liste von Walks die gestartet werden sollen Task> GetWalksToCompleteAsync(string appUserId, DateTimeOffset date); /// /// Aktualisieren des Zahlungsstatus eines Walks in der lokalen DB /// /// Id des Wals /// Zu setzender Zahlungsstatus /// Datum Aktualisierung /// Walk oder null, wenn nicht gefunden Task SetPaymentStatusLocalAsync(string walkId, PaymentStatus paymentStatus, DateTimeOffset updatedAt); /// /// Bestätigen eines Walks. Löst die Bezahlung für einen Walker aus. Geht nur Online! /// /// Id des Hundebesitzers /// Id des Walks /// Aktuelles Accesstoken /// CancellationToken /// CommunicationResult mit aktualisierten Walk Task> ConfirmAsync(string appUserId, string walkId, string accessToken, CancellationToken token); /// /// Bestätigen eines Walks mit Rating. Löst die Bezahlung für einen Walker aus. Geht nur Online! /// /// Id des Hundebesitzers /// Id des Walks /// Punkte für das Rating /// Anmerkungen zum Rating /// Aktuelles Accesstoken /// CancellationToken /// CommunicationResult mit aktualisierten Walk Task> ConfirmWithRatingAsync(string appUserId, string walkId, decimal ratingPoints, string ratingInfo, string accessToken, CancellationToken token); /// /// Reklamieren eines Walks /// /// ID des Walks /// Typ der Reklamation /// Grund der Reklamation als Text /// Aktuelles Accesstoken /// CancellationToken /// true wenn erfolgreich, false sonst Task> ComplainAsync(string walkId, WalkComplaintType type, string complainReason, 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); } }