sharee.bike-App/TINKLib/Model/Connector/Command/Command.cs

156 lines
6.1 KiB
C#
Raw Normal View History

2021-05-13 20:03:07 +02:00
using Serilog;
using System;
using System.Threading.Tasks;
2021-06-26 20:57:55 +02:00
using TINK.Repository;
using TINK.Repository.Request;
using TINK.Repository.Response;
2021-05-13 20:03:07 +02:00
using TINK.Model.User.Account;
2021-06-26 20:57:55 +02:00
using TINK.Model.Device;
2021-08-01 17:24:15 +02:00
using System.Collections.Generic;
using TINK.Model.MiniSurvey;
2021-05-13 20:03:07 +02:00
namespace TINK.Model.Connector
{
public class Command : Base, ICommand
{
/// <summary> True if connector has access to copri server, false if cached values are used. </summary>
public bool IsConnected => CopriServer.IsConnected;
/// <summary> No user is logged in.</summary>
public string SessionCookie => null;
/// <summary> Is raised whenever login state has changed.</summary>
public event LoginStateChangedEventHandler LoginStateChanged;
/// <summary>Constructs a copri query object.</summary>
/// <param name="p_oCopriServer">Server which implements communication.</param>
public Command(
ICopriServerBase p_oCopriServer) : base(p_oCopriServer)
{
}
/// <summary>
/// Logs user in.
/// If log in succeeds either and session might be updated if it was no more valid (logged in by an different device).
/// If log in fails (password modified) session cookie is set to empty.
/// If communication fails an exception is thrown.
/// </summary>
public async Task<IAccount> DoLogin(
2021-11-08 23:11:56 +01:00
string mail,
string password,
string deviceId)
2021-05-13 20:03:07 +02:00
{
2021-11-08 23:11:56 +01:00
if (string.IsNullOrEmpty(mail))
2021-05-13 20:03:07 +02:00
{
throw new ArgumentNullException("Can not loging user. Mail address must not be null or empty.");
}
2021-11-08 23:11:56 +01:00
if (string.IsNullOrEmpty(password))
2021-05-13 20:03:07 +02:00
{
throw new ArgumentNullException("Can not loging user. Password must not be null or empty.");
}
2021-11-08 23:11:56 +01:00
if (string.IsNullOrEmpty(deviceId))
2021-05-13 20:03:07 +02:00
{
throw new ArgumentNullException("Can not loging user. Device not be null or empty.");
}
2021-11-08 23:11:56 +01:00
AuthorizationResponse response;
2021-05-13 20:03:07 +02:00
try
{
2021-11-08 23:11:56 +01:00
response = (await CopriServer.DoAuthorizationAsync(mail, password, deviceId)).GetIsResponseOk(mail);
2021-05-13 20:03:07 +02:00
}
catch (System.Exception)
{
throw;
}
2021-11-08 23:11:56 +01:00
var l_oAccount = response.GetAccount(MerchantId, mail, password);
2021-05-13 20:03:07 +02:00
// Log in state changes. Notify parent object to update.
LoginStateChanged?.Invoke(this, new LoginStateChangedEventArgs(l_oAccount.SessionCookie, l_oAccount.Mail));
return l_oAccount;
}
/// <summary> Logs user out. </summary>
public async Task DoLogout()
{
Log.ForContext<Command>().Error("Unexpected log out request detected. No user logged in.");
await Task.CompletedTask;
}
/// <summary>
/// Request to reserve a bike.
/// </summary>
2021-11-08 23:11:56 +01:00
/// <param name="bike">Bike to book.</param>
2021-05-13 20:03:07 +02:00
public async Task DoReserve(
2021-11-08 23:11:56 +01:00
Bikes.Bike.BC.IBikeInfoMutable bike)
2021-05-13 20:03:07 +02:00
{
Log.ForContext<Command>().Error("Unexpected booking request detected. No user logged in.");
await Task.CompletedTask;
}
/// <summary> Request to cancel a reservation.</summary>
/// <param name="p_oBike">Bike to book.</param>
public async Task DoCancelReservation(Bikes.Bike.BC.IBikeInfoMutable bike)
{
Log.ForContext<Command>().Error("Unexpected cancel reservation request detected. No user logged in.");
await Task.CompletedTask;
}
/// <summary> Get authentication keys.</summary>
/// <param name="bike">Bike to book.</param>
public async Task CalculateAuthKeys(Bikes.Bike.BluetoothLock.IBikeInfoMutable bike)
{
Log.ForContext<Command>().Error("Unexpected request to get authenticatin keys detected. No user logged in.");
await Task.CompletedTask;
}
/// <summary> Updates COPRI lock state for a booked bike. </summary>
/// <param name="bike">Bike to update locking state for.</param>
/// <param name="location">Location where lock was opened/ changed.</param>
/// <returns>Response on updating locking state.</returns>
public async Task UpdateLockingStateAsync(Bikes.Bike.BluetoothLock.IBikeInfoMutable bike, LocationDto location)
{
Log.ForContext<Command>().Error("Unexpected request to update locking state detected. No user logged in.");
await Task.CompletedTask;
}
public async Task DoBook(Bikes.Bike.BluetoothLock.IBikeInfoMutable bike)
{
Log.ForContext<Command>().Error("Unexpected booking request detected. No user logged in.");
await Task.CompletedTask;
}
2022-01-04 18:54:03 +01:00
public async Task<BookingFinishedModel> DoReturn(
2021-05-13 20:03:07 +02:00
Bikes.Bike.BluetoothLock.IBikeInfoMutable bike,
2021-06-26 20:57:55 +02:00
LocationDto location,
ISmartDevice smartDevice)
2021-05-13 20:03:07 +02:00
{
Log.ForContext<Command>().Error("Unexpected returning request detected. No user logged in.");
2022-01-04 18:54:03 +01:00
return await Task.FromResult(new BookingFinishedModel());
2021-05-13 20:03:07 +02:00
}
/// <summary>
/// Submits feedback to copri server.
/// </summary>
/// <param name="userFeedback">Feedback to submit.</param>
2021-06-26 20:57:55 +02:00
#if USCSHARP9
2021-05-13 20:03:07 +02:00
public async Task DoSubmitFeedback(ICommand.IUserFeedback userFeedback, Uri opertorUri)
2021-06-26 20:57:55 +02:00
#else
public async Task DoSubmitFeedback(IUserFeedback userFeedback, Uri opertorUri)
#endif
2021-05-13 20:03:07 +02:00
{
Log.ForContext<Command>().Error("Unexpected submit feedback request detected. No user logged in.");
await Task.CompletedTask;
}
2021-08-01 17:24:15 +02:00
/// <summary> Submits mini survey to copri server. </summary>
/// <param name="answers">Collection of answers.</param>
public async Task DoSubmitMiniSurvey(IDictionary<string, string> answers)
{
Log.ForContext<Command>().Error("Unexpected submit mini survey request detected. No user logged in.");
await Task.CompletedTask;
}
2021-05-13 20:03:07 +02:00
}
}