174 lines
8.6 KiB
C#

using gehGassi.Dto;
using gehGassiApp.Domain.Authentication;
using gehGassiApp.Domain.Common;
using gehGassiApp.Domain.Users;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace gehGassiApp.Core.Interfaces
{
/// <summary>
/// Schnittstellenbeschreibung für einen Service der alle Funktionen rund um die Accountverwaltung bietet
/// </summary>
public interface IAccountService
{
/// <summary>
/// Prüfen ob ein Benutzername noch verfügbar ist und ob das Passwort den Regeln entspricht.
/// </summary>
/// <param name="userName">Benutzername</param>
/// <param name="password">Passwort</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<bool>> RegisterCheckAvailableAsync(string userName, string password, CancellationToken token);
/// <summary>
/// Prüfen ob ein Passwort den Regeln entspricht
/// </summary>
/// <param name="password">Zu prüfendes Passwort</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<bool>> CheckPasswordAsync(string password, CancellationToken token);
/// <summary>
/// Registrieren eines App-Users
/// </summary>
/// <param name="userName">Benutzername</param>
/// <param name="password">Passwort</param>
/// <param name="country">Land</param>
/// <param name="token">CancellationToken</param>
/// <param name="appUserType">AppUser-Typ</param>
/// <param name="firstName">Vorname</param>
/// <param name="lastName">Nachname</param>
/// <param name="birthDate">Geburtsdatum</param>
/// <param name="zip">PLZ</param>
/// <param name="city">Ort</param>
/// <param name="state">Bundesland</param>
/// <param name="nationality">Nationalität</param>
/// <param name="mainResidence">Land Hauptwohnsitz</param>
/// <returns>true wenn alles passt, false sonst</returns>
Task<CommunicationResult<bool>> RegisterAsync(string userName, string password, AppUserType appUserType, string firstName, string lastName, DateTimeOffset? birthDate, string zip, string city, string state, string country, string nationality, string mainResidence, CancellationToken token);
/// <summary>
/// Registrieren eines App-Users - Extern
/// </summary>
/// <param name="userName">Benutzername</param>
/// <param name="password">Passwort</param>
/// <param name="country">Land</param>
/// <param name="loginProvider">Login-Provider</param>
/// <param name="token">CancellationToken</param>
/// <param name="appUserType">AppUser-Typ</param>
/// <param name="firstName">Vorname</param>
/// <param name="lastName">Nachname</param>
/// <param name="birthDate">Geburtsdatum</param>
/// <param name="zip">PLZ</param>
/// <param name="city">Ort</param>
/// <param name="state">Bundesland</param>
/// <param name="accessToken">Token des externen Providers</param>
/// <param name="nationality">Nationalität</param>
/// <param name="mainResidence">Land Hauptwohnsitz</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<User>> RegisterExternalAsync(string userName, string password, AppUserType appUserType, string firstName, string lastName, DateTimeOffset? birthDate, string zip, string city, string state, string country, string nationality, string mainResidence, string accessToken, string loginProvider, CancellationToken token);
/// <summary>
/// Anmelden eines Benutzers
/// </summary>
/// <param name="userName">Benutzername</param>
/// <param name="password">Passwort</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<User>> LoginAsync(string userName, string password, CancellationToken token);
/// <summary>
/// Anmelden eines Benutzers mittels externem Provider. Wer es ist wird über das Token bestimmt
/// </summary>
/// <param name="accessToken">Access-Token</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<User>> LoginExternalAsync(string accessToken, CancellationToken token);
/// <summary>
/// Anmelden eines Benutzers mittels Apple Provider
/// </summary>
/// <param name="dto">bjekt mit benötigten Login-Daten</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<User>> LoginAppleAsync(LoginAppleDto dto, CancellationToken token);
/// <summary>
/// Abmelden eines Benutzers.
/// Löscht alle Refreshtokens des Benutzers
/// </summary>
/// <param name="accessToken">Access-Token</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<bool>> LogoutAsync(string accessToken, CancellationToken token);
/// <summary>
/// Zurücksetzen des Passworts eines Benutzers
/// </summary>
/// <param name="userName">Benutzername / Email</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<bool>> ResetPasswordAsync(string userName, CancellationToken token);
/// <summary>
/// Senden der E-Mail Bestätigung für einen Benutzer
/// </summary>
/// <param name="userName">Benutzername / Email</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<bool>> ResendConfirmationAsync(string userName, CancellationToken token);
/// <summary>
/// Anmelden eines Benutzers mittels Refreshtoken
/// </summary>
/// <param name="accessToken">Aktuelles Accesstoken</param>
/// <param name="refreshToken">Refreshtoken</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<TokenResponse>> RefreshTokenAsync(string accessToken, string refreshToken, CancellationToken token);
/// <summary>
/// Prüfen ob ein Benutzer ein Passwort hat
/// </summary>
/// <param name="accessToken">Aktuelles Accesstoken</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<bool>> HasPasswordAsync(string accessToken, CancellationToken token);
/// <summary>
/// Hinzufügen eines Passswortes zu einem Benutzer, wenn dieser keines hat
/// </summary>
/// <param name="userName">Benutzername</param>
/// <param name="password">Passwort das hinzugefügt werden soll</param>
/// <param name="accessToken">Aktuelles Accesstoken</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<bool>> AddPasswordAsync(string userName, string password, string accessToken, CancellationToken token);
/// <summary>
/// Ändern des Passwortes eines Benutzers
/// </summary>
/// <param name="userName">Benutzername</param>
/// <param name="password">Passwort das gesetzt werden soll</param>
/// <param name="oldPassword">Bisheriges Passwort</param>
/// <param name="accessToken">Aktuelles Accesstoken</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<bool>> ChangePasswordAsync(string userName, string password, string oldPassword, string accessToken, CancellationToken token);
/// <summary>
/// Löschen des Accounts eines Benutzers
/// </summary>
/// <param name="userName">Benutzername</param>
/// <param name="userId">Id des Benutzers</param>
/// <param name="accessToken">Aktuelles Accesstoken</param>
/// <param name="token">CancellationToken</param>
/// <returns>CommunicationResult</returns>
Task<CommunicationResult<bool>> DeleteAccountAsync(string userName, string userId, string accessToken, CancellationToken token);
}
}