201 lines
10 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using gehGassi.Dto;
using gehGassi.Dto.Common;
using gehGassi.Dto.DogWalkers;
using gehGassiApp.Core.Interfaces.Synchronization;
using gehGassiApp.Domain.Common;
using gehGassiApp.Domain.Users;
namespace gehGassiApp.Core.Interfaces
{
/// <summary>
/// Schnittstellenbeschreibung für einen Service der die Verwaltung des Benutzers ermöglicht
/// </summary>
public interface IUserService : IService<User>, ISyncPushPullService<AppUser>
{
/// <summary>
/// Gibt den aktuellen Benutzer zurück
/// </summary>
/// <returns>Aktueller Benutzer oder null, wenn noch keiner vorhanden</returns>
Task<User> GetAsync();
/// <summary>
/// Hinzufügen oder aktualisieren des Benutzers
/// </summary>
/// <param name="user">Benutzer der hinzugefügt oder aktualisiert werden soll</param>
/// <returns>User</returns>
Task<User> CreateOrUpdateAsync(User user);
/// <summary>
/// Prüft für einen übergebenen Benutzernamen ob es sich um den gespeicherten Benutzer handelt
/// </summary>
/// <param name="userName">Benutzername (E-Mail Adresse)</param>
/// <returns>UserCheckResult</returns>
Task<UserCheckResult> CheckAsync(string userName);
/// <summary>
/// Gibt den aktuellen App-User zurück.
/// </summary>
/// <returns>AppUser oder null wenn nicht gefunden</returns>
Task<AppUser> GetAppUserAsync();
/// <summary>
/// Gibt den aktuellen App-User zurück.
/// </summary>
/// <param name="noTracking">Tracking</param>
/// <returns>AppUser oder null wenn nicht gefunden</returns>
Task<AppUser> GetAppUserAsync(bool noTracking);
/// <summary>
/// Gibt den aktuellen App-User zurück.
/// Versucht auch online - wenn lokal nicht vorhanden
/// </summary>
/// <param name="accessToken">Aktuelles Accesstoken</param>
/// <param name="token">CancellationToken</param>
/// <param name="forceOnline">Wenn true, wird in jedem Fall die Online-Abfrage verwendet</param>
/// <returns>AppUser oder null wenn nicht gefunden</returns>
Task<AppUser> GetAppUserAsync(string accessToken, CancellationToken token, bool forceOnline);
/// <summary>
/// Hinzufügen oder aktualisieren eines App-Users
/// </summary>
/// <param name="appUser">App-User</param>
/// <returns>AppUser</returns>
Task<AppUser> CreateOrUpdateAppUserAsync(AppUser appUser);
/// <summary>
/// Aktualisieren eines App-Users.
/// Online wird versucht. Wenn nicht möglich wird ein Delta erstellt.
/// </summary>
/// <param name="appUser">App-User</param>
/// <param name="accessToken">Aktuelles Accesstoken</param>
/// <param name="token">CancellationToken</param>
/// <returns>App-User</returns>
Task<AppUser> UpdateAppUserAsync(AppUser appUser, string accessToken, CancellationToken token);
/// <summary>
/// Setzen des App-User Types für einen AppUser.
/// Immer online und nur wenn erfolgreich auch ein Update lokal!
/// </summary>
/// <param name="appUserId">Id des AppUsers</param>
/// <param name="appUserType">Typ der gesetzt werden soll</param>
/// <param name="accessToken">Aktuelles Accesstoken</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<bool>> SetAppUserTypeAsync(string appUserId, AppUserType appUserType, string accessToken, CancellationToken token);
/// <summary>
/// Setzen des App-User Types für einen AppUser.
/// Immer online und nur wenn erfolgreich auch ein Update lokal!
/// </summary>
/// <param name="appUserId">Id des AppUsers</param>
/// <param name="appUserType">Typ der gesetzt werden soll</param>
/// <param name="nationality">Nationalität</param>
/// <param name="mainResidence">Land des Hauptwohnsitzes</param>
/// <param name="paymentTermsAccepted">AGB Paymentprovider akzeptiert</param>
/// <param name="accessToken">Aktuelles Accesstoken</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<bool>> SetAppUserTypeAsync(string appUserId, AppUserType appUserType, string nationality, string mainResidence, bool paymentTermsAccepted, string accessToken, CancellationToken token);
/// <summary>
/// Hinzufügen eines Payment-Users. Für Hundebesitzer wenn sie noch keine PaymentId haben
/// </summary>
/// <param name="appUserId">Id des AppUsers</param>
/// <param name="nationality">Nationalität</param>
/// <param name="mainResidence">Land des Hauptwohnsitzes</param>
/// <param name="paymentTermsAccepted">AGB Paymentprovider akzeptiert</param>
/// <param name="accessToken">Aktuelles Accesstoken</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<bool>> AddPaymentUserAsync(string appUserId, string nationality, string mainResidence, bool paymentTermsAccepted, string accessToken, CancellationToken token);
/// <summary>
/// Setzen der Bankverbindungs-ID für einen AppUser.
/// </summary>
/// <param name="appUserId">Id des App-Users</param>
/// <param name="bankId">ID der Bankverbindung</param>
/// <param name="updatedAt">Datum letzte Aktualisierung</param>
/// <returns>App-User</returns>
Task<AppUser> SetBankAccountAsync(string appUserId, string bankId, DateTimeOffset updatedAt);
/// <summary>
/// Blockieren eines App-Users am Server
/// </summary>
/// <param name="appUserId">Id des App-Users der die Blockierung vornimmt</param>
/// <param name="blockedAppUserId">Id des App-Users der blockiert wird</param>
/// <param name="accessToken">Aktuelles Accesstoken</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<bool>> BlockAppUserAsync(string appUserId, string blockedAppUserId, string accessToken, CancellationToken token);
/// <summary>
/// Aufheben der Blockierung eines App-Users am Server
/// </summary>
/// <param name="appUserId">Id des App-Users der die Blockierung vorgenommen hat</param>
/// <param name="blockedAppUserId">Id des App-Users dessen Blockierung aufgehoben wird</param>
/// <param name="accessToken">Aktuelles Accesstoken</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<bool>> UnblockAppUserAsync(string appUserId, string blockedAppUserId, string accessToken, CancellationToken token);
/// <summary>
/// Holen von blockierten App-Usern
/// </summary>
/// <param name="query">Abfrageobjekt</param>
/// <param name="location">Aktuelle Position</param>
/// <param name="accessToken">Aktuelles Accesstoken</param>
/// <param name="token">CancellationToken</param>
/// <returns>ListCommunicationResult</returns>
Task<ListCommunicationResult<List<AppUserBlockWithNames>>> GetBlockedAppUsersAsync(BlockedQueryDto query, LocationDto location, string accessToken, CancellationToken token);
/// <summary>
/// Melden eines App-Users durch einen anderen bei Verfehlungen oder anstößigen Inhalten
/// </summary>
/// <param name="appUserId">Id des App-Users der die Meldung vornimmt</param>
/// <param name="reportedAppUserId">Id des App-Users der gemeldet wird</param>
/// <param name="section">Betroffener Bereich</param>
/// <param name="sectionId">Id des Bereichs</param>
/// <param name="sectionId2">Optional: zweite Id falls nötig</param>
/// <param name="reportedImage">Bild beanstanded</param>
/// <param name="reportedName">Name beanstanded</param>
/// <param name="reportedText">Text beanstanded</param>
/// <param name="reportedMessage">Nachricht beanstanded</param>
/// <param name="reportedAddress">Adresse beanstanded</param>
/// <param name="type">Typ der Meldung</param>
/// <param name="email">Email-Adresse des meldenen Benutzers für Kontaktaufnahme</param>
/// <param name="comment">Anmerkungen des meldenden Benutzers</param>
/// <param name="message">Chat-Nachricht wenn es eine betrifft</param>
/// <param name="blockType">Art der bBlockierung</param>
/// <param name="contactAllowed">Darf für Rückfragen kontaktiert werden</param>
/// <param name="accessToken">Aktuelles Accesstoken</param>
/// <param name="token">CancellationToken</param>
/// <returns>ListCommunicationResult</returns>
Task<CommunicationResult<bool>> ReportAppUserAsync(string appUserId, string reportedAppUserId, AppUserReportSection section, string sectionId, string sectionId2, bool reportedImage, bool reportedName,
bool reportedText, bool reportedMessage, bool reportedAddress, AppUserReportType type, string email, string comment, string message, AppUserReportBlockType blockType, bool contactAllowed, string accessToken, CancellationToken token);
}
/// <summary>
/// Ergebnis des Prüfens auf den Benutzer
/// </summary>
public enum UserCheckResult
{
/// <summary>
/// Es wurde noch kein Benutzer angelegt
/// </summary>
Empty = 0,
/// <summary>
/// Es handelt sich um den gespeicherten Benutzer
/// </summary>
IsCurrentUser = 1,
/// <summary>
/// Der gespeicherte Benutzer stimmt nicht überein
/// </summary>
IsOtherUser = 2
}
}