using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Fido2NetLib; using gehGassi.Domain.Advertisements; using gehGassi.Domain.Coins; using gehGassi.Domain.Common; using gehGassi.Domain.Customers; using gehGassi.Domain.Devices; using gehGassi.Domain.Dogs; using gehGassi.Domain.Favourites; using gehGassi.Domain.Feedback; using gehGassi.Domain.Messages; using gehGassi.Domain.News; using gehGassi.Domain.Pages; using gehGassi.Domain.Payment; using gehGassi.Domain.Ratings; using gehGassi.Domain.Reporting; using gehGassi.Domain.Shop; using gehGassi.Domain.Subscriptions; using gehGassi.Domain.Users; using gehGassi.Domain.Vouchers; using gehGassi.Domain.Walks; using gehGassi.Dto.Common; using gehGassi.Dto.DogWalkers; using NetTopologySuite.Geometries; namespace gehGassi.Core.Interfaces { /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Benutzern realisiert /// public interface IUserService : IService { /// /// Prüft ob ein Benutzername noch verfügbar ist. /// /// Zu prüfender Benutzername /// Id die ignoriert werden soll /// true wenn verfügbar, false sonst Task IsUsernameAvailableAsync(string userName, string id = ""); /// /// Gibt einen Benutzer anhand des Benutzernamens zurück /// /// Benutzername /// ApplicationUser oder null, wenn nicht gefunden Task GetByUsernameAsync(string userName); /// /// Gibt eine gefilterte Liste von Benutzer zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Benutzer IQueryable Filter(string filter); /// /// Erstellen eines Benutzers /// /// Benutzer ApplicationUser Create(); /// /// Gibt eine gefilterte Liste von Benutzern mit Namen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Benutzer IQueryable FilterWithNames(string filter); /// /// Gibt eine gefilterte Liste von Benutzern mit Namen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Id des Kunden /// List betroffener Benutzer IQueryable FilterWithNamesCustomer(string filter, long customerId); /// /// Zurücksetzen des Kunden auf null /// /// Id des Kunden /// Task Task ResetCustomerAsync(long customerId); /// /// Zurücksetzen des App-Users auf null /// /// Id des App-Users /// Task Task ResetAppUserAsync(string appUserId); /// /// Gibt einen Benutzer anhand der App-UserId zurück /// /// App-UserId /// ApplicationUser oder null, wenn nicht gefunden Task GetByAppUserAsync(string appUserId); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Fido-Credentials realisiert /// public interface IFidoService : IService { /// /// Gibt eine gefilterte Liste von Fido-Credentials zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Fido-Credentials IQueryable Filter(string filter); /// /// Gibt eine gefilterte Liste von Fido-Credentials für einen Benutzer zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Benutzername /// List betroffener Fido-Credentials IQueryable Filter(string filter, string username); /// /// Erstellen eines Fido-Credentials /// /// Fido-Credential FidoStoredCredential Create(); /// /// Gibt alle Credentials für einen Benutzer zurück /// /// Benutzername /// Liste Credentials Task> GetCredentialsAsync(string username); /// /// Gibt eine Liste aller Benutzer zurück die über eine CredentialId verfügen /// /// CredentialId /// Liste Fido2 User Task> GetUsersByCredentialIdAsync(byte[] credentialId); /// /// Gibt zurück ob ein Benutzer über Fido credentials verfügt /// /// Benutzername /// true wenn ja, false sonst Task HasFidoCredentialsAsync(string username); /// /// Gibt ein Credential zurück /// /// CredentialId /// FidoStoredCredential Task GetByIdAsync(byte[] id); /// /// Gibt eine Liste von Credentials anhand des userHandles zurück /// /// Userhandle /// Liste Credentials Task> GetCredentialsByUserHandleAsync(byte[] userHandle); /// /// Aktualisieren des Counters /// /// /// /// Task Task UpdateCounterAsync(byte[] credentialId, uint counter); } /// /// Schnittstellenbeschreibung für einen Service der EU-UID-Nummern auf deren Gültigkeit prüft /// public interface IVatValidationService { /// /// Prüft eine UID-Nummer auf deren Gültigkeit /// /// UID-Nummer /// ISO-2 Code des Landes /// true wenn erfolgreich, false sonst Task IsValidAsync(string vat, string countryIso2); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Audits realisiert /// public interface IAuditService : IService { /// /// Gibt eine gefilterte Liste von audits zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Kunden IQueryable Filter(string filter); /// /// Gibt eine Liste von Audits zurück /// /// Key des Objektes /// Typ des Objektes (Table) /// Liste von audits Task> GetListAsync(string key, string table); /// /// Gibt eine Liste von Audits zurück /// /// Key des Objektes /// Typ des Objektes (Table) /// /// Durchgeführte Aktion /// Liste von audits Task> GetListAsync(string key, string table, AuditAction action); /// /// Gibt einen Audit-Eintrag zurück /// /// Key des Objektes /// Typ des Objektes (Table) /// /// Durchgeführte Aktion /// Task GetAsync(string key, string table, AuditAction action); /// /// Gibt eine gefilterte Liste von audits zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Kunden IQueryable FilterWithNames(string filter); /// /// Gibt eine Liste von Audits zurück /// /// Key des Objektes /// Typ des Objektes (Table) /// Liste von audits Task> GetListWithNamesAsync(string key, string table); /// /// Gibt eine Liste von Audits zurück /// /// Key des Objektes /// Typ des Objektes (Table) /// /// Durchgeführte Aktion /// Liste von audits Task> GetListWithNamesAsync(string key, string table, AuditAction action); /// /// Gibt einen Audit-Eintrag zurück /// /// Key des Objektes /// Typ des Objektes (Table) /// /// Durchgeführte Aktion /// Task GetWithNamesAsync(string key, string table, AuditAction action); /// /// Löschen von Audit-Einträgen /// /// Key des Objektes /// Typ des Objektes (Table) /// Anzahl gelöschte Daten Task DeleteAsync(string key, string table); /// /// Anonymisieren von Audit-Einträgen /// /// Key des Objektes /// Typ des Objektes (Table) /// Anzahl anonymisierte Daten Task AnonymizeAsync(string key, string table); /// /// Loggen des Zugriffs eines Users auf einen Datensatz /// /// Key des Objektes /// Typ des Objektes (Table) /// Benutzer der den Zugriff durchgeführt hat /// Task Task LogAccessAsync(string key, string table, string userName); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Kunden-Typen realisiert /// public interface ICustomerTypeService : IService { /// /// Gibt eine gefilterte Liste von Kunden-Typen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Kunden-Typen IQueryable Filter(string filter); /// /// Erstellen eines Kunden-Typen /// /// Kunden-Type CustomerType Create(); /// /// Gibt eine gefilterte Liste von Kunden-Typen zurück. Sucht nur im Namen /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Kunden-Typen Task> SearchAsync(string filter); /// /// Gibt ein Kunden-Typen zurück /// /// UniqueId des Kunden-Typen /// Betroffener Kunden-Typ Task GetByUniqueIdAsync(Guid uniqueId); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Kunden realisiert /// public interface ICustomerService : IService { /// /// Gibt eine gefilterte Liste von Kunden zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Kunden IQueryable Filter(string filter); /// /// Erstellen eines Kunden /// /// Kunde Customer Create(); /// /// Gibt eine gefilterte Liste von Kunden zurück. Sucht nur im Namen /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Kunden Task> SearchAsync(string filter); /// /// Gibt eine gefilterte Liste von Kunden zurück die ein Mangopay Konto haben. Sucht nur im Namen /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Kunden Task> SearchWithMangopayAccountAsync(string filter); /// /// Gibt ein Kunden zurück /// /// UniqueId des Kunden /// Betroffener Kunde Task GetByUniqueIdAsync(Guid uniqueId); /// /// Gibt eine gefilterte Liste von Kunden mit Namen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// List betroffener Kunden IQueryable FilterWithNames(string filter, string language, string fallback); /// /// Gibt die nächste freie Nummer für einen Kunden zurück /// /// Kunden-Nummer string GetNextNumber(); /// /// Zurücksetzen des Kunden-Typs auf null /// /// Id des Kunden-Typs /// Anzahl zurückgesetzte Kunden Task ResetTypeAsync(long typeId); /// /// Zurücksetzen der Branche auf null /// /// Id der Branche /// Anzahl zurückgesetzte Kunden Task ResetBranchAsync(string branchId); /// /// Zurücksetzen der Branchen-Listungen /// /// Id der Branche /// Anzahl zurückgesetzte Kunden Task ResetBranchListingsAsync(string branchId); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von App-Usern realisiert /// public interface IAppUserService : IService { /// /// Gibt eine gefilterte Liste von App-Usern zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Sollen gelöschte inkludiert werden? /// List betroffener App-User IQueryable Filter(string filter, bool includeDeleted); /// /// Erstellen eines App-Users /// /// App-User AppUser Create(); /// /// Gibt eine gefilterte Liste von App-Usern zurück. Sucht nur im Namen /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Sollen gelöschte inkludiert werden? /// List betroffener App-User Task> SearchAsync(string filter, bool includeDeleted); /// /// Gibt die nächste freie Nummer für einen App-User zurück /// /// App-User-Nummer string GetNextNumber(); /// /// Gibt die Anzahl von App-UserN im System zurück /// /// Sollen gelöschte inkludiert werden? /// Anzahl App-User Task CountAsync(bool includeDeleted); /// /// Gibt die Anzahl der AppUser im System zurück welche einem Typ entsprechen /// /// Sollen gelöschte inkludiert werden? /// Typ der gesucht wird /// Optional: wenn angegeben, dann muss das Datum des letzten Updates größer oder gleich dem lastUpdate Datum sein /// Anzahl AppUser Task CountAsync(bool includeDeleted, AppUserType type, DateTimeOffset? lastUpdate); /// /// Entsperren von gesperrten App-Usern deren LockedUntil-Datum erreicht wurde. /// /// Anzahl entsperrte App-User Task AutoUnlockAsync(); /// /// Gibt eine Liste von App-Usern zurück, die für die automatische Auszahlung in Frage kommen /// /// List App-User Task> GetForAutoPayoutAsync(); /// /// Gibt zurück ob ein App-User gesperrt ist /// /// Id des App-Users /// true wenn gesperrt, false sonst Task IsLockedAsync(string appUserId); /// /// Gibt eine List von AppUsern zurück /// /// skip /// take /// Typ der gesucht wird /// Optional: wenn angegeben, dann muss das Datum des letzten Updates größer oder gleich dem lastUpdate Datum sein /// Sollen gelöschte inkludiert werden? /// Liste AppUser Task> GetAllAsync(int skip, int take, AppUserType type, DateTimeOffset? lastUpdate, bool includeDeleted); #region Profil /// /// Erstellt ein DogWalker Profil wenn es noch nicht existiert /// /// Id des App-Users /// DogWalker Propfil Task CreateWalkerProfileIfNotExistsAsync(string id); /// /// Gibt ein Walker-Profil für einen App-User zurück /// /// Id des App-Users /// DogWalker Propfil Task GetWalkerProfileAsync(string id); /// /// Löschen eines Walker-Profils für einen App-User /// /// Id des App-Users /// DogWalker Propfil Task RemoveWalkerProfileAsync(string id); #endregion #region DogWalkers /// /// Gibt eine Liste Dogwalkern zurück - sortiert nach Distanz /// /// Id des App-Users der ignoriert werden soll, falls ein DogOwner auch Walker ist /// Optional: Breitengrad /// Optional: Längengrad /// Wie viele sollen max gewählt werden? /// Liste passender Dogwalker Task> GetWalkersForAppAsync(string ignoreId, double lat, double lng, int take); /// /// Gibt einen Dogwalker zurück /// /// Id des DogWalkers /// DogWalker oder null wenn nicht gefunden Task GetWalkerAsync(string dogWalkerId); /// /// Gibt eine Liste von Dogwalkern zurück /// /// Abfrage-Objekt für Dogwalker - Beinhaltet alle Filter und auch Paging /// Liste gefudene Walks Task<(int total, List list)> GetWalkersAsync(DogWalkerQueryDto query); /// /// Gibt eine Liste von Dogwalkern zurück welche über eine Adresse verfügen und deren Standort vom angegebenen Standort nicht weiter als der definierte Radius entfernt sind /// /// Id des Walkers der ignoriert werden soll, falls der hundebesitzer auch Walker ist /// Location für die Abholung des Hundes - darf nicht weiter als definierter Radius entfernt sein /// Liste gefundene Walker Task> GetWalkersForNotificationAsync(string ignoreId, Point location); #endregion #region Systemnachrichten /// /// Abfrage des App-Users für eine Systemnachricht /// /// Abfrageparameter /// Liste der App-User Task> GetForSystemMessageAsync(SystemMessageAppUserQuery query); /// /// Gibt zurück wie viele App-User für eine Systemnachricht gefunden werden /// /// Abfrageparameter /// Anzahl der App-User Task CountForSystemMessageAsync(SystemMessageAppUserQuery query); #endregion #region Blocks /// /// Erstellen einer Blockierung eines App-Users /// /// AppUserBlock AppUserBlock CreateBlock(); /// /// Hinzufügen eines Blocks eine App-Users /// /// AppUserBlock void AddBlock(AppUserBlock block); /// /// Blockiert einen App-User für einen anderen, wenn noch kein Block existiert /// /// Id des App-Users der die Blockierung vornimmt /// Id des App-Users der blockiert wird /// Von wem erstellt? /// Optional: Bis wann soll der App-User blockiert werden? /// Optional: Verweis auf eine Meldung /// Erstellte oder existierende Blockierung Task BlockAppUserAsync(string blockingAppUserId, string blockedAppUserId, string createdBy, DateTimeOffset? blockUntil = null, long? reportId = null); /// /// Aufheben der Blockierung eines App-Users durch einen anderen, wenn vorhanden /// /// Id des App-Users der die Blockierung vornimmt /// Id des App-Users der blockiert wird /// true wenn erfolgreich, false sonst Task UnblockAppUserAsync(string blockingAppUserId, string blockedAppUserId); /// /// Löschen einer Blockierung /// /// AppUserBlock void RemoveBlock(AppUserBlock block); /// /// Löschen einer Blockierung /// /// Id der Blockierung Task RemoveBlockByIdAsync(long id); /// /// Entfernen von Blocks eines App-Users der blockiert hat /// /// Id des AppUsers der blockiert hat /// Task Task RemoveBlocksByBlockingUserAsync(string id); /// /// Entfernen von Blocks eines App-Users der blockiert wurde /// /// Id des AppUsers der blockiert wurde /// Task Task RemoveBlocksByBlockedUserAsync(string id); /// /// Löschen von abgelaufenen Blockierungen, welche ein Ablaufdatum haben /// /// Datum das erreicht werden muss /// Anzahl gelösche Blockierungen Task RemoveExpiredBlocksAsync(DateTimeOffset date); /// /// Gibt zurück ob ein App-User von einem anderen blockiert wurde /// /// Id des App-Users der blockiert hat /// Id des App-Users der blockiert wurde /// true wenn blockiert, false sonst Task IsBlockedAsync(string blockingAppUserId, string blockedAppUserId); #endregion /// /// Gibt eine Liste von blockierten App-Usern für einen App-User zurück /// /// Abfrageparameter /// Liste von gesperrten App-Usern Task<(int total, List list)> GetBlockedAppUsersAsync(BlockedQueryDto query); /// /// Gibt eine Liste von AppUsern zurück welche als geöscht markiert sind /// /// Liste AppUser Task> GetDeletedAsync(); /// /// Gibt eine Liste von AppUsern zurück deren Location nicht valide ist /// /// Liste AppUser Task> GetWithInvalidLocationAsync(); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Rubriken realisiert /// public interface IAdvertisementCategoryService : IService { /// /// Gibt eine gefilterte Liste von Rubriken zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Rubriken IQueryable Filter(string filter); /// /// Erstellen einer Rubrik /// /// Kunde AdvertisementCategory Create(); /// /// Gibt eine gefilterte Liste von Rubriken zurück. Sucht nur im Titel /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Rubriken Task> SearchAsync(string filter); /// /// Gibt eine gefilterte Liste von Rubriken mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Liste betroffener Rubriken IQueryable FilterWithNames(string filter, string language, string fallback, bool includeDeleted); /// /// Gibt eine Liste von Kategorien zurück die Online sind /// /// Gewünschte Sprache /// Fallback Sprache /// Liste betroffener Rubriken Task> GetOnlineWithNamesAsync(string language, string fallback); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Versandkosten ermöglicht /// public interface IShipmentCostService : IService { /// /// Gibt eine gefilterte Liste von Versandkosten zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Versandkosten IQueryable Filter(string filter); /// /// Erstellen von Versandkosten /// /// Versandkosten ShipmentCost Create(); /// /// Gibt eine gefilterte Liste von Versandkosten zurück. Sucht nur im Land /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Versandkosten Task> SearchAsync(string filter); /// /// Berechnen der Versandkosten /// /// Zielland /// Gewicht /// Zwischensumme netto /// Summe der zusätzlichen Versandkosten je Produkt aber in Summe /// Versandkosten netto Task CalculateShipmentAsync(string targetCountry, decimal weight, decimal subtotal, decimal additionalShipmentCosts); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Steuern realisiert /// public interface ITaxRateService : IService { /// /// Gibt eine gefilterte Liste von Steuern zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Steuern IQueryable Filter(string filter); /// /// Erstellen einer Steuer /// /// Steuer TaxRate Create(); /// /// Gibt eine gefilterte Liste von Steuern zurück. Sucht nur im Titel /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Hundeausführern Task> SearchAsync(string filter); /// /// Gibt eine gefilterte Liste von Steuern mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache falls keine Übersetzung vorhanden /// Liste betroffener Steuern IQueryable FilterWithNames(string filter, string language, string fallback); /// /// Prüft ob für ein Land schon eine Steuer mit einem Wert existiert /// /// Land ISO2 /// Steuer-Wert /// true wenn existiert, false sonst Task ExistsAsync(string countryIso, decimal value); /// /// Zurücksetzen wird für Versandkosten verwendet /// /// Id die ausgenommen werden soll /// Task Task ResetShipmentAsync(int excludeId); /// /// Gibt den Steuersatz für Versandkosten zurück /// /// Versandkosten-Steuersatz in Prozent Task GetForShipmentAsync(); /// /// Berechnen eines Brutto-Wertes für einen Preis /// /// Preis netto /// Id der Steuerstufe /// QuellLand des Shops /// Zielland /// Brutto-Wert Task CalculateGrossAsync(decimal value, int taxRateId, string sourceCountry, string targetCountry); /// /// Berechnen eines Brutto-Wertes für Versandkosten /// /// Preis netto /// QuellLand des Shops /// Zielland /// Brutto-Wert Task CalculateShipmentGrossAsync(decimal value, string sourceCountry, string targetCountry); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Produktkategorien realisiert /// public interface IProductCategoryService : IService { /// /// Gibt eine gefilterte Liste von Produktkategorien zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Produktkategorien IQueryable Filter(string filter); /// /// Erstellen einer Produktkategorie /// /// Produktkategorie ProductCategory Create(); /// /// Gibt eine gefilterte Liste von Produktkategorien mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Liste betroffener Produktkategorien IQueryable FilterWithNames(string filter, string language, string fallback, bool includeDeleted); /// /// Gibt eine gefilterte Liste von Produktkategorien mit Namen zurück in einer gewählten Sprache /// /// Id des PArents oder null wenn root /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Liste betroffener Produktkategorien IQueryable FilterWithNames(int? parentId, string filter, string language, string fallback, bool includeDeleted); /// /// Erstellen eines Kategorie-Baums /// /// Gewünschte Sprache /// Fallback Sprache /// ID die ausgeschlossen werden soll, wenn es um die Auswahl eines Parents geht /// Sollen gelöschte Kategorien inkludiert werden? /// Kategorie-Baum Task> GetTreeAsync(string language, string fallback, int excludeId = -1, bool includeDeleted = false); /// /// Erstellen eines Kategorie-Baums für Kunden /// /// Quelle - für wen holen? /// Gewünschte Sprache /// Fallback Sprache /// ID die ausgeschlossen werden soll, wenn es um die Auswahl eines Parents geht /// Sollen gelöschte Kategorien inkludiert werden? /// Kategorie-Baum Task> GetTreeAsync(OrderSource orderSource, string language, string fallback, int excludeId = -1, bool includeDeleted = false); /// /// Setzen einer neuen ParentId für Kateorien /// /// Alte Id welche ersetzt werden soll /// Neue Id die gesetzt werden soll. Kann auch NULL sein, was bedeutet, dass root gesetzt werden soll /// Task ResetParentAsync(int oldId, int? newId); /// /// Gibt zurück ob eine Kategorie Kinder hat /// /// Id der Kategorie /// true wenn ja, false sonst Task HasChildrenAsync(int id); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Artikeln / Produkten ermöglicht /// public interface IProductService : IService { /// /// Erstellen eines Produktes /// /// Produkt Product Create(); /// /// Gibt eine gefilterte Liste von Produkten mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Liste betroffener Produkte IQueryable FilterWithNames(string filter, string language, string fallback, bool includeDeleted); /// /// Prüft ob für einen Listungstypen und eine Branche schon ein Produkt existiert /// /// Listungstyp /// Branche /// true wenn existiert, false sonst Task CheckListingExistsAsync(ListingType listingType, string branchId); /// /// Prüft ob für einen Listungstypen und eine Branche schon ein Produkt existiert /// /// Listungstyp /// Branche /// Preistyp /// true wenn existiert, false sonst Task CheckListingExistsAsync(ListingType listingType, string branchId, PriceType priceType); /// /// Prüft ob für eine Rubrik schon ein Produkt für Werbung existiert /// /// Rubrik /// true wenn existiert, false sonst Task CheckAdvertisementExistsAsync(string advertisementCategoryId); /// /// Gibt zurück wie viele nicht gelöschte Produkte eine Rubrik verwenden /// /// Id der Rubrik /// Anzahl der Produkte die eine Rubrik verwenden Task CountByAdvertisementCategoryAsync(string advertisementCategoryId); /// /// Setzt für Produkte die Rubrik zurück /// /// Id der Rubrik /// true wenn nur gelöschte Produkte zurückgesetzt werden sollen /// Anzahl Produkte zurückgesetzt Task ResetAdvertisementCategoryAsync(string advertisementCategoryId, bool deletedOnly); /// /// Setzt für Produkte die Produktkategorie zurück /// /// Id der Produktkategorie /// true wenn nur gelöschte Produkte zurückgesetzt werden sollen /// Anzahl Produkte zurückgesetzt Task ResetProductCategoryAsync(int categoryId, bool deletedOnly); /// /// Gibt zurück wie viele Produkte eine Steuergruppe verwenden /// /// Id der Steuergruppe /// Anzahl der Produkte die eine Steuergruppe verwenden Task CountByTaxRateAsync(int taxRateId); /// /// Gibt eine gefilterte Liste von Produkteinstellungen für Länder zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Id des Produktes /// Liste betroffener Produkteinstellungen IQueryable FilterCountry(string filter, int productId); /// /// Gibt eine Produkteinstellung für ein Land zurück /// /// Id der Einstellung /// Produkteinstellung oder null, wenn nicht gefunden Task GetCountryAsync(int id); /// /// Gibt eine Produkteinstellung für ein Land zurück /// /// Id des Produktes /// Land ISO2 /// Produkteinstellung oder null, wenn nicht gefunden Task GetCountryAsync(int productId, string countryIso); /// /// Erstellen einer Produkteinstellung für ein Land /// /// Id des Produktes /// ISO2 Land /// Produkteinstellung ProductCountry CreateCountry(int productId, string countryIso); /// /// Hinzufügen einer Produkteinstellung für ein Land /// /// Produkteinstellung void AddCountry(ProductCountry productCountry); /// /// Löschen einer Produkteinstellung für ein Land /// /// Produkteinstellung void RemoveCountry(ProductCountry productCountry); /// /// Gibt eine Liste von Produkten vom Typ Listung zurück /// /// Für welchen Typen? Kunde, Hundebesitzer, Hundeausführer /// Land /// Branchen des Kunden /// Sprache /// Facllback Sprache /// Sollen gelöschte inkludiert werden? /// Liste von Produkten Task> GetListingProductsAsync(OrderSource orderSource, string countryIso, string allowedBranches, string language, string fallback, bool includeDeleted); /// /// Gibt eine Liste von Produkten vom Typ Listung zurück /// /// Für welchen Typen? Kunde, Hundebesitzer, Hundeausführer /// Land /// Branchen des Kunden /// Gewählte Produktkategorien /// Filtertext für Name /// Sprache /// Facllback Sprache /// Sollen gelöschte inkludiert werden? /// Liste von Produkten Task> GetListingProductsAsync(OrderSource orderSource, string countryIso, string allowedBranches, List categories, string filter, string language, string fallback, bool includeDeleted); /// /// Gibt eine Liste von Produkten vom Typ Werbung zurück /// /// Für welchen Typen? Kunde, Hundebesitzer, Hundeausführer /// Land /// Sprache /// Facllback Sprache /// Sollen gelöschte inkludiert werden? /// Liste von Produkte Task> GetAdvertisementProductsAsync(OrderSource orderSource, string countryIso, string language, string fallback, bool includeDeleted); /// /// Gibt eine Liste von Produkten vom Typ Werbung zurück /// /// Für welchen Typen? Kunde, Hundebesitzer, Hundeausführer /// Land /// Gewählte Produktkategorien /// Filtertext für Name /// Sprache /// Facllback Sprache /// Sollen gelöschte inkludiert werden? /// Liste von Produkte Task> GetAdvertisementProductsAsync(OrderSource orderSource, string countryIso, List categories, string filter, string language, string fallback, bool includeDeleted); /// /// Gibt eine Liste von Produkten vom Typ Banner zurück /// /// Für welchen Typen? Kunde, Hundebesitzer, Hundeausführer /// Land /// Sprache /// Facllback Sprache /// Sollen gelöschte inkludiert werden? /// Liste von Produkte Task> GetBannerProductsAsync(OrderSource orderSource, string countryIso, string language, string fallback, bool includeDeleted); /// /// Gibt eine Liste von Produkten vom Typ Banner zurück /// /// Für welchen Typen? Kunde, Hundebesitzer, Hundeausführer /// Land /// Gewählte Produktkategorien /// Filtertext für Name /// Sprache /// Facllback Sprache /// Sollen gelöschte inkludiert werden? /// Liste von Produkte Task> GetBannerProductsAsync(OrderSource orderSource, string countryIso, List categories, string filter, string language, string fallback, bool includeDeleted); /// /// Gibt eine Liste von Produkten vom Typ Pin zurück /// /// Für welchen Typen? Kunde, Hundebesitzer, Hundeausführer /// Land /// Sprache /// Facllback Sprache /// Sollen gelöschte inkludiert werden? /// Liste von Produkte Task> GetPinProductsAsync(OrderSource orderSource, string countryIso, string language, string fallback, bool includeDeleted); /// /// Gibt eine Liste von Produkten vom Typ Pin zurück /// /// Für welchen Typen? Kunde, Hundebesitzer, Hundeausführer /// Land /// Gewählte Produktkategorien /// Filtertext für Name /// Sprache /// Facllback Sprache /// Sollen gelöschte inkludiert werden? /// Liste von Produkte Task> GetPinProductsAsync(OrderSource orderSource, string countryIso, List categories, string filter, string language, string fallback, bool includeDeleted); /// /// Gibt ein Produkt mit Daten für Land und Sprache erweitert zurück. /// Es wird geprüft ob der kunde auch Zugriff auf das Produkt hat. /// /// Id des Produktes /// Für welchen Typen? Kunde, Hundebesitzer, Hundeausführer /// Land /// Sprache /// Facllback Sprache /// Sollen gelöschte inkludiert werden? /// Produkt Task GetWithNamesCountryAsync(int productId, OrderSource orderSource, string countryIso, string language, string fallback, bool includeDeleted); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Warenkörben realisiert /// public interface ICartService : IService { /// /// Gibt eine gefilterte Liste von Warenkörben zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Prache /// Fallback Sprache /// List betroffener Warenkörbe IQueryable Filter(string filter, string language, string fallback); /// /// Erstellen eines Warenkorbes /// /// Rechnungsland /// Lieferland /// Warenkorb Cart Create(string billingCountry, string deliveryCountry); /// /// Erstellen eines Warenkorbes für einen Kunden /// /// Id des Kunden /// Rechnungsland /// Lieferland /// Warenkorb Cart CreateForCustomer(long customerId, string billingCountry, string deliveryCountry); /// /// Erstellen eines Warenkorbes für einen App-User /// /// Id des App-Users /// Quelle /// Rechnungsland /// Lieferland /// Warenkorb Cart CreateForAppUser(string appUserId, OrderSource orderSource, string billingCountry, string deliveryCountry); /// /// Gibt einen Warenkorb für einen Kunden zurück oder legt einen an /// /// Id des Kunden /// Rechnungsland /// Lieferland /// Benutzer der den Warenkorb anlegt /// Warenkorb Task GetOrCreateCustomerAsync(long customerId, string billingCountry, string deliveryCountry, string userName); /// /// Gibt einen Warenkorb für einen App-User zurück oder legt einen an /// /// Id des Hundebesitzers /// Quelle /// Rechnungsland /// Lieferland /// Benutzer der den Warenkorb anlegt /// Warenkorb Task GetOrCreateAppUserAsync(string appUserId, OrderSource orderSource, string billingCountry, string deliveryCountry, string userName); /// /// Gibt einen Warenkorb für einen Kunden zurück /// /// Id des Kunden /// Warenkorb oder null, wenn nicht gefunden Task GetByCustomerAsync(long customerId); /// /// Gibt einen Warenkorb für einen App-Users zurück /// /// Id des App-Users /// Warenkorb oder null, wenn nicht gefunden Task GetByAppUserAsync(string appUserId); /// /// Gibt einen Warenkorb für einen Kunden zurück /// /// Id des Kunden /// Gewünschte Prache /// Fallback Sprache /// Warenkorb oder null, wenn nicht gefunden Task GetByCustomerWithNamesAsync(long customerId, string language, string fallback); /// /// Gibt einen Warenkorb für einen App-User zurück /// /// Id des App-Users /// Gewünschte Prache /// Fallback Sprache /// Warenkorb oder null, wenn nicht gefunden Task GetByAppUserWithNamesAsync(string appUserId, string language, string fallback); /// /// Anlegen eines Artikels für den Warenkorb /// /// Warenkorb Artikel CartItem CreateItem(); /// /// Hinzufügen eines Artikels zum Warenkorb /// /// Artikel void AddItem(CartItem item); /// /// Gibt einen Artikel im Warenkorb zurück /// /// Id des Warenkorbs /// Id des Artikels /// Artikel im Warenkorb oder null, wenn nicht gefunden Task GetItemAsync(long cartId, int productId); /// /// Gibt einen Artikel im Warenkorb zurück /// /// Id des Artikels im Warenkorbs /// Artikel im Warenkorb oder null, wenn nicht gefunden Task GetItemAsync(long cartItemId); /// /// Gibt eine Liste von Artikel im Warenkorb zurück /// /// Id des Warenkorbs /// Liste der Artikel im Warenkorb Task> GetItemsAsync(long cartId); /// /// Gibt eine Liste von Artikel im Warenkorb zurück /// /// Id des Warenkorbs /// Gewünschte Prache /// Fallback Sprache /// Liste der Artikel im Warenkorb Task> GetItemsWithNamesAsync(long cartId, string language, string fallback); /// /// Aktualisieren oder Anlegen eines Artikels im Warenkorb. /// Achtung: Es wird keine Berechnung durchgeführt. Dazu den Warenkorb neu berechnen lassen! /// /// Id des Warenkorbs /// Id des Artikels /// Stückzahl /// Benutzer der den Warenkorb anlegt /// Warenkorb Artikel oder null, wenn Fehler Task UpdateOrCreateItemAsync(long cartId, int productId, int quantity, string userName); /// /// Berechnen eines Warenkorbes /// /// Id des Warenkorbes /// Quelle dser Bestellung - Typ des Benutzers /// Zielland für Versandkostenberechnung /// Benutzer der die Kalkulation anstösst /// Berechneter Warenkorb Task CalculateAsync(long cartId, OrderSource orderSource, string targetCountry, string userName); /// /// Leeren des Warenkorbs /// /// Id des Warenkorbes /// Wenn true, werden Entitäten wie Listings, Banner, Werbungen und Pins gelöscht, wenn false werden die Cart- und CartItem Id´s auf null gesetzt /// Benutzer der die Aktion anstösst /// true wenn erfolgreich, false sonst Task ClearAsync(long cartId, bool removeEntity, string userName); /// /// Löschen eines Artikels aus dem Warenkorb nach ArtikelId /// /// Id des Artikels /// Task Task DeleteCartItemAsync(long cartItemId); /// /// Löschen eines Artikels aus dem Warenkorb nach ProduktId /// /// Id des Produktes /// Task Task DeleteCartItemByProductAsync(int productId); /// /// Löschen eines Warenkorbs nach Kunden /// /// Id des Kunden /// Task Task DeleteByCustomerAsync(long customerId); /// /// Löschen eines Warenkorbs nach App-User /// /// Id des Hundebesitzers /// Task Task DeleteByAppUserAsync(string appUserId); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung Shop-Einstellungen realisiert /// public interface IShopSettingsService : IService { /// /// Gibt die aktuellen Shop-Einstellungen zurück /// /// ShopSettings Task GetAsync(); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Branchen realisiert /// public interface IBranchService : IService { /// /// Gibt eine gefilterte Liste von Branchen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Branchen IQueryable Filter(string filter); /// /// Erstellen einer Branche /// /// Branche Branch Create(); /// /// Gibt eine gefilterte Liste von Branchen zurück. /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Branchen Task> SearchAsync(string filter); /// /// Gibt eine gefilterte Liste von Branchen mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Liste betroffener Branchen IQueryable FilterWithNames(string filter, string language, string fallback, bool includeDeleted); /// /// Gibt eine gefilterte Liste von Branchen mit Namen zurück in einer gewählten Sprache welche für eine Listung aktiviert sind /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Liste betroffener Branchen IQueryable FilterWithNamesListings(string filter, string language, string fallback, bool includeDeleted); /// /// Gibt eine Liste von Branchen in einer gewählten Sprache zurück, welche online sind /// /// Gewünschte Sprache /// Fallback Sprache /// Liste von Branchen Task> GetOnlineAsync(string language, string fallback); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Listings realisiert /// public interface IListingService : IService { /// /// Gibt eine gefilterte Liste von Listings zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Listings IQueryable Filter(string filter); /// /// Erstellen einer Listung /// /// Listung Listing Create(); /// /// Gibt eine gefilterte Liste von Listings zurück. /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Listings Task> SearchAsync(string filter); /// /// Gibt eine gefilterte Liste von Listings mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Sollen Entitäten im Draft-Status (Cart) ausgeblendet werden? /// Liste betroffener Listings IQueryable FilterWithNames(string filter, string language, string fallback, bool includeDeleted, bool excludeDraft); /// /// Gibt eine gefilterte Liste von Listings mit Namen für Kunden zurück in einer gewählten Sprache /// /// Id des Kunden /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Sollen Entitäten im Draft-Status (Cart) ausgeblendet werden? /// Liste betroffener Listings IQueryable FilterWithNamesCustomer(long customerId, string filter, string language, string fallback, bool includeDeleted, bool excludeDraft); /// /// Löschen von Listungen basierend auf einer Branche /// /// Id der Branche /// Wenn true, dann wirklich löschen, auf gelöscht setzen sonst /// Task Task DeleteByBranchAsync(string branchId, bool forceDelete); /// /// Prüfen der Verfügbarkeit einer Listung für eine Buchung /// /// Id des Kunden /// Id der Branche /// Listungs-Typ /// Startdatum /// Enddatum /// ISO2 des Landes /// Id die ignoriert werden soll /// ListingValidationResult Task IsAvailableAsync(long customerId, string branchId, ListingType listingType, DateTimeOffset startDate, DateTimeOffset endDate, string countryIso, string ignoreId); /// /// Gibt die Anzahl von Listungen zurück /// /// Sollen gelöschte inkludiert werden? /// Sollen Entitäten im Draft-Status (Cart) ausgeblendet werden? /// Anzahl Listungen Task CountAsync(bool includeDeleted, bool excludeDraft); /// /// Gibt die Anzahl von Listungen in einem Status zurück /// /// Gesuchter Status /// Sollen gelöschte inkludiert werden? /// Anzahl Listungen Task CountAsync(ListingStatus status, bool includeDeleted); /// /// Prüft ob sich eine Listung bereits im Warenkorb befindet. /// Listungen mit bestimmten Parametern dürfen nur einmal vorkommen /// /// Id des Warenkorb /// Id des Kunden /// Id der Branche /// Listungs-Typ /// Startdatum /// Enddatum /// ISO2 des Landes /// Id die ignoriert werden soll /// True wenn die Listung gefunden wurde, false sonst Task CheckListingInCartAsync(long cartId, long customerId, string branchId, ListingType listingType, DateTimeOffset startDate, DateTimeOffset endDate, string countryIso, string ignoreId); /// /// Gibt eine Listung für einen Artikel im Warenkorb zurück /// /// Id des Artikels im Warenkorb /// Listing oder null, wenn nicht gefunden Task GetByCartItemAsync(long cartItemId); /// /// Gibt eine Listung für einen Artikel in einer Bestellung zurück /// /// Id des Artikels in der Bestellung /// Listing oder null, wenn nicht gefunden Task GetByOrderItemAsync(long orderItemId); /// /// Setzen des Status von Listungen nach Bestellung /// /// Id der Bestellung /// Zu setzender Status /// Datum das für die Reservierung gesetzt werden soll /// Anzahl betroffener Listungen Task SetStatusByOrderAsync(long orderId, ListingStatus status, DateTimeOffset? reservedDate); /// /// Setzen des Bezahlstatus von Listingen nach Bestellung /// /// Id der Bestellung /// Zu setzender Status /// Anzahl betroffener Listungen Task SetPaymentStatusByOrderAsync(long orderId, PaymentStatus status); /// /// Zurücksetzen von Reservierungen wenn eine Zeit erreicht ist /// /// Obere Grenze der Reservierung /// Anzahl betroffener Listungen Task ResetReservedAsync(DateTimeOffset reservedDate); /// /// Gibt eine Liste von Listungen zurück für die Anzeige der Partner in der Nähe /// /// Land /// Bundesland /// Optional: Breitengrad /// Optional: Längengrad /// Gewünschte Sprache /// Fallback Sprache /// Datensätze auslassen /// Datensätze nehmen /// Liste passender Listungen Task<(int total, List list)> GetNearForAppAsync(string country, string state, double lat, double lng, string language, string fallback, int skip, int take); /// /// Gibt eine Liste von Listungen zurück für eine Branche zurück. /// Die Sortierung erfolgt nach Listungstyp und dann nach Distanz /// /// Id der Branche /// Optional: Filter für Name und/oder Ort /// Optional: Listings-Land /// Land /// Bundesland /// Optional: Breitengrad /// Optional: Längengrad /// Gewünschte Sprache /// Fallback Sprache /// Datensätze auslassen /// Datensätze nehmen /// Liste passender Listungen Task<(int total, List list)> GetByBranchForAppAsync(string branchId, string filter, string listingCountry, string country, string state, double lat, double lng, string language, string fallback, int skip, int take); /// /// Gibt eine Listung in einer gewünschten Sprache zurück /// /// Id der Listung /// Gewünschte Sprache /// Fallback Sprache /// Gefundene Werbung, null sonst Task GetRunningWithNamesAsync(string id, string language, string fallback); /// /// Starten von gebuchten Listungen wenn diese das Start-Datum erreicht haben /// /// Anzahl gestartete Listungen Task StartBookedAsnyc(); /// /// Stoppen von abgelaufenen Listungen wenn diese das Enddatum erreicht haben /// /// Anzahl gestoppte Listungen Task StopRunningAsync(); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Werbungen realisiert /// public interface IAdvertisementService : IService { /// /// Gibt eine gefilterte Liste von Werbungen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Werbungen IQueryable Filter(string filter); /// /// Erstellen einer Werbung /// /// Listung Advertisement Create(); /// /// Gibt eine gefilterte Liste von Werbungen zurück. /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Werbungen Task> SearchAsync(string filter); /// /// Gibt eine gefilterte Liste von Werbungen mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Sollen Entitäten im Draft-Status (Cart) ausgeblendet werden? /// Liste betroffener Werbungen IQueryable FilterWithNames(string filter, string language, string fallback, bool includeDeleted, bool excludeDraft); /// /// Gibt eine gefilterte Liste von Werbungen mit Namen für Kunden zurück in einer gewählten Sprache /// /// Id des Kunden /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Sollen Entitäten im Draft-Status (Cart) ausgeblendet werden? /// Liste betroffener Werbungen IQueryable FilterWithNamesCustomer(long customerId, string filter, string language, string fallback, bool includeDeleted, bool excludeDraft); /// /// Löschen von Werbungen basierend auf einer Rubrik /// /// Id der Rubrik /// Wenn true, dann wirklich löschen, auf gelöscht setzen sonst /// Task Task DeleteByCategoryAsync(string categoryId, bool forceDelete); /// /// Gibt die Anzahl von Werbungen zurück /// /// Sollen gelöschte inkludiert werden? /// Sollen Entitäten im Draft-Status (Cart) ausgeblendet werden? /// Anzahl Werbungen Task CountAsync(bool includeDeleted, bool excludeDraft); /// /// Gibt die Anzahl von Werbungen in einem Status zurück /// /// Gesuchter Status /// Sollen gelöschte inkludiert werden? /// Anzahl Werbungen Task CountAsync(AdvertisementStatus status, bool includeDeleted); /// /// Gibt eine Werbung für einen Artikel im Warenkorb zurück /// /// Id des Artikels im Warenkorb /// Werbung oder null, wenn nicht gefunden Task GetByCartItemAsync(long cartItemId); /// /// Gibt eine Werbung für einen Artikel in einer Bestellung zurück /// /// Id des Artikels in der Bestellung /// Werbung oder null, wenn nicht gefunden Task GetByOrderItemAsync(long orderItemId); /// /// Setzen des Status von Werbungen nach Bestellung /// /// Id der Bestellung /// Zu setzender Status /// Anzahl betroffener Werbungen Task SetStatusByOrderAsync(long orderId, AdvertisementStatus status); /// /// Setzen des Bezahlstatus von Werbungen nach Bestellung /// /// Id der Bestellung /// Zu setzender Status /// Anzahl betroffener Werbungen Task SetPaymentStatusByOrderAsync(long orderId, PaymentStatus status); /// /// Gibt eine Liste von Werbungen zurück für die Anzeige der Werbungen die bald enden und in der Nähe sind /// /// Land /// Bundesland /// Optional: Breitengrad /// Optional: Längengrad /// Gewünschte Sprache /// Fallback Sprache /// Datensätze auslassen /// Datensätze nehmen /// Liste passender Listungen Task<(int total, List list)> GetNearEndForAppAsync(string country, string state, double lat, double lng, string language, string fallback, int skip, int take); /// /// Gibt eine Liste von Werbungen je Kategorie zurück /// /// Id der Kategorie /// Land /// Bundesland /// Optional: Breitengrad /// Optional: Längengrad /// Gewünschte Sprache /// Fallback Sprache /// Datensätze auslassen /// Datensätze nehmen /// Liste passender Listungen Task<(int total, List list)> GetByCategoryForAppAsync(string categoryId, string country, string state, double lat, double lng, string language, string fallback, int skip, int take); /// /// Gibt eine Werbung in einer gewünschten Sprache zurück /// /// Id der Werbung /// Gewünschte Sprache /// Fallback Sprache /// Gefundene Werbung, null sonst Task GetRunningWithNamesAsync(string id, string language, string fallback); /// /// Starten von gebuchten Werbungen wenn diese das Start-Datum erreicht haben /// /// Anzahl gestartete Werbungen Task StartBookedAsnyc(); /// /// Stoppen von abgelaufenen Werbungen wenn diese das Enddatum erreicht haben /// /// Anzahl gestoppte Werbungen Task StopRunningAsync(); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Bannern realisiert /// public interface IBannerService : IService { /// /// Gibt eine gefilterte Liste von Bannern zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Banner IQueryable Filter(string filter); /// /// Erstellen eines Banners /// /// Banner Banner Create(); /// /// Gibt eine gefilterte Liste von Bannern zurück. /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Banner Task> SearchAsync(string filter); /// /// Gibt eine gefilterte Liste von Bannern mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Sollen Entitäten im Draft-Status (Cart) ausgeblendet werden? /// Liste betroffener Banner IQueryable FilterWithNames(string filter, string language, string fallback, bool includeDeleted, bool excludeDraft); /// /// Gibt eine gefilterte Liste von Bannern mit Namen für Kunden zurück in einer gewählten Sprache /// /// Id des Kunden /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Sollen Entitäten im Draft-Status (Cart) ausgeblendet werden? /// Liste betroffener Banner IQueryable FilterWithNamesCustomer(long customerId, string filter, string language, string fallback, bool includeDeleted, bool excludeDraft); /// /// Gibt die Anzahl von Bannern zurück /// /// Sollen gelöschte inkludiert werden? /// Sollen Entitäten im Draft-Status (Cart) ausgeblendet werden? /// Anzahl Banner Task CountAsync(bool includeDeleted, bool excludeDraft); /// /// Gibt die Anzahl von Bannern in einem Status zurück /// /// Gesuchter Status /// Sollen gelöschte inkludiert werden? /// Anzahl Banner Task CountAsync(BannerStatus status, bool includeDeleted); /// /// Gibt einen Banner für einen Artikel im Warenkorb zurück /// /// Id des Artikels im Warenkorb /// Banner oder null, wenn nicht gefunden Task GetByCartItemAsync(long cartItemId); /// /// Gibt einen Banner für einen Artikel in einer Bestellung zurück /// /// Id des Artikels in der Bestellung /// Banner oder null, wenn nicht gefunden Task GetByOrderItemAsync(long orderItemId); /// /// Setzen des Status von Bannern nach Bestellung /// /// Id der Bestellung /// Zu setzender Status /// Anzahl betroffener Banner Task SetStatusByOrderAsync(long orderId, BannerStatus status); /// /// Setzen des Bezahlstatus von Bannern nach Bestellung /// /// Id der Bestellung /// Zu setzender Status /// Anzahl betroffener Banner Task SetPaymentStatusByOrderAsync(long orderId, PaymentStatus status); /// /// Gibt einen Banner für eine Platzierung zurück /// /// Platzierung des Banners /// Optional: Id des Banners der gerade angezeigt wird /// Land /// Bundesland /// Optional: Breitengrad /// Optional: Längengrad /// Gewünschte Sprache /// Fallback Sprache /// Zufälliger Banner wenn gefunden, null sonst Task GetBannerForLocationAsync(BannerLocation bannerLocation, string currentBannerId, string country, string state, double lat, double lng, string language, string fallback); /// /// Fügt eine Anzahl von Views zu einem Banner hinzu und beendet die Laufzeit wenn die Budgetgrenze erreicht wurde /// /// Id des Banners /// Anzahl Views /// AppMode /// Sprache /// Land /// Bundesland /// Anzahl Views gesamt Task AddViewsAsync(string id, int viewCount, AppMode appMode, string language, string country, string state); /// /// Fügt eine Anzahl von Klicks zu einem Banner hinzu und beendet die Laufzeit wenn die Budgetgrenze erreicht wurde /// /// Id des Banners /// Anzahl Klicks /// AppMode /// Sprache /// Land /// Bundesland /// Anzahl Klicks gesamt Task AddClicksAsync(string id, int clickCount, AppMode appMode, string language, string country, string state); /// /// Hinzufügen einer Statstik für einen Banner /// /// Id des Banners /// AppMode /// Klick oder View /// Anzahl Klicks oder Views /// Sprache /// Land /// Bundesland /// Task void AddStatistic(string id, AppMode appMode, BannerStatisticType type, int value, string language, string country, string state); /// /// Starten von gebuchten Bannern wenn diese das Start-Datum erreicht haben /// /// Anzahl gestartete Banner Task StartBookedAsnyc(); /// /// Stoppen von abgelaufenen Bannern wenn diese das Enddatum erreicht haben /// /// Anzahl gestoppte Banner Task StopRunningAsync(); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Pins realisiert /// public interface IPinService : IService { /// /// Gibt eine gefilterte Liste von Pins zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Pins IQueryable Filter(string filter); /// /// Erstellen eines Pins /// /// Pin Pin Create(); /// /// Gibt eine gefilterte Liste von Pins zurück. /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Pins Task> SearchAsync(string filter); /// /// Gibt eine gefilterte Liste von Pins mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Sollen Entitäten im Draft-Status (Cart) ausgeblendet werden? /// Liste betroffener Pins IQueryable FilterWithNames(string filter, string language, string fallback, bool includeDeleted, bool excludeDraft); /// /// Gibt eine gefilterte Liste von Pins mit Namen für Kunden zurück in einer gewählten Sprache /// /// Id des Kunden /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Sollen Entitäten im Draft-Status (Cart) ausgeblendet werden? /// Liste betroffener Pins IQueryable FilterWithNamesCustomer(long customerId, string filter, string language, string fallback, bool includeDeleted, bool excludeDraft); /// /// Zurücksetzen der Zuordnung zu einer Listung /// /// Id der Listung /// Task Task ResetListingAsync(string listingId); /// /// Stornieren eines Pins basierend auf einer Listung /// /// Id der Listung /// Task Task CancelByListingAsync(string listingId); /// /// Gibt die Anzahl von Pins zurück /// /// Sollen gelöschte inkludiert werden? /// Sollen Entitäten im Draft-Status (Cart) ausgeblendet werden? /// Anzahl Pins Task CountAsync(bool includeDeleted, bool excludeDraft); /// /// Gibt die Anzahl von Pins in einem Status zurück /// /// Gesuchter Status /// Sollen gelöschte inkludiert werden? /// Anzahl Pins Task CountAsync(PinStatus status, bool includeDeleted); /// /// Gibt einen Pin für einen Artikel im Warenkorb zurück /// /// Id des Artikels im Warenkorb /// Pin oder null, wenn nicht gefunden Task GetByCartItemAsync(long cartItemId); /// /// Gibt einen Pin für einen Artikel in einer Bestellung zurück /// /// Id des Artikels in der Bestellung /// Pin oder null, wenn nicht gefunden Task GetByOrderItemAsync(long orderItemId); /// /// Setzen des Status von Pins nach Bestellung /// /// Id der Bestellung /// Zu setzender Status /// Anzahl betroffener Pins Task SetStatusByOrderAsync(long orderId, PinStatus status); /// /// Setzen des Bezahlstatus von Pins nach Bestellung /// /// Id der Bestellung /// Zu setzender Status /// Anzahl betroffener Pins Task SetPaymentStatusByOrderAsync(long orderId, PaymentStatus status); /// /// Starten von gebuchten Pins wenn diese das Start-Datum erreicht haben /// /// Anzahl gestartete Pins Task StartBookedAsnyc(); /// /// Stoppen von abgelaufenen Pins wenn diese das Enddatum erreicht haben /// /// Anzahl gestoppte Pins Task StopRunningAsync(); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Bestellungen realisiert /// public interface IOrderService : IService { /// /// Gibt eine gefilterte Liste von Bestellungen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gelöschte Daten inkludieren /// List betroffener Bestellungen IQueryable Filter(string filter, bool includeDeleted); /// /// Gibt eine gefilterte Liste von Bestellungen für einen Kunden zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Id des Kunden /// Gelöschte Daten inkludieren /// List betroffener Bestellungen IQueryable FilterByCustomer(string filter, long customerId, bool includeDeleted); /// /// Gibt eine gefilterte Liste von Bestellungen für einen App-User zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Id des Hundebesitzers /// Gelöschte Daten inkludieren /// List betroffener Bestellungen IQueryable FilterByAppUser(string filter, string appUserId, bool includeDeleted); /// /// Erstellen einer Bestellung /// /// Bestellung Order Create(); /// /// Erstellen einer Bestellung /// /// Warenkorb /// Artikel im Warenkorb /// Zahlungsart /// Status der Zahlung /// Art der Zustellung /// Versandstatus /// Lieferadresse /// Rechnungsadresse /// Lieferadresse ist auch Rechnungsadresse /// Gewünschte Sprache /// Fallback Sprache /// Benutzer der die Bestellung anlegt /// Bestellung Task CreateAsync(Cart cart, List cartItems, PaymentType paymentType, PaymentStatus paymentStatus, ShipmentType shipmentType, ShipmentStatus shipmentStatus, OrderAddress deliveryAddress, OrderAddress billingAddress, bool deliveryAddressIsBilling, string language, string fallback, string userName); /// /// Aktualisieren einer Bestellung /// /// Id der Bestellung die aktualisiert werden soll /// Warenkorb /// Artikel im Warenkorb /// Zahlungsart /// Status der Zahlung /// Art der Zustellung /// Versandstatus /// Lieferadresse /// Rechnungsadresse /// Lieferadresse ist auch Rechnungsadresse /// Gewünschte Sprache /// Fallback Sprache /// Benutzer der die Bestellung anlegt /// Bestellung Task UpdateAsync(long orderId, Cart cart, List cartItems, PaymentType paymentType, PaymentStatus paymentStatus, ShipmentType shipmentType, ShipmentStatus shipmentStatus, OrderAddress deliveryAddress, OrderAddress billingAddress, bool deliveryAddressIsBilling, string language, string fallback, string userName); /// /// Anlegen eines Artikels für eine Bestellung /// /// Bestellung Artikel OrderItem CreateItem(); /// /// Gibt einen Artikel in einer Bestellung zurück /// /// Id der Bestellung /// Id des Artikels /// Artikel in der Bestellung oder null, wenn nicht gefunden Task GetItemAsync(long orderId, int productId); /// /// Gibt eine Liste von Artikel in der Bestellung zurück /// /// Id der Bestellung /// Liste der Artikel in der Bestellung Task> GetItemsAsync(long orderId); /// /// Gibt den nächsten freien Bestell-spezifischen Zähler zurück /// /// Nächste freie Nummer Task GetNextCounterAsync(); /// /// Gibt die nächste freie Nummer für eine Bestellung als Bestellnummer zurück /// /// EndKunden-Nummer Task GetNextNumberAsync(); /// /// Löschen einer Bestellung /// /// Id der Bestellung /// Softdelete anwenden - Daten werden auf gelöscht gesetzt /// Task Task DeleteAsync(long id, bool softDelete); /// /// Löschen aller Bestellungen die einem Kunden zugeordnet sind /// /// Id des Kunden /// Softdelete anwenden - Daten werden auf gelöscht gesetzt /// Task Task DeleteByCustomerAsync(long customerId, bool softDelete); /// /// Löschen aller Bestellungen die einem App-User zugeordnet sind /// /// Id des AppUsers /// Softdelete anwenden - Daten werden auf gelöscht gesetzt /// Task Task DeleteByAppUserAsync(string appUserId, bool softDelete); /// /// Gibt die Anzahl aller Bestellungen im System zurück /// /// Gelöschte Daten inkludieren /// Anzahl Bestellungen Task CountOrdersAsync(bool includeDeleted); /// /// Gibt die Anzahl der Bestellungen in einem bestimmten Status zurück /// /// Gesuchter Status /// Gelöschte Daten inkludieren /// Anzahl Bestellungen Task CountOrdersAsync(OrderStatus status, bool includeDeleted); /// /// Gibt die Anzahl der Bestellungen in einem bestimmten Status für Kunden zurück /// /// Id des Kunden /// Gesuchter Status /// Gelöschte Daten inkludieren /// Anzahl Bestellungen Task CountOrdersByCustomerAsync(long customerId, OrderStatus status, bool includeDeleted); /// /// Gibt die Anzahl der Bestellungen in einem bestimmten Status für App-User zurück /// /// Id des App-Users /// Gesuchter Status /// Gelöschte Daten inkludieren /// Anzahl Bestellungen Task CountOrdersByAppUserAsync(string appUserId, OrderStatus status, bool includeDeleted); /// /// Setzt die ItemId für einen Artikel einer Bestellung auf null, wenn der Artikel gelöscht wird /// /// Id des Artikels /// Task Task ResetProductForOrderItemAsync(int productId); /// /// Gibt eine Bestellung anhand der PayPal-ID zurück /// /// PayPal Id der Bestellung /// Order oder null, wenn nicht gefunden Task GetByPayPalIdAsync(string payPalId); /// /// Gibt eine Bestellung anhand der Unique-ID zurück /// /// Unique Id der Bestellung /// Order oder null, wenn nicht gefunden Task GetByUniqueIdAsync(Guid uniqueId); /// /// Gibt eine Bestellung anhand Bestellnummer zurück /// /// Bestellnummer /// Order oder null, wenn nicht gefunden Task GetByOrderNumberAsync(string orderNumber); /// /// Setzt den "Versendet" Status für Bestellungen die via Klarna bezahlt wurden und welche keine physischen Produkte beinhalten! /// /// Task Task SetShipmentForKlarnaDigitalOnlyAsync(); /// /// Gibt eine Liste aller Klarna-Bestellungen zurück, für welche an Klarna der "versendet" Status gesendet werden soll /// /// Liste Bestellungen Task> GetOrdersKlarnaToShipAsync(); /// /// Gibt zurück ob eine Bestellung nur digitale Produkte beinhaltet /// /// Id der Bestellung /// true wenn nur digital, false sonst Task IsDigitaglOnlyAsync(long orderId); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Rechnungen ermöglicht /// public interface IInvoiceService : IService { /// /// Erstellen einer Rechnung /// /// Bestellung Invoice Create(); /// /// Erstellen einer Rechnung /// /// Id der Bestellung /// Bestellung Task CreateAsync(long orderId); /// /// Gibt eine Rechnung basierend auf der Bestellung zurück /// /// Id der Bestellung /// Task GetByOrderAsync(long orderId); /// /// Gibt den nächsten freien Rechnungs-spezifischen Zähler zurück /// /// Nächste freie Nummer Task GetNextCounterAsync(); /// /// Gibt die nächste freie Nummer für eine Rechnung als Rechnungsnummer zurück /// /// EndKunden-Nummer Task GetNextNumberAsync(); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Gutschriften ermöglicht /// public interface ICreditNoteService : IService { /// /// Erstellen einer Gutschrift /// /// Gutschrift CreditNote Create(); /// /// Erstellen einer Gutschrift /// /// Id der Bestellung /// Rechnungsnummer /// Gutschrift Task CreateAsync(long orderId, string invoiceNumber); /// /// Gibt eine Gutschrift basierend auf der Bestellung zurück /// /// Id der Bestellung /// Gutschrift Task GetByOrderAsync(long orderId); /// /// Gibt den nächsten freien Gutschrift-spezifischen Zähler zurück /// /// Nächste freie Nummer Task GetNextCounterAsync(); /// /// Gibt die nächste freie Nummer für eine Gutschrift als Gutschriftennummer zurück /// /// Gutschrift-Nummer Task GetNextNumberAsync(); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Hunderassen realisiert /// public interface IDogRaceService : IService { /// /// Gibt eine gefilterte Liste von Hunderassen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Hunderassen IQueryable Filter(string filter); /// /// Erstellen einer Hunderasse /// /// Hunderasse DogRace Create(); /// /// Gibt eine gefilterte Liste von Hunderassen zurück. /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Hunderassen Task> SearchAsync(string filter); /// /// Gibt eine gefilterte Liste von Hunderassen zurück. /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// List betroffener Hunderassen Task> SearchWithNamesAsync(string filter, string language, string fallback); /// /// Gibt eine gefilterte Liste von Hunderassen mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Liste betroffener Hunderassen IQueryable FilterWithNames(string filter, string language, string fallback, bool includeDeleted); /// /// Gibt eine Liste von Hunderassen zurück, welche nach dem glieferten Datum geändert wurden. /// Wird kein Datum angegeben, werden alle zurückgegeben. /// /// Letztes Update oder null wenn noch keines /// Gewünschte Sprache /// Fallback Sprache /// Liste von Hunderassen Task> GetForSyncAsync(DateTimeOffset? lastUpdate, string language, string fallback); /// /// Gibt eine Hunderasse mit Namen aufgelöst zurück /// /// Id der Hunderasse /// Gewünschte Sprache /// Fallback Sprache /// Hunderasse oder null, wenn nicht gefunden Task GetWithNamesAsync(string id, string language, string fallback); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Hunden realisiert /// public interface IDogService : IService { /// /// Gibt eine gefilterte Liste von Hunden zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Hunde IQueryable Filter(string filter); /// /// Erstellen eines Hunden /// /// Kunde Dog Create(); /// /// Gibt eine gefilterte Liste von Hunden zurück. Sucht nur im Namen /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Hunde Task> SearchAsync(string filter); /// /// Gibt eine gefilterte Liste von Hunden mit Namen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// List betroffener Hunde IQueryable FilterWithNames(string filter, string language, string fallback); /// /// Gibt die nächste freie Nummer für einen Hund zurück /// /// Hunde-Nummer Task GetNextNumberAsync(); /// /// Zurücksetzen der Rasse auf null /// /// Id der Hunderasse /// Anzahl zurückgesetzte Hunde Task ResetDogRaceAsync(string dogRaceId); /// /// Gibt eine Liste der Hunde eines Benutzers zurück /// /// Id des AppUsers /// Letztes Update /// Liste der Hunde Task> GetDogsAsync(string appUserId, DateTimeOffset? lastUpdate); /// /// Gibt einen hunde mit Namen aufgelöst zurück /// /// Id des Hundes /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte auch abgefragt werden - für historische Korrektheit /// Hund oder null, wenn nicht gefunden Task GetWithNamesAsync(string dogId, string language, string fallback, bool includeDeleted); /// /// Gibt alle Hunde mit Namen aufgelöst für einen hundebesitzer zurück /// /// Id des Hundebesitzers /// Gewünschte Sprache /// Fallback Sprache /// Hund oder null, wenn nicht gefunden Task> GetWithNamesOwnerAsync(string ownerId, string language, string fallback); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Kategorien für News realisiert /// public interface INewsCategoryService : IService { /// /// Gibt eine gefilterte Liste von Kategorien zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Kategorien IQueryable Filter(string filter); /// /// Erstellen einer Kategorie /// /// Kategorie NewsCategory Create(); /// /// Gibt eine gefilterte Liste von Kategorien zurück. Sucht nur im Titel /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Kategorien Task> SearchAsync(string filter); /// /// Gibt eine gefilterte Liste von Kategorien mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Liste betroffener Kategorien IQueryable FilterWithNames(string filter, string language, string fallback, bool includeDeleted); /// /// Gibt eine Liste von Kategorien zurück, welche nach dem glieferten Datum geändert wurden. /// Wird kein Datum angegeben, werden alle zurückgegeben. /// Es werden alle Kategorien zurückgegeben - egal ob on- oder offline. /// /// Letztes Update oder null wenn noch keines /// Gewünschte Sprache /// Fallback Sprache /// Liste von Kategorien Task> GetForSyncAsync(DateTimeOffset? lastUpdate, string language, string fallback); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von News realisiert /// public interface INewsService : IService { /// /// Gibt eine gefilterte Liste von News zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener News IQueryable Filter(string filter); /// /// Erstellen einer News /// /// News News Create(); /// /// Gibt eine gefilterte Liste von News zurück. Sucht nur im Titel /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener News Task> SearchAsync(string filter); /// /// Gibt eine gefilterte Liste von News mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Liste betroffener News IQueryable FilterWithNames(string filter, string language, string fallback, bool includeDeleted); /// /// Gibt eine gefilterte Liste von News mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Liste nach Bundesländern nach Filter /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Liste von Ländern nach Filter /// Liste betroffener News IQueryable FilterWithNames(string filter, Listcountries, List states, string language, string fallback, bool includeDeleted); /// /// Gibt eine Liste von News-Meldungen für die App zurück. Es werden nur laufende News berücksichtigt /// /// Sichtbar für wen? Wird adaptiert! /// Gewünschte Kategorie oder leer wenn alle /// Land /// Bundesland /// Optional: Breitengrad /// Optional: Längengrad /// Gewünschte Sprache /// Fallback Sprache /// Datensätze auslassen /// Datensätze nehmen /// Liste passender News Task<(int total, List list)> GetForAppAsync(NewsVisibility visibility, string categoryId, string country, string state, double? lat, double? lng, string language, string fallback, int skip, int take); /// /// Gibt eine News mit Sprachen aufgelöst zurück /// /// Id der News /// Gewünschte Sprache /// Fallback Sprache /// News mit Namen aufgelöst Task GetWithNamesAsync(long newsId, string language, string fallback); /// /// Starten von freigegebenen News wenn diese das Start-Datum erreicht haben /// /// Anzahl gestartete News Task StartApprovedAsnyc(); /// /// Stoppen von abgelaufenen News wenn diese das Enddatum erreicht haben /// /// Anzahl gestoppte News Task StopRunningAsync(); } /// /// Schnittstellenbeschreibung für einen Service die Verwaltung von Relationen zwischen AppUsern ermöglicht /// public interface IAppUserRelationService : IService { /// /// Fügt eine Relation hinzu wenn diese nicht bereits existiert. /// Dabei werden beide Richtungen geprüft. /// /// Id der ersten Entität /// Id der zweiten Entität /// Benutzer der die Änderung vorgenommen hat /// Neue Relation oder gefundene Relation Task AddIfNotExistsAsync(string leftId, string rightId, string userName); /// /// Setzen einer Relation auf gelöscht - einseitig. /// Für den Initiator wird "gelöscht" gesetzt. /// Der Initiator wird dabei aber in Left und Right gesucht. /// /// Id des Initiators /// Id der anderen Entität /// Benutzer der die Änderung vorgenommen hat /// true wenn auf gelöscht gesetzt, false sonst Task DeleteAsync(string initiatorId, string otherId, string userName); /// /// Gibt eine Liste von Relationszielen zurück, zu welcher der Initiator eine Beziehung hat /// /// Id des Initiators /// Sollen gelöschte inkludiert werden? /// Liste von Relationszielen Task> GetRelations(string initiatorId, bool includeDeleted = false); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Konversationen und Nachrichten realisiert /// public interface IMessageService : IService { /// /// Gibt eine Liste der Konversationen eines Benutzers zurück /// /// Id des Senders /// Letztes Update /// Liste der Konversationen Task> GetConversationsAsync(string senderId, DateTimeOffset? lastUpdate); /// /// Gibt eine Liste der Konversationen mit Namen aufgelöst eines Benutzers zurück /// /// Id des Senders /// Liste der Konversationen Task> GetConversationsWithNamesAsync(string senderId); /// /// Gibt eine Konversation anhand der Teilnehmer zurück /// /// Id des Senders /// Id des Empfängers /// Konversation oder null wenn nicht gefunden Task GetConversationAsync(string senderId, string receiverId); /// /// Gibt eine gefilterte Liste von Konversationen mit Namen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Konversationen IQueryable FilterConversationsWithNames(string filter); /// /// Hinzufügen einer Konversation /// /// Id des Senders /// Id des Empfängers /// Benutzer der die Änderung vornimmt /// Konversation Task AddConversationAsync(string senderId, string receiverId, string userName); /// /// Hinzufügen einer Konversation /// /// Id des Konversation /// Id des Senders /// Id des Empfängers /// Benutzer der die Änderung vornimmt /// Konversation Task AddConversationAsync(string id, string senderId, string receiverId, string userName); /// /// Entfernen einer Konversation /// /// Id der Konversation /// Benutzer der die Änderung vornimmt Task RemoveConversationAsync(string id, string userName); /// /// Entfernen einer Konversation nach AppUser /// /// Id des AppUsers /// Anzahl Konversationen Task RemoveConversationByAppUserAsync(string appUserId); /// /// Gibt eine Liste noch nicht zugestellter Nachrichten für einen Benutzer zurück. /// /// Id des Users - wird als Receiver gesucht /// Letztes Update /// Liste nicht erhaltener Nachrichten Task> GetMessagesAsync(string senderId, DateTimeOffset? lastUpdate); /// /// Gibt eine Liste noch nicht zugestellter Nachrichten in einer Konversation für einen Benutzer zurück. /// /// Id des Users - wird als Receiver gesucht /// Id der Konversation /// Letztes Update /// Liste nicht erhaltener Nachrichten Task> GetMessagesAsync(string senderId, string conversationId, DateTimeOffset? lastUpdate); /// /// Berstätigen des Erhaltes von Nachrichten für einen Benutzer. Alle die älter als das UpdateDatum sind werden gelöscht /// /// Id des Users - wird als Receiver gesucht /// Letztes Update /// Benutzer der die Änderung vornimmt /// true wenn erfolgreich, false sonst Task ConfirmMessagesAsync(string senderId, DateTimeOffset lastUpdate, string userName); /// /// Berstätigen des Erhaltes von Nachrichten für eine Konversation für einen Benutzer. Alle die älter als das UpdateDatum sind werden gelöscht /// /// Id des Users - wird als Receiver gesucht /// Id der Konversation /// Letztes Update /// Benutzer der die Änderung vornimmt /// true wenn erfolgreich, false sonst Task ConfirmMessagesAsync(string senderId, string conversationId, DateTimeOffset lastUpdate, string userName); /// /// Hinzufügen einer Nachricht /// /// Nachricht /// Benutzer der die Änderung vornimmt /// Angelegte Nachricht Task AddMessageAsync(Message message, string userName); /// /// Neusetzen des UpdatedAt Datums falls sich das foto eines Benutzers geändert hat /// /// /// /// /// Task SetUpdatedAtAsync(string appUserId, DateTimeOffset updatedAt, string userName); /// /// Gibt die Anzahl der noch nicht gelesenen Nachrichten für einen Benutzer zurück /// /// Id des Empfängers /// Id der Konversation /// Anzahl ungelesene Nachrichten Task CountOpenMessagesAsync(string receiverId, string conversationId); /// /// Entfernt Nachrichten die in einem bestimmten Zeitraum nicht gelesen wurden /// /// Nachricht muss älter als dieses Datum sein /// Anzahl gelöschte Nachrichten Task RemoveUnreadMessagesAsync(DateTimeOffset olderThanDate); /// /// Entfernt Nachrichten-Kopien die alter als ein Datum sind /// /// Nachricht muss älter als dieses Datum sein /// Anzahl gelöschte Nachrichten Task RemoveMessageCopiesAsync(DateTimeOffset olderThanDate); /// /// Gibt die Nachrichten-Kopien einer Konversation zurück /// /// Id der Konversation /// Liste nicht erhaltener Nachrichten Task> GetMessageCopiesAsync(string conversationId); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Inhalts-Seiten ermöglicht /// public interface IPageService : IService { /// /// Erstellen einer Seite /// /// Page Create(); /// /// Gibt eine gefilterte Liste von Seiten zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Liste betroffener Seiten IQueryable FilterWithNames(string filter, string language, string fallback); /// /// Prüfen ob ein Code noch verfügbar ist /// /// Zu prüfender Code /// Id die ausgenommen werden soll /// true wenn verfügbar, false sonst Task IsCodeAvailableAsync(string code, int id); /// /// Gibt eine Text-Seite in gewünschter Sprache zurück /// /// code der Seite /// Gewünschte Sprache /// Fallback Sprache /// Seite oder null, wenn nicht gefunden Task GetwithNamesAsync(string code, string language, string fallback); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von öffentlichen Anfragen ermöglicht /// public interface IPublicWalkRequestService : IService { /// /// Erstellen einer öffentlichen Anfrage /// /// PublicWalkRequest Create(); /// /// Gibt eine Liste der öffentlichen Anfragen eines Benutzers zurück /// /// Id des AppUsers /// Letztes Update /// Liste der öffentlichen Anfragen Task> GetForSyncAppAsync(string appUserId, DateTimeOffset? lastUpdate); /// /// Gibt die anzahl öffentlicher Anfragen eines AppUsers zurück /// /// AppUserId /// Anzahl öffentliche Anfragen Task CountAsync(string appUserId); /// /// Abfrage der öffentlichen Anfragen eines AppUsers "Latest" /// /// Id des AppUsers /// Wie viele Datensätze /// Liste der öffentlichen Anfragen Task> GetLatestAsync(string appUserId, int take); /// /// Gibt eine Liste von eigenen öffentlichen Anfragen für die App zurück. /// /// App-User Id die ignoriert werden soll (dogOwnerId) /// Optional: Id des AppUsers der die Anfragen erstellt hat /// Optional: Id des DogWalkers /// Gesuchert Status. Alle wenn NULL /// Optional: Liste der sortierung /// Optional: Breitengrad /// Optional: Längengrad /// Datensätze auslassen /// Datensätze nehmen /// Liste passender Anfragen Task<(int total, List list)> GetAsync(string ignoreId, string dogOwnerId, string dogWalkerId, PublicWalkRequestStatus? status, List sortList, double lat, double lng, int skip, int take); /// /// Gibt eine Liste von eigenen öffentlichen Anfragen für die App zurück. /// /// App-User Id die ignoriert werden soll (dogOwnerId) /// Optional: Id des AppUsers der die Anfragen erstellt hat /// Optional: Id des DogWalkers /// Gesuchert Status. Alle wenn NULL /// Mindest-Preis /// Optional: Liste der sortierung /// Optional: Breitengrad /// Optional: Längengrad /// Datensätze auslassen /// Datensätze nehmen /// Maximaler Radius /// Typ der öffentlichen Anfrage, Alle wenn NULL /// Liste passender Anfragen Task<(int total, List list)> GetAsync(string ignoreId, string dogOwnerId, string dogWalkerId, PublicWalkRequestStatus? status, double maxRadius, PublicWalkRequestType? type, decimal minPrice, List sortList, double lat, double lng, int skip, int take); /// /// Gibt eine Liste von eigenen öffentlichen Anfragen für die App zurück. Mit dem Antwort-Status für einen DogWalker /// /// App-User Id die ignoriert werden soll (dogOwnerId) /// Optional: Id des AppUsers der die Anfragen erstellt hat /// Optional: Id des DogWalkers /// Gesuchert Status. Alle wenn NULL /// es muss eine Antwort vorhanden sein /// Optional: Liste der sortierung /// Optional: Breitengrad /// Optional: Längengrad /// Sollten blockierte unnd/oder gesperrte Benutzer in die Liste eingefügt werden? /// Datensätze auslassen /// Datensätze nehmen /// Id des Dogwalkers für welchen die Liste aufbereitet werden soll /// Gesuchter Status oder aller wenn null /// Liste passender Anfragen Task<(int total, List list)> GetWithResponseStatusAsync(string ignoreId, string dogOwnerId, string dogWalkerId, PublicWalkRequestStatus? status, string targetDogWalkerId, PublicWalkResponseStatus? responseStatus, bool mustHaveResponse, List sortList, double lat, double lng, bool includeBlockedAndLocked, int skip, int take); /// /// Gibt eine Liste von eigenen öffentlichen Anfragen für die App zurück. Mit dem Antwort-Status für einen DogWalker /// /// App-User Id die ignoriert werden soll (dogOwnerId) /// Optional: Id des AppUsers der die Anfragen erstellt hat /// Optional: Id des DogWalkers /// Gesuchert Status. Alle wenn null /// Suchtext für Suche in Hundename, OwnerName oder Stadt /// Optional: Liste der sortierung /// Optional: Breitengrad /// Optional: Längengrad /// Sollten blockierte unnd/oder gesperrte Benutzer in die Liste eingefügt werden? /// Datensätze auslassen /// Datensätze nehmen /// Id des Dogwalkers für welchen die Liste aufbereitet werden soll /// Gesuchter Status oder alle wenn null /// Maximaler Radius /// es muss eine Antwort vorhanden sein /// Typ der öffentlichen Anfrage, oder alle wenn NULL /// Mindest-Preis /// Liste passender Anfragen Task<(int total, List list)> GetWithResponseStatusAsync(string ignoreId, string dogOwnerId, string dogWalkerId, PublicWalkRequestStatus? status, string targetDogWalkerId, PublicWalkResponseStatus? responseStatus, double maxRadius, PublicWalkRequestType? type, decimal minPrice, bool mustHaveResponse, string searchText, List sortList, double lat, double lng, bool includeBlockedAndLocked, int skip, int take); /// /// Gibt eine öffentliche Ausschreibung mit Namen aufgelöst zurück /// /// ID der Ausschreibung /// öffentliche Ausschreibung oder null, wenn nicht gefunden Task GetWithNamesAsync(string id); /// /// Setzt öffentliche Anfragen auf abgelaufen, wenn diese nicht angenommen oder storniert wurden /// /// Datum für Prüfung /// Anzahl timed out Task SetTimedOutAsync(DateTimeOffset date); /// /// Zurücksetzen einer öffentlichen Anfrage /// /// Id der öffentlichen Anfrage /// true wenn erfolgreich, false sonst Task ResetAsync(string id); /// /// Gibt eine Liste der offenen Anfragen für einen Hundebesitzer in einem gewählten Status zurück /// /// Id des Hundebesitzers /// Gesuchter Status /// Task> GetByStatusAsync(string dogOwnerId, PublicWalkRequestStatus status); /// /// Gibt eine gefilterte Liste von öffentlichen Anfragen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Sollen gelöschte inkludiert werden? /// Liste betroffener öffentlicher Anfragen IQueryable FilterPublicWalkRequestsWithNames(string filter, bool includeDeleted); #region Notifications /// /// Erstellt einen Eintrag für die Benachrichtigung einer neuen öffentlichen Anfrage /// /// Id der öffentlichen Anfrage /// Id des Hundebesitzers - AppUserId /// Abholadresse /// GEO-Koordinaten /// PublicWalkRequestNotification PublicWalkRequestNotification CreateNotification(string publicWalkRequestId, string dogOwnerId, Address pickupAddress, Point location); /// /// Hinzufügen einer Benachrichtigung /// /// Benachrichtigungs-Objekt void AddNotification(PublicWalkRequestNotification publicWalkRequestNotification); /// /// Gibt eine Liste von zu sendenden Benachrichtigungen zurück /// /// Liste zu sendende Benachrichtigungen Task> GetNotificationsToSendAsync(); /// /// Zählt wie viele öffenltiche Anfragen in einem bestimmten Zeitraum durch einen Benutzer erstellt wurden /// /// Start-Datum /// End-Datum /// Id des Hundebesitzers /// Max Status der Ausschreibung /// Anzahl öffentliche Anfragen Task CountByCreationDateAsync(DateTimeOffset startDate, DateTimeOffset endDate, string dogOwnerId, PublicWalkRequestStatus maxStatus); #endregion } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Antworten auf öffentlichen Anfragen ermöglicht /// public interface IPublicWalkResponseService : IService { /// /// Erstellen einer Antwort auf eine öffentlichen Anfrage /// /// PublicWalkResponse Create(string publicWalkRequestId); /// /// Gibt eine Liste der Antworten auf öffentlichen Anfragen eines Benutzers zurück /// /// Id des AppUsers /// Letztes Update /// Liste der Antworten auf öffentlichen Anfragen Task> GetForSyncAppAsync(string appUserId, DateTimeOffset? lastUpdate); /// /// Gibt eine Antwort eines Walkers auf eine öffentliche Anfrage zurück /// /// Id des AppUsers dem die öffentliche Anfrage gehört /// Id der Antwort zur öffentlichen Anfrage /// PublicWalkResponse oder null, wenn keine gefunden Task GetWithNamesAsync(string appUserId, string publicWalkResponseId); /// /// Gibt eine Antwort eines Walkers auf eine öffentliche Anfrage zurück /// /// Id des Walkers /// Id der öffntlichen Anfrage /// PublicWalkResponse oder null, wenn keine gefunden Task GetForWalkerAsync(string dogWalkerId, string publicWalkRequestId); /// /// Gibt die Anzahl der Antworten auf eine öffentliche Anfrage zurück /// /// Id der öffentlichen Anfrage /// Anzahl Antworten Task CountForPublicWalkRequestAsync(string publicWalkRequestId); /// /// Gibt eine Liste von Antworten zu einer öffentlichen Anfragen für die App zurück. /// /// Id des AppUsers dem die öffentliche Anfrage gehört /// Id der öffentlichen Anfrage /// Datensätze auslassen /// Datensätze nehmen /// Liste passender antworten Task<(int total, List list)> GetResponsesAsync(string appUserId, string publicRequestId, int skip, int take); /// /// Gibt eine Liste aller Antworten zu einer öffentlichen Anfragen zurück. /// /// Id des AppUsers dem die öffentliche Anfrage gehört /// Id der öffentlichen Anfrage /// Liste passender antworten Task> GetResponsesAsync(string appUserId, string publicRequestId); /// /// Setzen des Closed Status für Angebote die im Warten-Status sind. /// Wird verwendet wenn ein Angebot angenommen wurde und man nun den anderen Bewerbern mitteilen muss, dass wer anderes genommen wurde /// /// Id der öffentlichen Anfrage /// Anzahl geännderte Angebote Task SetCompletedForWaitingAsync(string publicWalkRequestId); /// /// Setzen des Open Status für Angebote die im Closed-Status oder akzeptiert Status sind. /// Wird verwendet wenn ein angenommenes Angebot nicht bezahlt wurde und ein Reset der öffentlichen Anfrage durchgeführt wird /// /// Id der öffentlichen Anfrage /// Anzahl geännderte Angebote Task SetOpenForClosedOrAcceptedAsync(string publicWalkRequestId); /// /// Stornieren von Angeobten für offene öffentliche Anfragen wenn ein Benutzer gesperrt wurde /// /// Id des App-Users /// Anzahl stornierte Angebote Task CancelForLockedAsync(string appUserId); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Walks ermöglicht /// public interface IWalkService : IService { /// /// Erstellen eines Walks /// /// Walk Walk Create(); /// /// Gibt eine Liste der Walks eines Benutzers zurück. Kann Owner und Walker sein /// /// Id des AppUsers /// Letztes Update /// Liste der öffentlichen Anfragen Task> GetForSyncAppAsync(string appUserId, DateTimeOffset? lastUpdate); /// /// Gibt eine gefilterte Liste von Walks zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Sollen gelöschte inkludiert werden? /// Liste betroffener öffentlicher Anfragen IQueryable FilterWithNames(string filter, bool includeDeleted); /// /// Gibt eine Liste von Walks mit Namen aufgelöst zurück /// /// Id des Dogwalkers oder leer wenn nicht für DogWalker /// Id des DogOwners oder leer wenn nicht für DogOwner /// Datum ab dem gesucht werden soll oder NULL wenn alle /// Status des Walks, NULL wenn alle /// Service Type, NULL wenn alle /// Zahlungsstatus, NULL wenn alle /// Optinal: nach HundeID filtern /// Optional: nach Walkername filtern /// Optional: nach Ownername filtern /// Stornierte Ignorieren /// Sollen nur Walks für den nächsten Walk selektiert werden? Dann nur Angenommene oder Laufende /// Sollen Walks die noch eine Anfrage sind, ohne Akzeptiert oder Agelehnt ignorniert werden? /// Sollen abgelehnte Walks ignoriert werden? /// Optional: Liste der sortierung /// Optional: Breitengrad /// Optional: Längengrad /// Datensätze auslassen /// Datensätze nehmen /// Liste gefudene Walks Task<(int total, List list)> GetWithNamesAsync(string dogWalkerId, string dogOwnerId, DateTimeOffset? date, WalkStatus? status, WalkServiceType? serviceType, PaymentStatus? paymentStatus, string dogFilter, string walkerFilter, string ownerFilter, bool ignoreCancelled, bool forNextWalk, bool ignoreRequested, bool ignoreDeclined, List sortList, double lat, double lng, int skip, int take); /// /// Gibt eine Liste von Walks mit Namen aufgelöst zurück für Walker /// Sonderfall hier ist, dass keine Walks mit einem PaymentStatus unter Authorized zurückgibt /// /// Id des Dogwalkers oder leer wenn nicht für DogWalker /// Id des DogOwners oder leer wenn nicht für DogOwner /// Datum ab dem gesucht werden soll oder NULL wenn alle /// Status des Walks, NULL wenn alle /// Service Type, NULL wenn alle /// Zahlungsstatus, NULL wenn alle /// Optinal: nach HundeID filtern /// Optional: nach Walkername filtern /// Optional: nach Ownername filtern /// Stornierte Ignorieren /// Sollen nur Walks für den nächsten Walk selektiert werden? Dann nur Angenommene oder Laufende /// Sollen Walks die noch eine Anfrage sind, ohne Akzeptiert oder Agelehnt ignorniert werden? /// Sollen abgelehnte Walks ignoriert werden? /// Optional: Liste der sortierung /// Optional: Breitengrad /// Optional: Längengrad /// Datensätze auslassen /// Datensätze nehmen /// Liste gefudene Walks Task<(int total, List list)> GetWithNamesForWalkerAsync(string dogWalkerId, string dogOwnerId, DateTimeOffset? date, WalkStatus? status, WalkServiceType? serviceType, PaymentStatus? paymentStatus, string dogFilter, string walkerFilter, string ownerFilter, bool ignoreCancelled, bool forNextWalk, bool ignoreRequested, bool ignoreDeclined, List sortList, double lat, double lng, int skip, int take); /// /// Gibt eine Liste von Walks mit Namen aufgelöst zurück für Hundebesitzer die anstehen, laufen, nicht abgeschlossen sind, nicht gestartet wurden oder zu bezahlen sind /// /// Id des Hundebesitzers /// Datum ab dem gesucht werden soll oder NULL wenn alle /// Datensätze auslassen /// Datensätze nehmen /// Liste gefudene Walks Task<(int total, List list)> GetNextWithNamesForOwnerAsync(string dogOwnerId, DateTimeOffset date, int skip, int take); /// /// Gibt eine Liste von Walks mit Namen aufgelöst zurück für Walker die anstehen, laufen, nicht abgeschlossen sind oder nicht gestartet wurden /// /// Id des Walkers /// Datum ab dem gesucht werden soll oder NULL wenn alle /// Datensätze auslassen /// Datensätze nehmen /// Liste gefudene Walks Task<(int total, List list)> GetNextWithNamesForWalkerAsync(string dogWalkerId, DateTimeOffset date, int skip, int take); /// /// Gibt einen Walk mit Namen aufgelöst zurück /// /// Id des Walks /// Walk oder null, wenn nicht gefunden Task GetWalkWithNamesAsync(string walkId); /// /// Zurückgeben einer Liste von Walks die einen bestimmten Status haben /// /// Gesuchter Status /// Liste von Walks Task> GetByStatusAsync(WalkStatus status); /// /// Gibt einen Walk zurück der mit einer öffentlichen Anfrage verknüpft ist /// /// Id der öffentlichen Anfrage /// Walk oder null, wenn nicht gefunden Task GetWalkByPublicRequestAsync(string publicWalkRequestId); /// /// Prüft ob ein Walk für einen Zeitraum gebucht werden kann. /// Sittings werden dabei ignoriert! /// /// Id des dogwalkers /// Startdatum /// Enddatum /// true wenn verfügbar, false sonst Task IsWalkPossibleAsync(string dogWalkerId, DateTimeOffset start, DateTimeOffset end); /// /// Setzt Walks die im Status "Request" sind auf Cancel. /// Wird verwendet wenn eine FIXE buchung gemacht wird und andere noch auf eine Antwort warten. /// /// Id des dogwalkers /// Startdatum /// Enddatum /// Anzahl betroffene Walks Task CancelWalkRequestsAsync(string dogWalkerId, DateTimeOffset start, DateTimeOffset end); /// /// Walks stornieren welche im Status Request sind und das Startdatum erreicht wurde /// /// Datum für Prüfung /// Anzahl timed out Task CancelTimedOutAsync(DateTimeOffset date); /// /// Stornieren von Walks die im Zahlungsstatus Pending sind und länger als X Minuten alt sind /// /// Datum für Prüfung /// Ablaufzeit in Minuten /// Anzahl storniert Task CancelPendingAsync(DateTimeOffset date, int minutes); /// /// Abschliessen eines Walks, falls das vergessen wurde /// /// Datum für Prüfung /// Ablaufzeit in Minuten /// Anzahl abgeschlossen Task CompleteAutoAsync(DateTimeOffset date, int minutes); /// /// Bestätigen von Walks die im Status Abgeschlossen sind und länger als X Minuten alt sind. /// Löst die Überweisung von den Kosten für den Walk vom hundebesitzer an den Dogwalker aus. /// /// Datum für Prüfung /// Ablaufzeit in Minuten /// Anzahl bestätigt Task ConfirmCompletedAsync(DateTimeOffset date, int minutes); /// /// Bestätigen von Walks die im Status Abgeschlossen sind und länger als X Minuten alt sind. /// Löst die Überweisung von den Kosten für den Walk vom hundebesitzer an den Dogwalker aus. /// /// Datum für Prüfung /// Ablaufzeit in Minuten /// Anzahl bestätigt Task ConfirmCompletedReminderAsync(DateTimeOffset date, int minutes); /// /// Storniert Liste von Walks, welche für 2 App-User in Beziehung stehen wenn eine Blockierung stattgefunden hat. /// Wird bidirektional gesucht, da nicht immer sichergestellt ist, dass einer Walker und einer Owner ist. /// Es werden nur Walks im Status Requested oder Accepted berücksichtigt /// /// Id des App-Users der blockiert hat /// Id des App-Users der blockiert wurde /// Anzahl stornierte Walks Task CancelWalksForBlockAsync(string blockingAppUserId, string blockedAppUserId); /// /// Stornieren aller Walks eines Benutzers der gesperrt wurde. /// Wird bidirektional gesucht, da nicht immer sichergestellt ist, dass einer Walker und einer Owner ist. /// Es werden nur Walks im Status Requested oder Accepted berücksichtigt /// /// Id des App-Users /// Anzahl stornierte Walks Task CancelWalksForLockedAsync(string appUserId); /// /// Fügt die Verwendung eines Gutscheins zu einem Walk hinzu /// /// Id des Walks /// Id des Gutscheins /// Verwendeter Gutscheinwert /// true wenn erfolgreich, false sonst Task AddVoucherToWalk(string walkId, string voucherId, decimal ammount); /// /// Entfernt die Verwendung eines Gutscheins zu einem Walk /// /// Id des Walks /// Id des Gutscheins /// true wenn erfolgreich, false sonst Task RemoveVoucherFromWalk(string walkId, string voucherId); /// /// Gibt die Anzahl von Walks für einen Dogwalker mit dem Status Bestätigt in einem bestimmten Zeitraum zurück /// /// Id des DogWalkers /// StartDatum /// Enddatum /// Anzahl Walks Task CountConfirmedByTimeRangeAsync(string dogWalkerId, DateTimeOffset startDate, DateTimeOffset endDate); } /// /// Schnittstellenbeschreibug für einen Service der die Verwaltung von Walking-Schedules ermöglicht. /// Das bedeutet die einstellung an welchen Wochentagen ein Walker zu welchen Zeiten zur Verfügung steht /// public interface IWalkingTimeService : IService { /// /// Erstellt eine Walkingtime Einstellung /// /// Id des Dogwalkers /// WalkingTime WalkingTime Create(string dogWalkerId); /// /// Gibt eine Liste der Walkintimes eines Benutzers für das Syncing mit der App zurück. /// /// Id des DogWalkers /// Letztes Update /// Liste der öffentlichen Anfragen Task> GetForSyncAppAsync(string dogWalkerId, DateTimeOffset? lastUpdate); /// /// Gibt eine Liste der Walkintimes eines Benutzers zurück. /// /// Id des DogWalkers /// Liste der öffentlichen Anfragen Task> GetAllAsync(string dogWalkerId); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Ratings ermöglicht /// public interface IRatingService : IService { /// /// Erstellen eines Ratings /// /// Rating Rating Create(); /// /// Erstellen eines Ratings /// /// Id der Rating Quelle /// Typ der Rating Quelle /// Id des Ziels des Ratings /// Typ des Rating Ziels /// Vergebene Punkte /// Zusatzinfo zum Rating /// Rating Rating Create(string fromId, AppUserType fromType, string targetId, RatingTarget targetType, decimal points, string info); /// /// Gibt eine Liste der Ratings eines Benutzers zurück. Kann Owner und Walker sein /// /// Id des AppUsers /// Letztes Update /// Liste der öffentlichen Anfragen Task> GetForSyncAppAsync(string appUserId, DateTimeOffset? lastUpdate); /// /// Gibt ein Rating basierend auf Abfragekriterien zurück /// /// Id der Rating Quelle /// Typ der Rating Quelle /// Id des Ziels des Ratings /// Typ des Rating Ziels /// Rating wenn gefunden, null sonst Task GetRatingExAsync(string fromId, AppUserType fromType, string targetId, RatingTarget targetType); /// /// Neu berechnen der Ratings-Statistics für ein Ziel /// /// Id des Ziels des Ratings /// Typ des Rating Ziels /// true wenn erfolgreich, false sonst Task UpdateRatingStatisticsAsync(string targetId, RatingTarget targetType); /// /// Gibt an ob ein Bewerter ein Ziel bereits bewertet hat /// /// Id der Rating Quelle /// Typ der Rating Quelle /// Id des Ziels des Ratings /// Typ des Rating Ziels /// true wenn bereits bewertet, false sonst Task HasRatedAsync(string fromId, AppUserType fromType, string targetId, RatingTarget targetType); /// /// Gibt zurück ob ein Bewerter ein Ziel bewerten darf. /// z.B. ein Walker darf einen hund nur bewerten, wenn mindestens ein Walk mit dem hund stattgefunden hat. /// Ein Owner darf einen Walker nur bewerten, wenn dieser mindestens einen Walk für den Owen gemacht hat usw. /// /// Id der Rating Quelle /// Typ der Rating Quelle /// Id des Ziels des Ratings /// Typ des Rating Ziels /// true wenn eine Bewertung stattfinden darf, false sonst Task CanRateAsync(string fromId, AppUserType fromType, string targetId, RatingTarget targetType); /// /// Alle Ratings eines AppUsers und für einen AppUser löschen /// /// Id des AppUsers /// Liste von Rating-Ziele deren Statistik aktualisiert werden muss Task>> DeleteAllForAppUserAsync(string appUserId); /// /// Gibt eine Liste von Ratings mit Namen aufgelöst zurück /// /// Id der Rating Quelle /// Typ der Rating Quelle /// Id des Ziels des Ratings /// Typ des Rating Ziels /// Optional: Liste der sortierung /// Datensätze auslassen /// Datensätze nehmen /// Liste gefudene Walks Task<(int total, List list)> GetWithNamesAsync(string fromId, AppUserType? fromType, string targetId, RatingTarget? targetType, List sortList, int skip, int take); /// /// Gibt eine Liste von Ratings mit Namen aufgelöst und mit lock und block Info zurück /// /// Id des Benutzers der abfrägt und für den Blocking geprüft wird /// Id der Rating Quelle /// Typ der Rating Quelle /// Id des Ziels des Ratings /// Typ des Rating Ziels /// Optional: Liste der sortierung /// Datensätze auslassen /// Datensätze nehmen /// Liste gefudene Walks Task<(int total, List list)> GetWithNamesExAsync(string blockingAppUserId, string fromId, AppUserType? fromType, string targetId, RatingTarget? targetType, List sortList, int skip, int take); /// /// Gibt ein Rating mit Namen aufgelöst zurück /// /// Id des Ratings /// Rating oder null, wenn nicht gefunden Task GetWithNamesAsync(string ratingId); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Feedbacks aus der App ermöglicht /// public interface IAppFeedbackService : IService { /// /// Erstellen eines Feedback /// /// AppFeedback AppFeedback Create(); /// /// Gibt eine gefilterte Liste von Feedback zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Feedbacks IQueryable Filter(string filter); /// /// Gibt die Anzahl von Feedbacks in einem bestimmten Status zurück /// /// Gewünschter Status /// Anzahl Feedbacks im Status Task CountAsync(AppFeedbackStatus status); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Favoriten ermöglicht /// public interface IFavouriteService : IService { /// /// Erstellen eines Favoriten /// /// Rating Favourite Create(); /// /// Erstellen eines Favoriten /// /// Id des AppUsers /// Id des verknüpften Objekts /// Typ des verknüpften Objekts /// Rating Favourite Create(string appUserId, string key, string table); /// /// Gibt eine Liste der Favoriten eines Benutzers zurück. Kann Owner und Walker sein /// /// Id des AppUsers /// Letztes Update /// Liste der öffentlichen Anfragen Task> GetForSyncAppAsync(string appUserId, DateTimeOffset? lastUpdate); /// /// Gibt eine Liste der Favoriten eines Benutzers zurück /// /// Id des AppUsers /// Liste der Favoriten Task> GetForAppUserAsync(string appUserId); /// /// Gibt eine Liste der Favoriten eines Benutzers zurück /// /// Id des AppUsers /// Typ des Objektes das gesucht wird /// Liste der Favoriten Task> GetForAppUserAsync(string appUserId, string table); /// /// Alle Favoriten eines AppUsers löschen /// /// Id des AppUsers /// Anzahl gelöscht Task DeleteAllForAppUserAsync(string appUserId); } /// /// Schnittstellenbeschrigun für einen Service der die Verwaltung von Systemnachrichten ermöglicht /// public interface ISystemMessageService : IService { /// /// Erstellen einer Systemnachrichten /// /// Systemnachricht SystemMessage Create(); /// /// Erstellen einer Systemnachrichten /// /// Id des AppUsers /// Typ des App-Users /// Id des verknüpften Objekts /// Typ des verknüpften Objekts /// Typ der Systemnachricht /// Systemnachricht SystemMessage Create(string appUserId, AppUserType appUserType, string key, string table, SystemMessageType type); /// /// Gibt eine Liste der Systemnachrichten eines Benutzers zurück /// /// Id des AppUsers /// Letztes Update /// Liste der Systemnachricht Task> GetForSyncAppAsync(string appUserId, DateTimeOffset? lastUpdate); /// /// Berstätigen des Erhaltes von SystemNachrichten für einen Benutzer. Alle die älter als das UpdateDatum sind werden gelöscht /// /// Id des Users - wird als Receiver gesucht /// Letztes Update /// Benutzer der die Änderung vornimmt /// true wenn erfolgreich, false sonst Task ConfirmAsync(string senderId, DateTimeOffset lastUpdate, string userName); /// /// Entfernen von Systemnachrichten für einen Benutzer wenn diese in der App schon gesehen wurden /// /// Id des AppUsers /// Typ des App-Users /// Id des verknüpften Objekts /// Typ des verknüpften Objekts /// Datum - das created Datum der Systemnachricht muss kleiner gleich sein /// Benutzer der die Änderung vornimmt /// Systemnachricht Task RemoveAsync(string appUserId, AppUserType appUserType, string key, string table, DateTimeOffset? created, string userName); /// /// Hinzufügen eines Systemnachricht /// /// Id des Ziels /// Typ des App-Users /// Id des Objekts /// Objekttyp /// Nachrichten-Typ /// Ablaufdatum /// Task void Add(string appUserId, AppUserType appUserType, string key, string table, SystemMessageType type, DateTimeOffset expires); /// /// Hinzufügen einer Systemnachricht als Text. Setzt den Typen automatisch /// /// Id des Ziels /// Typ des App-Users /// Id des Objekts /// Ablaufdatum /// Nachricht /// Task void Add(string appUserId, AppUserType appUserType, string key, DateTimeOffset expires, string message); /// /// Löschen abgelaufener Nachrichten /// /// Grenzdatum für Expired /// Anzahl gelöschte Nachrichten Task RemoveExpiredAsync(DateTimeOffset date); /// /// Alle Systemnachrichten eines AppUsers löschen /// /// Id des AppUsers /// Anzahl gelöscht Task DeleteAllForAppUserAsync(string appUserId); #region SystemMessagesToSend /// /// Erstellen einer Systemnachrichten die gesendet werden sollen /// /// Systemnachricht die gesendet werden soll SystemMessageToSend CreateToSend(); /// /// Gibt eine gefilterte Liste von Systemnachrichten die gesendet werden sollen /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Systemnachrichten die gesendet werden sollen IQueryable FilterSystemMessagesToSend(string filter); /// /// Hinzufügen einer Systemnachricht die gesendet werden soll /// /// SystemMessageToSend void AddToSend(SystemMessageToSend item); /// /// Löschen einer Systemnachricht die gesendet werden soll /// /// SystemMessageToSend void RemoveToSend(SystemMessageToSend item); /// /// Gibt eine Systemnachricht die gesendet werden soll zurück /// /// Id der Systemnachricht /// SystemMessageToSend oder null, wenn nicht gefunden Task GetToSendAsync(long id); /// /// Gibt eine Liste von Systemnachrichten die gesendet werden sollen zurück. /// Bereits gesendete oder Nachrichten die kein Versanddatum haben werden nicht zurückgegeben /// /// Datum das größer als das Versanddatum sein muss /// Liste Nachrichten zu senden Task> GetToSendAsync(DateTimeOffset date); #endregion } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Devices der App-User ermöglicht /// public interface IDeviceService : IService { /// /// Anlegen oder Aktualisieren eines Devices /// /// ID des AppUsers /// eindeutige InstallationsID /// Platform (OS) /// Platform (PNS) /// Token des Users /// Sprache die am Gerät eingestellt ist /// Soll Commit untertrückt werden /// Device Task CreateOrUpdateAsync(string appUserId, string installationId, Platform platform, NotificationPlatform notificationPlatform, string channel, string language, bool suppresCommit); /// /// Löschen eines Devices eines Benutzers mit einer InstallationsId /// /// /// /// Soll Commit untertrückt werden /// Task DeleteAsync(string appUserId, string installationId, bool suppresCommit); /// /// Gibt eine Liste aller Devices eines App-Users zurück /// /// Id des AppUsers /// Liste von Devices Task> GetAllAsync(string appUserId); /// /// Gibt ein Device für einen App-User zurück /// /// Id des App-Users /// InstallationsId des Devices /// Device oder null, wenn nicht gefunden Task GetAsycn(string appUserId, string installationId); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Wallets ermöglicht /// public interface IWalletService : IService { /// /// Erstellen eines Wallets für einen AppUser /// /// Id des AppUsers /// ID des Walltes bei Mangopay /// Typ des Wallets /// Id des Payment Owners (PaymentId) /// Währung ISO 4217 Code /// Beschreibung /// Wallet Wallet Create(string appUserId, string walletId, WalletType type, string ownerId, string currency, string description); /// /// Gibt ein Wallet für einen AppUser mit einem Typ zurück /// /// Id des AppUsers /// Typ des Wallets /// Wallet oder null, wenn nicht gefunden Task GetAsync(string appUserId, WalletType type); /// /// Gibt eine Liste aller Wallets eines AppUsers zurück /// /// Id des AppUsers /// Liste von Wallets Task> GetAllAsync(string appUserId); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Transaktionsgebühren ermöglichts /// public interface ITransactionFeeService : IService { /// /// Gibt eine gefilterte Liste von Transaktionsgebühren zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Transaktionsgebühren IQueryable Filter(string filter); /// /// Erstellen einer Tranksaktionsgebühr /// /// Tranksaktionsgebühr TransactionFee Create(); /// /// Prüft ob schon eine Einstellung für einen Typ vorhanden ist /// /// Zahlungsmethode /// true wenn bereits vorhanden, false sonst Task ExistsAsync(PayInType payInType); /// /// Gibt eine Liste von Transaktionsgebühren zurück, die für die Synchronisation benötigt werden /// /// Letztes Update oder null wenn noch keines /// Liste von Transaktionsgebühren Task> GetForSyncAsync(DateTimeOffset? lastUpdate); /// /// Gibt eine gefilterte Liste von GehGassi-Gebühren zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener GehGassi-Gebühren IQueryable FilterGehGassiFees(string filter); /// /// Erstellen einer GehGassi-Gebühr /// /// GehGassi-Gebühr GehGassiFee CreateGehGassiFee(); /// /// Gibt eine GehGassi-Gebühr zurück /// /// Id der Gebühr /// Gebühr oder null, wenn nicht gefunden Task GetGehGassiFeeAsync(string id); /// /// Prüft ob schon eine Einstellung für einen Startbetrag vorhanden ist /// /// Startbetrag /// ID die ignoriert werden soll /// true wenn bereits vorhanden, false sonst Task ExistsGehGassiFeeAsync(decimal startAmmount, string ignoreId); /// /// Hinzufügen einer GehGassi-Gebühr /// /// GehGassi-Gebühr void AddGehGassiFee(GehGassiFee gehGassiFee); /// /// Löschen einer GehGassi-Gebühr /// /// GehGassi-Gebühr void RemoveGehGassiFee(GehGassiFee gehGassiFee); /// /// Gibt eine GehGassi-Gebühr zurück die für den Startbetrag gilt /// /// Start-Betrag /// Gebühr oder null, wenn nicht gefunden Task GetMinGehGassiFeeAsync(decimal startAmmount); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Zahlungstransaktionen ermöglicht /// public interface IPaymentTransactionService : IService { /// /// Erstellen einer Zahlungs-Transaktion /// /// Zahlungs-Transaktion PaymentTransaction Create(); /// /// Gibt eine Transaktion anhand der MangoPay TransaktionsId zurück. /// Diese muss den entsprechenden TransaktionsTyp und Status haben /// /// Id der Transaktion bei MangoPay /// Typ der Transaktion /// Status der Transaktion /// Transaktion oder null, wenn nicht gefunden Task GetAsync(string transactionId, PaymentTransactionType type, PaymentTransactionStatus status); /// /// Gibt eine Transaktion anhand der MangoPay TransaktionsId zurück. Hier wird die zuletzt erstellte Transaktion zurückgegeben. /// Diese muss den entsprechenden TransaktionsTyp und Status haben /// /// Id der Transaktion bei MangoPay /// Typ der Transaktion /// Transaktion oder null, wenn nicht gefunden Task GetAsync(string transactionId, PaymentTransactionType type); /// /// Erstellen einer Zahlungs-Transaktion /// /// Id der Transaktion bei MangoPay /// Typ der Transaktion /// Status der Transaktion /// Id des Walks /// Id des AppUsers der die Zahlung erhält /// Id des Wallets, auf das die Transaktion angewendet wird /// Id des AppUsers der die Zahlung veranlasst /// Id des Wallets, von dem die Transaktion ausgeht /// Betrag in der kleinsten Einheit der Währung /// Zusätzlich vom Guthabenkonto in der kleinsten Einheit der Währung /// Währung ISO 4217 Code /// Art der Zahlung /// Zahlungs-Transaktion PaymentTransaction Create(string transactionId, PaymentTransactionType type, PaymentTransactionStatus status, string walkId, string targetAppUserId, string targetWalletId, string sourceAppUserId, string sourceWalletId, long ammount, long fromCredit, string currency, PayInType? payInType); /// /// Erstellen einer Zahlungs-Transaktion mit Fehlern nach Mangopay /// /// Id der Transaktion bei MangoPay /// Typ der Transaktion /// Status der Transaktion /// Id des Walks /// Id des AppUsers der die Zahlung erhält /// Id des Wallets, auf das die Transaktion angewendet wird /// Id des AppUsers der die Zahlung veranlasst /// Id des Wallets, von dem die Transaktion ausgeht /// Betrag in der kleinsten Einheit der Währung /// Zusätzlich vom Guthabenkonto in der kleinsten Einheit der Währung /// Währung ISO 4217 Code /// Fehlermeldung Mangopay /// Fehlertyp nach Mangopay /// Fehlermledungen nach Mangopay - Zusatzinfo /// Art der Zahlung /// Zahlungs-Transaktion PaymentTransaction Create(string transactionId, PaymentTransactionType type, PaymentTransactionStatus status, string walkId, string targetAppUserId, string targetWalletId, string sourceAppUserId, string sourceWalletId, long ammount, long fromCredit, string currency, string errorMessage, string errorType, Dictionary errorMessages, PayInType? payInType); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von KYC-Dokumenten ermöglicht /// public interface IIdentityDocumentService : IService { /// /// Erstellen eines KYC-Dokuments /// /// IdentityDocument IdentityDocument Create(); /// /// Erstellen eines KYC-Dokuments /// /// Id des App-Users /// Id des KYC-Dokumentes bei MangoPay /// Id des Users bei MangoPay /// Typ des Dokumentes /// Quelle / Dokumentenart /// Status der Validierung des Dokumentes /// Anzahl der Seiten /// IdentityDocument IdentityDocument Create(string appUserId, string mangoPayId, string mangoPayUserId, IdentityDocumentType documentType, IdentityDocumentSource source, IdentityDocumentStatus status, int pageCount); /// /// Gibt ein KYC-Dokument anhand der MangoPayId zurück /// /// Id des Dokumentes bei MangoPay /// IdentityDocument oder null, wenn nicht gefunden Task GetByMangoPayIdAsync(string mangoPayId); /// /// Gibt ein KYC-Dokument zurück, bei welchem die Validierung noch läuft /// /// Id des App-USers /// IdentityDocument oder null, wenn keines gefunden Task GetValidationInProgressAsync(string appUserId); /// /// Gibt das zuletzt erstellte KYC-Dokument für einen App-User zurück /// /// Id des App-USers /// IdentityDocument oder null, wenn keines gefunden Task GetLatestAsync(string appUserId); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Auszahlungen ermöglicht /// public interface IPayoutService : IService { /// /// Erstellen einer Auszahlung /// /// Payout Payout Create(); /// /// Erstellen einer Auszahlung /// /// Id des App-Users /// Id des Users bei MangoPay /// Id der Auszahlung bei MangoPay /// Id des Wallets /// Id des Wallets bei MangoPay /// Id der Bankverbindung bei mangoPay /// Iban letzte 4 Stellen /// Bic letzte 4 Stellen oder leer /// Summe die ausgezahlt werden soll in der kleinsten Einheit /// Währung ISO 4217 Code /// Payout Payout Create(string appUserId, string mangoPayUserId, string mangoPayId, string walletId, string mangoPayWalletId, string mangoPayBankId, string iban, string bic, long ammount, string currency); /// /// Gibt eine Liste der Auszahlungen eines Benutzers zurück. /// /// Id des AppUsers /// Letztes Update /// Liste der öffentlichen Anfragen Task> GetForSyncAppAsync(string appUserId, DateTimeOffset? lastUpdate); /// /// Gibt eine Auszahlung anhand der MangoPayId zurück /// /// Id der Auszahlung bei MangoPay /// Payout oder null, wenn nicht gefunden Task GetByMangoPayIdAsync(string mangoPayId); /// /// Gibt eine Liste von Auszahlungen zurück /// /// Id des App-Users /// Optional: Liste der sortierung /// Datensätze auslassen /// Datensätze nehmen /// Liste gefudene Walks Task<(int total, List list)> GetAsync(string appUserId, List sortList, int skip, int take); /// /// Gibt die letzte Auszahlung eines Benutzers zurück /// /// Id des Benutzers /// Auszahlung oder null, wenn nicht gefunden Task GetLastPayoutAsync(string appUserId); /// /// Gibt die Anzahl der Auszahlungen eines Benutzers in einem Zeitrahmen zurück /// /// Id des App-Users /// Startdatum /// Enddatum /// Anzahl Auszahlungen Task CountPayoutsInTimeRangeAsync(string appUserId, DateTimeOffset startDate, DateTimeOffset endDate); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Walk-Beschwerden ermöglicht /// public interface IWalkComplaintService : IService { /// /// Erstellen einer Walk-Beschwerde /// /// Walk WalkComplaint Create(); /// /// Gibt eine gefilterte Liste von Walk-Beschwerden mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Sollen gelöschte inkludiert werden? /// Liste betroffener Walk-Beschwerden IQueryable FilterWithNames(string filter, bool includeDeleted); /// /// Gibt eine Walk-Beschwerden mit Namen aufgelöst zurück /// /// Id der Beschwerde /// Walk-Beschwerden mit Namen aufgelöst Task GetWithNamesAsync(string id); /// /// Gibt eine Walk-Beschwerden mit Namen aufgelöst zurück /// /// Id des Walks /// Walk-Beschwerden mit Namen aufgelöst Task GetWithNamesByWalkAsync(string walkId); /// /// Gibt eine Walk-Beschwerden zurück /// /// Id des Walks /// Walk-Beschwerden Task GetByWalkAsync(string walkId); /// /// Gibt die Anzahl der Walk-Beschwerden mit einem bestimmten Status zurück /// /// Gewünschter Status /// Anzahl Beschwerden im Status Task CountAsync(WalkComplaintStatus status); } /// /// Schnittstellenbeschreibung für einen Service der Statistiken zur Verfügung stellt /// public interface IStatisticService { /// /// Gibt zurück wie viele gültige Walks insgesamt vorhanden sind. /// Das sind alle Walks die nicht folgenden Status haben: /// - Requested /// - Declined /// - Cancelled /// /// Minimaler Zahlungsstatus, null wenn alle /// Maximaler Zahlungsstatus, null wenn alle /// Land oder leer wenn alle /// Anzahl Walks Task CountWalksTotalAsync(PaymentStatus? minPaymentStatus, PaymentStatus? maxPaymentStatus, string countryIso); /// /// Gibt zurück wie viele gültige Walks in einem Zeitraum vorhanden sind. /// Das sind alle Walks die nicht folgenden Status haben: /// - Requested /// - Declined /// - Cancelled /// /// Minimaler Zahlungsstatus, null wenn alle /// Maximaler Zahlungsstatus, null wenn alle /// Startdatum /// Enddatum /// Land oder leer wenn alle /// Anzahl Walks Task CountWalksAsync(PaymentStatus? minPaymentStatus, PaymentStatus? maxPaymentStatus, DateTimeOffset start, DateTimeOffset end, string countryIso); /// /// Gibt die Anzahl von Walks in einem bestimmten Status in einem Zeitraum zurück /// /// Status der gesucht wird, null wenn alle /// Minimaler Zahlungsstatus, null wenn alle /// Maximaler Zahlungsstatus, null wenn alle /// Startdatum /// Enddatum /// Land oder leer wenn alle /// Anzahl Walks Task CountWalkByStatusAsync(WalkStatus? status, PaymentStatus? minPaymentStatus, PaymentStatus? maxPaymentStatus, DateTimeOffset start, DateTimeOffset end, string countryIso); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von App-User-Reports ermöglicht /// public interface IAppUserReportService : IService { /// /// Erstellen einer Meldung /// /// AppFeedback AppUserReport Create(); /// /// Gibt eine gefilterte Liste von Meldungen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Feedbacks IQueryable Filter(string filter); /// /// Gibt eine gefilterte Liste von Meldungen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Feedbacks IQueryable FilterWithNames(string filter); /// /// Gibt die Anzahl von Meldungen in einem bestimmten Status zurück /// /// Gesuchter Status /// Anzahl Meldungen im Status Task CountAsync(AppUserReportStatus status); /// /// Gibt eine Meldung mit Namen aufgelöst zurück /// /// Id der Meldung /// AppUserReportWithNames oder null, wenn nicht gefunden Task GetWithNamesAsync(long id); /// /// Gibt zurück wie viele Meldungen ein App-User erstellt hat /// /// Id des App-Users /// Anzahl Meldungen Task CountReportingAsync(string appUserId); /// /// Gibt zurück wie viele Meldungen für ein App-User erstellt wurden /// /// Id des App-Users /// Anzahl Meldungen erstellt Task CountReportedAsync(string appUserId); /// /// Löscht alle Meldungen and denen ein AppUser beteiligt ist /// /// Id des App-Users /// Anzahl Meldungen gelöscht Task DeleteAllForAppUserAsync(string appUserId); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von FAQs realisiert /// public interface IFaqService : IService { /// /// Gibt eine gefilterte Liste von FAQs zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener FAQs IQueryable Filter(string filter); /// /// Erstellen einer FAQ /// /// Faq Faq Create(); /// /// Gibt eine gefilterte Liste von FAQs zurück. Sucht nur im Titel /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener FAQs Task> SearchAsync(string filter); /// /// Gibt eine gefilterte Liste von FAQs mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Liste betroffener FAQs IQueryable FilterWithNames(string filter, string language, string fallback, bool includeDeleted); /// /// Gibt eine Liste von FAQs zurück, welche nach dem glieferten Datum geändert wurden. /// Wird kein Datum angegeben, werden alle zurückgegeben. /// Es werden alle Kategorien zurückgegeben - egal ob on- oder offline. /// /// Letztes Update oder null wenn noch keines /// Gewünschte Sprache /// Fallback Sprache /// Liste von FAQs Task> GetForSyncAsync(DateTimeOffset? lastUpdate, string language, string fallback); /// /// Erstellt das FAQ-Html für die Integration in die FAQ-Seite. /// Es werden alle FAQs genommen, welche Online sind und nicht gelöscht wurden /// /// Gewünschte Sprache /// Fallback Sprache /// Typ /// string - HTML Task GenerateHtmlForPageAsync(string language, string fallback, FaqType type); /// /// Gibt eine Liste aller FAQ mit einem speziellen Typ zurück /// /// Typ /// Liste FAQ Task> GetAllAsync(FaqType type); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Coin-Konten, Transaktionen und Monats- und Jahresstatistiken realisiert /// public interface ICoinsService : IService { /// /// Gibt einen Coin-Account zurück oder erstellt einen neuen wenn noch nicht vorhanden /// /// Id des AppUsers /// Typ des AppUsers /// CoinAccount Task GetOrCreateAsync(string appUserId, AppUserType appUserType); /// /// Einzahlen einer Coins-Summe auf das passende Konto eines AppUsers /// /// Id des AppUsers /// Typ des AppUsers /// Coins-Betrag der eingezahlt werden soll /// Optional: Id des Walks auf den sich die Transaktion bezieht /// Transaktion Task DepositAsync(string appUserId, AppUserType appUserType, decimal ammount, string walkId); /// /// Abbuchen einer Coins-Summe von dem passenden Konto eines AppUsers /// /// Id des AppUsers /// Typ des AppUsers /// Coins-Betrag der eingezahlt werden soll /// CoinsTransaction Task WithdrawAsync(string appUserId, AppUserType appUserType, decimal ammount); /// /// Gibt den Coins-Stand eines AppUsers für einen Monat zurück /// /// Id des AppUsers /// Typ des AppUsers /// Datum /// CoinsPerMonth Task GetOrCreateCoinsPerMonthAsync(string appUserId, AppUserType appUserType, DateTimeOffset date); /// /// Gibt den Coins-Stand eines AppUsers für ein Jahr zurück /// /// Id des AppUsers /// Typ des AppUsers /// Datum /// CoinsPerYear Task GetOrCreateCoinsPerYearAsync(string appUserId, AppUserType appUserType, DateTimeOffset date); /// /// Gibt die Top X der Coins je Monat für ein Jahr und Monat zurück. /// Sortiert nach Coins absteigend und bei Gleichstand nach LastUpdate aufsteigend /// /// Anzalh Datensätze /// Typ des AppUsers /// Jahr /// Monat /// Mindest-Wert der erreicht werden musste /// Liste CoinsPerMonthWithNames Task> GetMonthlyTopAsync(int count, AppUserType appUserType, int year, int month, decimal minBalance); /// /// Gibt die Top X der Coins je Jahr zurück. /// Sortiert nach Coins absteigend und bei Gleichstand nach LastUpdate aufsteigend /// /// Anzalh Datensätze /// Typ des AppUsers /// Jahr /// Mindest-Wert der erreicht werden musste /// Liste CoinsPerMonthWithNames Task> GetYearlyTopAsync(int count, AppUserType appUserType, int year, decimal minBalance); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Appversionen realisiert /// public interface IAppVersionService : IService { /// /// Gibt eine gefilterte Liste von Appversionen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener AppVersionen IQueryable Filter(string filter); /// /// Erstellen einer Appversion /// /// Listung AppVersion Create(); /// /// Gibt eine gefilterte Liste von Appversionen zurück. /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Appversionen Task> SearchAsync(string filter); /// /// Gibt eine gefilterte Liste von Appversionen mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Liste betroffener Appversionen IQueryable FilterWithNames(string filter, string language, string fallback); /// /// Gibt zurück ob eine Versionsnummer für eine Plattform bereits existiert /// /// Plattform /// Versionsnummer die geprüft werden soll /// ID die ignoriert werden soll /// true wenn eine existiert, false sonst Task VersionExistsAsync(Platform platform, string version, int ignoreId); /// /// Gibt zurück ob eine Plattform eine aktuelle Version hat /// /// Plattform /// ID die ignoriert werden soll /// true wenn eine existiert, false sonst Task HasCurrentAsync(Platform platform, int ignoreId); /// /// Zurücksetzen der aktuellen Version einer Plattform. Es kann nur einen geben :) /// /// Plattform /// Benutzer der die Änderung vornimmt /// Task Task ResetCurrentAsync(Platform platform, string userName); /// /// Gibt die aktuelle Version einer Plattform zurück /// /// Plattform /// Gewünschte Sprache /// Fallback Sprache /// Aktuelle Version oder null, wenn keine vorhanden Task GetCurrentwithNamesAsync(Platform platform, string language, string fallback); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Gutschein Kampagnen realisiert /// public interface IVoucherCampaignService : IService { /// /// Gibt eine gefilterte Liste von Gutschein-Kampagnen zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Gutschein-Kampagnen IQueryable Filter(string filter); /// /// Erstellen einer Gutschein-Kampagne /// /// Gutschein-Kampagne VoucherCampaign Create(); /// /// Gibt eine gefilterte Liste von Gutschein-Kampagnen zurück. /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Gutschein-Kampagnen Task> SearchAsync(string filter); /// /// Gibt eine gefilterte Liste von Gutschein-Kampagnen mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Sollen Entitäten im Draft-Status (Cart) ausgeblendet werden? /// Liste betroffener Gutschein-Kampagnen IQueryable FilterWithNames(string filter, string language, string fallback, bool includeDeleted, bool excludeDraft); /// /// Gibt eine gefilterte Liste von Gutschein-Kampagnen mit Namen für Kunden zurück in einer gewählten Sprache /// /// Id des Kunden /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Sollen Entitäten im Draft-Status (Cart) ausgeblendet werden? /// Liste betroffener Gutschein-Kampagnen IQueryable FilterWithNamesCustomer(long customerId, string filter, string language, string fallback, bool includeDeleted, bool excludeDraft); /// /// Gibt die Anzahl von Gutschein-Kampagnen zurück /// /// Sollen gelöschte inkludiert werden? /// Sollen Entitäten im Draft-Status (Cart) ausgeblendet werden? /// Anzahl Gutschein-Kampagnen Task CountAsync(bool includeDeleted, bool excludeDraft); /// /// Gibt die Anzahl von Gutschein-Kampagnen in einem Status zurück /// /// Gesuchter Status /// Sollen gelöschte inkludiert werden? /// Anzahl Gutschein-Kampagnen Task CountAsync(VoucherCampaignStatus status, bool includeDeleted); /// /// Gibt eine Gutschein-Kampagne für einen Artikel im Warenkorb zurück /// /// Id des Artikels im Warenkorb /// Gutschein-Kampagne oder null, wenn nicht gefunden Task GetByCartItemAsync(long cartItemId); /// /// Gibt einen Gutschein-Kampagne für einen Artikel in einer Bestellung zurück /// /// Id des Artikels in der Bestellung /// Gutschein-Kampagne oder null, wenn nicht gefunden Task GetByOrderItemAsync(long orderItemId); /// /// Setzen des Status von Gutschein-Kampagnen nach Bestellung /// /// Id der Bestellung /// Zu setzender Status /// Anzahl betroffener Gutschein-Kampagnen Task SetStatusByOrderAsync(long orderId, VoucherCampaignStatus status); /// /// Setzen des Bezahlstatus von Gutschein-Kampagnen nach Bestellung /// /// Id der Bestellung /// Zu setzender Status /// Anzahl betroffener Gutschein-Kampagnen Task SetPaymentStatusByOrderAsync(long orderId, PaymentStatus status); /// /// Starten von gebuchten Gutschein-Kampagnen wenn diese das Start-Datum erreicht haben /// /// Anzahl gestartete Gutschein-Kampagnen Task StartBookedAsnyc(); /// /// Stoppen von abgelaufenen Gutschein-Kampagnen wenn diese das Enddatum erreicht haben /// /// Anzahl gestoppte Gutschein-Kampagnen Task StopRunningAsync(); /// /// Erstellen von Gutscheinen für eine Gutschein-Kampagne /// /// Id der Kampagne /// Der Benutzer der die Gutscheine angelegt hat /// Anzahl der erstellten Gutscheine Task CreateVouchersForCampaign(string voucherCampaignId, string userName); /// /// Prüft ob ein Präfix für eine Gutschein-Kampagne verfügbar ist /// /// Präfix der geprüft werden soll /// Id der Kampagne die ignoriert werden soll /// true wenn verfügbar, false sonst Task IsPrefixAvailableAsync(string prefix, string voucherCampaignId); /// /// Aktualisiert den Gutschein-Betrag für alle noch nicht eingelösten oder deaktivierten Gutscheine einer Kampagne /// /// Id der Kampagne /// Wert der gesetzt werden soll /// Anzahl Gutscheine die betroffen sind Task UpdateVoucherAmmountAsync(string voucherCampaignId, decimal voucherAmmount); /// /// Löschen der Gutscheine und deren Verwendung für eine Kampagne /// /// Id der Kampagne /// Anzahl gelöscht Task RemoveVouchersAsync(string voucherCampaignId); /// /// Gibt eine Liste von Gutscheinen für eine Kampagne zurück /// /// Id der Kampagne /// Liste Gutscheine Task> GetVouchersForCampaignAsync(string voucherCampaignId); /// /// Prüft ob ein manueller Gutscheincode für einen Benutzer gültig ist und eingesetzt werden kann /// /// Code /// Id des AppUsers /// Validierungs-Ergebnis Task ValidateVoucherCodeAsync(string code, string appUserId); /// /// Gibt einen Gutschein anhand des Codes zurück /// /// Code des Gutscheins /// Gutschein oder null, wenn nicht gefunden Task GetVoucherByCodeAsync(string code); /// /// Gibt einen Gutschein anhand des QR-Codes zurück /// /// QR-Code des Gutscheins /// Gutschein oder null, wenn nicht gefunden Task GetVoucherByQrCodeAsync(string qrCode); /// /// Reserviert einen Gutschein für einen Benutzer und einen Walk /// /// Id des Vouchers /// Id des AppUsers /// Id des Walks /// Wert des Gutscheins /// Wert der verbraucht wurde. Kann kleiner Gutscheinwert sein /// VoucherUsage Task ReserveVoucherAsync(string voucherId, string? appUserId, string? walkId, decimal voucherAmmount, decimal voucherAmmountUsed); /// /// Löschen der Verwendung eines Gutscheins /// /// VoucherUsage void RemoveUsage(VoucherUsage voucherUsage); /// /// Gibt die Verwendung eines Gutscheins zurück /// /// Id des Gutscheins /// Id des AppUsers /// Id des Walks /// VoucherUsage oder null, wenn nicht gefunden Task GetUsageAsync(string voucherId, string? appUserId, string? walkId); /// /// Gibt einen Gutschein zurück /// /// Id des Gutscheins /// Voucher oder null, wenn nicht gefunden Task GetVoucherAsync(string voucherId); /// /// Löschen von Voucher-Usages für einen AppUser /// /// Id des AppUsers /// Anzahl gelöscht Task RemoveVoucherUsageForAppUserAsync(string appUserId); } /// /// Schnittstellenbeschreibung für einen Service der die Verwaltung von Abonnements realisiert /// public interface ISubscriptionService : IService { /// /// Gibt eine gefilterte Liste von Abonnements zurück /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Abonnements IQueryable Filter(string filter); /// /// Erstellen eines Abonnements /// /// Abonnement Subscription Create(); /// /// Gibt eine gefilterte Liste von Abonnements zurück. /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// List betroffener Abonnements Task> SearchAsync(string filter); /// /// Gibt eine gefilterte Liste von Abonnements mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Sollen gelöschte inkludiert werden? /// Liste betroffener Abonnements IQueryable FilterWithNames(string filter, string language, string fallback, bool includeDeleted); /// /// Gibt eine Liste von Abonnements zurück, welche dem gesuchten AppMode entsprechend und aktiv sind /// /// Gesuchter App mode /// Gewünschte Sprache /// Fallback Sprache /// Liste Abonnements Task> GetAllAsync(AppMode appMode, string language, string fallback); /// /// Gibt eine gefilterte Liste von Abonnements mit Namen zurück in einer gewählten Sprache /// /// Filterbegriff der in bestimmten Feldern gesucht wird /// Gewünschte Sprache /// Fallback Sprache /// Liste betroffener Abonnements IQueryable FilterAppUserSubscritionsWithNames(string filter, string language, string fallback); /// /// Gibt eine Liste von Abonnements zurück, welche ein App-User abonniert hat /// /// App user id /// Gewünschte Sprache /// Fallback Sprache /// Liste betroffener Abonnement-Buchungen Task> GetAllAppUserSubscriptionsAsync(string appUserId, string language, string fallback); /// /// Gibt eine Liste von Abonnements zurück, welche ein App-User abonniert hat die gültig und aktiv sind /// /// App user id /// Gewünschte Sprache /// Fallback Sprache /// Liste betroffener Abonnement-Buchungen Task> GetAllAppUserSubscriptionsValidAsync(string appUserId, string language, string fallback); /// /// Gibt eine Abonnementbuchung mit Namen zurück /// /// Id der Buchung /// /// /// AppUserSubscriptionWithNames Task GetAppUserSubscriptionAsync(long id, string language, string fallback); /// /// Erstellen eines Abonnements für einen App-User /// /// Abonnement AppUserSubscription CreateAppUserSubscription(); /// /// Gibt ein App-User-Abonnement zurück /// /// AppUserSubcription id /// AppUserSubscription Task GetAppUserSubscriptionAsync(long id); /// /// Gibt ein App-User-Abonnement zurück /// /// App user id /// Abo-Id /// AppUserSubscription oder null, wenn nicht gefunden Task GetAppUserSubscriptionAsync(string appUserId, string subscriptionId); /// /// Fügt eine Entität zum Repository hinzu /// /// Entität void AddAppUserSubscription(AppUserSubscription entity); /// /// Entfernt eine Entität aus dem Repository /// /// Zu entfernende Entität void RemoveAppUserSubscription(AppUserSubscription entity); /// /// Prüft ob ein App-User ein Abonnement hat für einen AppMode das noch gültig ist /// /// App user id /// AppMode /// true wenn ja, false else Task AppUserHasActiveBookingAsync(string appUserId, AppMode appMode); /// /// Setzt Abo-Buchungen die abgelaufen sind auf ungültig /// /// Task InvalidateExipredAppUserSubscriptionsAsync(DateTimeOffset date); } #region Helper /// /// Repräsentiert ein Validierungsergebnis für die Prüfung ob eine Listung möglich ist /// public class ListingValidationResult { /// /// Validierung erfolgreich oder nicht? /// public bool Valid { get; set; } /// /// Wie viele Listungen für die Branche, den Listungstyp und den gewählten Zeitraum liegen vor /// public int Booked { get; set; } /// /// Wie viele Reservierungen liegen vor? /// public int Reserved { get; set; } /// /// Fehlercode, wenn nicht valide /// public ListingValidationError ErrorCode { get; set; } } /// /// Validierungsfehler für die Prüfung ob eine Listung durchgeführt werden kann /// public enum ListingValidationError { /// /// Kein FEhler /// None = 0, /// /// Listung nicht möglich da Kapazitäten verbraucht /// NoSlotsAvailable = 1, /// /// Vom Kunden bereits gebucht /// AlreadyBooked = 10 } /// /// Ergebnis einer Steuerberechnung /// public class TaxGrossResult { /// /// Berechneter Wert /// public decimal Value { get; set; } /// /// Steuerstufe - z.B. 10% oder 20% /// public decimal TaxRate { get; set; } /// /// Wert für die Steuerstufe /// public decimal TaxValue { get; set; } } #endregion }