mirror of
https://dev.azure.com/TeilRad/sharee.bike%20App/_git/Code
synced 2025-06-22 05:47:28 +02:00
Version 3.0.364
This commit is contained in:
parent
91d42552c7
commit
0b9196a78d
91 changed files with 3452 additions and 555 deletions
|
@ -34,7 +34,7 @@ namespace TINK.Services.CopriApi
|
|||
}
|
||||
|
||||
/// <summary> Opens lock.</summary>
|
||||
/// <param name="corpiServer"> Instance to communicate with backend.</param>
|
||||
/// <param name="cachedServer"> Instance to communicate with backend.</param>
|
||||
/// <param name="bike">Bike object holding id of bike to open. Lock state of object is updated after open request.</param>
|
||||
public static async Task OpenAync(
|
||||
this ICachedCopriServer cachedServer,
|
||||
|
@ -70,11 +70,11 @@ namespace TINK.Services.CopriApi
|
|||
/// <summary>
|
||||
/// Books a bike and opens the lock.
|
||||
/// </summary>
|
||||
/// <param name="corpiServer"> Instance to communicate with backend.</param>
|
||||
/// <param name="copriServer"> Instance to communicate with backend.</param>
|
||||
/// <param name="bike">Bike to book and open.</param>
|
||||
/// <param name="mailAddress">Mail address of user which books bike.</param>
|
||||
public static async Task BookAndOpenAync(
|
||||
this ICopriServerBase corpiServer,
|
||||
this ICopriServerBase copriServer,
|
||||
IBikeInfoMutable bike,
|
||||
string mailAddress)
|
||||
{
|
||||
|
@ -83,13 +83,13 @@ namespace TINK.Services.CopriApi
|
|||
throw new ArgumentNullException(nameof(bike), "Can not book bike and open lock. No bike object available.");
|
||||
}
|
||||
|
||||
if (!(corpiServer is ICachedCopriServer cachedServer))
|
||||
throw new ArgumentNullException(nameof(corpiServer));
|
||||
if (!(copriServer is ICachedCopriServer cachedServer))
|
||||
throw new ArgumentNullException(nameof(copriServer));
|
||||
|
||||
// Send command to open lock
|
||||
var response = bike.State.Value == Model.State.InUseStateEnum.Disposable
|
||||
? (await corpiServer.BookAvailableAndStartOpeningAsync(bike.Id, bike.OperatorUri)).GetIsBookingResponseOk(bike.Id)
|
||||
: (await corpiServer.BookReservedAndStartOpeningAsync(bike.Id, bike.OperatorUri)).GetIsBookingResponseOk(bike.Id);
|
||||
? (await copriServer.BookAvailableAndStartOpeningAsync(bike.Id, bike.OperatorUri)).GetIsBookingResponseOk(bike.Id)
|
||||
: (await copriServer.BookReservedAndStartOpeningAsync(bike.Id, bike.OperatorUri)).GetIsBookingResponseOk(bike.Id);
|
||||
|
||||
// Upated locking state.
|
||||
var lockingState = await cachedServer.GetOccupiedBikeLockStateAsync(bike.Id);
|
||||
|
@ -128,17 +128,17 @@ namespace TINK.Services.CopriApi
|
|||
/// <summary>
|
||||
/// Returns a bike and closes the lock.
|
||||
/// </summary>
|
||||
/// <param name="corpiServer"> Instance to communicate with backend.</param>
|
||||
/// <param name="copriServer"> Instance to communicate with backend.</param>
|
||||
/// <param name="bike">Bike to close.</param>
|
||||
public static async Task CloseAync(
|
||||
this ICopriServerBase corpiServer,
|
||||
this ICopriServerBase copriServer,
|
||||
IBikeInfoMutable bike)
|
||||
{
|
||||
if (!(corpiServer is ICachedCopriServer cachedServer))
|
||||
throw new ArgumentNullException(nameof(corpiServer));
|
||||
if (!(copriServer is ICachedCopriServer cachedServer))
|
||||
throw new ArgumentNullException(nameof(copriServer));
|
||||
|
||||
// Send command to close lock
|
||||
await corpiServer.UpdateLockingStateAsync(
|
||||
await copriServer.UpdateLockingStateAsync(
|
||||
bike.Id,
|
||||
Repository.Request.lock_state.locking,
|
||||
bike.OperatorUri);
|
||||
|
@ -166,20 +166,20 @@ namespace TINK.Services.CopriApi
|
|||
/// <summary>
|
||||
/// Returns a bike and closes the lock.
|
||||
/// </summary>
|
||||
/// <param name="corpiServer"> Instance to communicate with backend.</param>
|
||||
/// <param name="copriServer"> Instance to communicate with backend.</param>
|
||||
/// <param name="smartDevice">Smart device on which app runs on.</param>
|
||||
/// <param name="mailAddress">Mail address of user which books bike.</param>
|
||||
public static async Task<BookingFinishedModel> ReturnAndCloseAync(
|
||||
this ICopriServerBase corpiServer,
|
||||
this ICopriServerBase copriServer,
|
||||
ISmartDevice smartDevice,
|
||||
IBikeInfoMutable bike)
|
||||
{
|
||||
if (!(corpiServer is ICachedCopriServer cachedServer))
|
||||
throw new ArgumentNullException(nameof(corpiServer));
|
||||
if (!(copriServer is ICachedCopriServer cachedServer))
|
||||
throw new ArgumentNullException(nameof(copriServer));
|
||||
|
||||
// Send command to open lock
|
||||
DoReturnResponse response =
|
||||
await corpiServer.ReturnAndStartClosingAsync(bike.Id, bike.OperatorUri);
|
||||
await copriServer.ReturnAndStartClosingAsync(bike.Id, bike.OperatorUri);
|
||||
|
||||
// Upate booking state
|
||||
bike.Load(Model.Bikes.BikeInfoNS.BC.NotifyPropertyChangedLevel.None);
|
||||
|
@ -209,21 +209,21 @@ namespace TINK.Services.CopriApi
|
|||
/// <summary>
|
||||
/// Queries the locking state from copri.
|
||||
/// </summary>
|
||||
/// <param name="corpiServer">Service to use.</param>
|
||||
/// <param name="copriServer">Service to use.</param>
|
||||
/// <param name="bikeId">Bike id to query lock state for.</param>
|
||||
/// <returns>Locking state</returns>
|
||||
private static async Task<LockingState> GetLockStateAsync(
|
||||
this ICachedCopriServer corpiServer,
|
||||
this ICachedCopriServer copriServer,
|
||||
string bikeId)
|
||||
{
|
||||
// Querry reserved or booked bikes first for performance reasons.
|
||||
var bikeReservedOrBooked = (await corpiServer.GetBikesOccupied(false))?.Response.bikes_occupied?.Values?.FirstOrDefault(x => x.bike == bikeId);
|
||||
var bikeReservedOrBooked = (await copriServer.GetBikesOccupied(false))?.Response.bikes_occupied?.Values?.FirstOrDefault(x => x.bike == bikeId);
|
||||
if (bikeReservedOrBooked != null)
|
||||
{
|
||||
return bikeReservedOrBooked.GetCopriLockingState();
|
||||
}
|
||||
|
||||
var bikeAvailable = (await corpiServer.GetBikesAvailable(false))?.Response.bikes?.Values?.FirstOrDefault(x => x.bike == bikeId);
|
||||
var bikeAvailable = (await copriServer.GetBikesAvailable(false))?.Response.bikes?.Values?.FirstOrDefault(x => x.bike == bikeId);
|
||||
if (bikeAvailable != null)
|
||||
{
|
||||
return bikeAvailable.GetCopriLockingState();
|
||||
|
@ -235,14 +235,14 @@ namespace TINK.Services.CopriApi
|
|||
/// <summary>
|
||||
/// Queries the locking state of a occupied bike from copri.
|
||||
/// </summary>
|
||||
/// <param name="corpiServer">Service to use.</param>
|
||||
/// <param name="copriServer">Service to use.</param>
|
||||
/// <param name="bikeId">Bike id to query lock state for.</param>
|
||||
/// <returns>Locking state if bike is still occupied, null otherwise.</returns>
|
||||
private static async Task<LockingState?> GetOccupiedBikeLockStateAsync(
|
||||
this ICachedCopriServer corpiServer,
|
||||
this ICachedCopriServer copriServer,
|
||||
string bikeId)
|
||||
{
|
||||
var bikeReservedOrBooked = (await corpiServer.GetBikesOccupied(false))?.Response.bikes_occupied?.Values?.FirstOrDefault(x => x.bike == bikeId);
|
||||
var bikeReservedOrBooked = (await copriServer.GetBikesOccupied(false))?.Response.bikes_occupied?.Values?.FirstOrDefault(x => x.bike == bikeId);
|
||||
if (bikeReservedOrBooked != null)
|
||||
{
|
||||
return bikeReservedOrBooked.GetCopriLockingState();
|
||||
|
|
|
@ -3,15 +3,37 @@ using TINK.Model.Stations;
|
|||
|
||||
namespace TINK.Model.Services.CopriApi
|
||||
{
|
||||
/// <summary>
|
||||
/// Holds stations and bikes.
|
||||
/// </summary>
|
||||
public class StationsAndBikesContainer
|
||||
{
|
||||
public StationsAndBikesContainer(StationDictionary stations, BikeCollection bikes)
|
||||
/// <summary>
|
||||
/// Holds station and bikes.
|
||||
/// </summary>
|
||||
/// <param name="stations">Stations information which contains some information about bikes available at each station (bike count, ...).</param>
|
||||
/// <param name="bikesOccupied"></param>
|
||||
public StationsAndBikesContainer(StationDictionary stations, BikeCollection bikesOccupied)
|
||||
{
|
||||
StationsAll = stations;
|
||||
Bikes = bikes;
|
||||
BikesOccupied = bikesOccupied;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Holds all stations.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Since copri version writing <see cref="StationType"/> (>= 4.1.23.03) stations contain bikes available information.
|
||||
/// Prior to this copri version bikes available were part of <see cref="BikesOccupied"/>
|
||||
/// </remarks>
|
||||
public StationDictionary StationsAll { get; }
|
||||
|
||||
public BikeCollection Bikes { get; }
|
||||
/// <summary>
|
||||
/// Holds bikes occupied (i.e. bike reserved or booked).
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Up to copri version writing <see cref="StationType"/> (>= 4.1.23.03) bike available were contained beside bikes occupied.
|
||||
/// </remarks>
|
||||
public BikeCollection BikesOccupied { get; }
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue