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);
///