Skip to content

Commit

Permalink
Fixing Issues
Browse files Browse the repository at this point in the history
  • Loading branch information
tomp736 committed Nov 17, 2020
1 parent f694e8b commit c475038
Show file tree
Hide file tree
Showing 23 changed files with 331 additions and 123 deletions.
18 changes: 18 additions & 0 deletions bankomat.blazorclient/wwwroot/css/app.css
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,21 @@ table.keypad input{
width: 100%;
height: 100%;
}

div.terminal-screen
{
padding: 20px 0 0 0;
min-height: 120px;
vertical-align: text-top;
}

div.terminal-screen > p.title
{
font-weight: bold;
font-size: 1.4em;
}

div.terminal-screen > p.content
{
font-size: 1em;
}
2 changes: 1 addition & 1 deletion bankomat.components.bankterminal/BankTerminal.razor
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

<nav class="navbar navbar-light bg-light">
<span class="navbar-text">
TimeLeft: @timeLeft.Seconds
TimeLeft: @timeoutTimeSpan.Seconds
</span>
<span class="navbar-text">
SessionId: @bankTerminalSession.SessionId
Expand Down
108 changes: 81 additions & 27 deletions bankomat.components.bankterminal/BankTerminalBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using bankomat.components;
using bankomat.components.keypad;
using bankomat.components.terminalscreen;
using System.Threading;

namespace bankomat.components.bankterminal
{
Expand Down Expand Up @@ -32,19 +33,47 @@ protected async override Task OnInitializedAsync()
{
await bankTerminalService.StartTerminalSession();
await GoToStep(BankTerminalStep.WelcomeStepId);
timer = Timer();
await base.OnInitializedAsync();
}

public virtual async Task OnKeyPadEntry(KeyPadEntry keyPadEntry)
{
var result = bankTerminalStepViewModel.OnKeyPadEntry(keyPadEntry);
if((keyPadEntry == KeyPadEntry.Left && keyPad.KeyPadValue == string.Empty)
|| keyPadEntry == KeyPadEntry.Right)
var result = await bankTerminalStepViewModel.OnKeyPadEntry(keyPadEntry);
if(result.IsValid)
{
await ProcessStep();
}
await OnUserActivity();
await Task.CompletedTask;
if(keyPadEntry.IsCancel())
{
await ProcessCancel();
return;
}

// update timeout on number press
if(keyPadEntry.IsNumber())
{
UpdateTimeout();
}

// process step if next pressed
if(keyPadEntry.IsYes())
{
await ProcessStep();
}

// process step if back pressed when YesNoCancel
if(keyPad.KeyPadMode == KeyPadMode.YesNoCancel ||
keyPad.KeyPadMode == KeyPadMode.YesNo &&
keyPadEntry.IsNo())
{
await ProcessStep();
}

}
}

public async Task ProcessCancel()
{
await GoToStep(BankTerminalStep.ExitStepId);
}

public async Task ProcessStep()
Expand All @@ -55,32 +84,54 @@ public async Task ProcessStep()
if (validateResponse.IsValid)
{
loggerService.WriteConsole("SubmitStep");
SubmitStepResponse submitStepResponse = await SubmitStep();
if(submitStepResponse.IsValid)
SubmitStepResponse submitStepResponse = await SubmitStep();

if(submitStepResponse.NextStep != Guid.Empty)
{
alert.Clear();
loggerService.WriteConsole("GoToStep");
await GoToStep(submitStepResponse.NextStep);
}
else
{
alert.ShowAlert(AlertType.Warning, submitStepResponse.ErrorMessage);
}
}
}

public virtual async Task<ValidateStepResponse> ValidateStep()
{
var result = await bankTerminalStepViewModel.ValidateStep(keyPad.KeyPadValue);
// if(result.IsValid)
// {
// alert.Clear();
// }
// else
// {
// alert.ShowAlert(AlertType.Warning, result.ErrorMessage);
// }
return await Task.FromResult(result);
}

public virtual async Task<SubmitStepResponse> SubmitStep()
{
var result = await bankTerminalStepViewModel.SubmitStep(keyPad.KeyPadValue);
// if(result.IsValid)
// {
// alert.Clear();
// }
// else
// {
// alert.ShowAlert(AlertType.Warning, result.ErrorMessage);
// }
return await Task.FromResult(result);
}

protected async Task GoToStep(Guid stepId)
{
if(stepId != Guid.Empty)
{
bankTerminalStepViewModel = bankTerminalStepViewModelFactory.CreateViewModel(stepId);
bankTerminalStepViewModel = bankTerminalStepViewModelFactory.CreateViewModel(stepId);
if(bankTerminalStepViewModel != null)
{
if(keyPad != null)
Expand All @@ -89,33 +140,36 @@ protected async Task GoToStep(Guid stepId)
}
}
ValidationResponse = null;
}
await OnUserActivity();
}
UpdateTimeout();
StateHasChanged();
await Task.CompletedTask;
}

private Task timer = null;
protected TimeSpan timeLeft = new TimeSpan(0,0,0);
public async Task OnUserActivity()
{
timeLeft = new TimeSpan(0,0,bankTerminalStepViewModel.TimeOut);
if(timer == null || timer.IsCompleted)
{
timer = Task.Run(Timer);
await timer;
}
private Task timer;
protected TimeSpan timeoutTimeSpan = new TimeSpan(0,0,0);
public void UpdateTimeout()
{
timeoutTimeSpan = new TimeSpan(0,0,bankTerminalStepViewModel.TimeOut);
}
public async Task Timer()
{
while(timeLeft > new TimeSpan())
StateHasChanged();
// while(timeoutTimeSpan > new TimeSpan())
while(true)
{
await Task.Delay(1000);
timeLeft = timeLeft.Subtract(new TimeSpan(0,0,1));
StateHasChanged();
if(timeoutTimeSpan.Seconds > 0)
{
timeoutTimeSpan = timeoutTimeSpan.Subtract(new TimeSpan(0,0,1));
StateHasChanged();
}
if(timeoutTimeSpan.Seconds == 0)
{
await bankTerminalStepViewModel.OnTimeout(bankTerminalService);
await GoToStep(bankTerminalStepViewModel.TimeOutStep);
}
}
await bankTerminalStepViewModel.OnTimeout(bankTerminalService);
await GoToStep(bankTerminalStepViewModel.TimeOutStep);
}
}
}
34 changes: 25 additions & 9 deletions bankomat.components.bankterminal/Services/BankTerminalService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,31 @@ public Task<bool> EndTerminalSession()
#region Card

public async Task<(bool, string, Guid)> SubmitCard(string card)
{
return await Task.FromResult((true,"", Guid.Empty));
{
bool valid = true;
string message = "";
Guid nextStep = Guid.Empty;

if(!CardValid(card))
{
message = $"Card Invalid.";
valid = false;
}
return await Task.FromResult((valid, message, nextStep));
}

public bool CardValid(string cardNumber)
{
if(cardNumber == "1111")
{
return true;
}
return false;
}

#endregion

#region Pin
public int attempt = 0;
public int maxAttempt = 3;
public async Task<(bool, string, Guid)> SubmitPin(string pin)
{
Expand All @@ -66,15 +83,15 @@ public async Task<(bool, string, Guid)> SubmitPin(string pin)
else
{
valid = false;
if(attempt >= maxAttempt)
_bankTerminalSession.PinAttempts++;
if(_bankTerminalSession.PinAttempts >= maxAttempt)
{
message = $"Invalid Pin. {maxAttempt - attempt} Tries Remaining";
nextStep = BankTerminalStep.ExitStepId;
}
}
else
{

}
message = $"Invalid Pin. {maxAttempt - _bankTerminalSession.PinAttempts} Tries Remaining";
}
}
return await Task.FromResult((valid, message, nextStep));
}
Expand All @@ -85,7 +102,6 @@ public bool PinValid(string pinNumber)
{
return true;
}
attempt++;
return false;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ namespace bankomat.components.bankterminal
public class BankTerminalSession : IBankTerminalSession
{
public Guid SessionId { get; set; }
public int PinAttempts { get; set; }

public bool Start()
{
Expand All @@ -17,6 +18,7 @@ public bool Start()
public bool End()
{
SessionId = Guid.Empty;
PinAttempts = 0;
return true;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Threading.Tasks;
using bankomat.components.keypad;

namespace bankomat.components.bankterminal
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ public interface IBankTerminalSession
{
Guid SessionId { get; set; }
bool Start();
int PinAttempts {get; set;}
bool End();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ internal BankTerminalStepViewModel(IBankTerminalService bankTerminalService)
public string AlertMessage { get; set;}
public AlertType AlertType { get; set;}


public virtual async Task OnKeyPadEntry(KeyPadEntry keyPadEntry)
public virtual async Task<KeyPadEntryResponse> OnKeyPadEntry(KeyPadEntry keyPadEntry)
{
await Task.CompletedTask;
return await Task.FromResult(new KeyPadEntryResponse() { IsValid = true });
}

public virtual async Task<ValidateStepResponse> ValidateStep(string entry)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,20 @@ internal BankTerminalCheckDoneStepViewModel(IBankTerminalService bankTerminalSer
TimeOutStep = BankTerminalStep.ExitStepId;
}

public override async Task OnKeyPadEntry(KeyPadEntry keyPadEntry)
public override async Task<KeyPadEntryResponse> OnKeyPadEntry(KeyPadEntry keyPadEntry)
{
if(keyPadEntry.IsBack())
bool isValid = false;
if(keyPadEntry.IsNo())
{
isValid = true;
IsDone = false;
}
else if(keyPadEntry.IsNext())
else if(keyPadEntry.IsYes())
{
isValid = true;
IsDone = true;
}
await Task.CompletedTask;
return await Task.FromResult(new KeyPadEntryResponse() { IsValid = isValid });
}

public bool? IsDone { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ internal BankTerminalEnterCardStepViewModel(IBankTerminalService bankTerminalSer
{
StepId = BankTerminalStep.EnterCardStepId;
Title = "Enter Card";
Content = "";
Content = "(test card: 1111)";
KeyPadMode = KeyPadMode.Password;
KeyPadMaxChars = 10;
TimeOut = 10;
TimeOutStep = BankTerminalStep.ExitStepId;
}

public async override Task<SubmitStepResponse> SubmitStep(string entry)
{
SubmitStepResponse response = new SubmitStepResponse();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ internal BankTerminalEnterPinStepViewModel(IBankTerminalService bankTerminalServ
{
StepId = BankTerminalStep.EnterPinStepId;
Title = "Enter Pin";
Content = "";
Content = "(test pin: 1234)";
KeyPadMode = KeyPadMode.Password;
KeyPadMaxChars = 4;
TimeOut = 10;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,17 @@ public BankTerminalExitStepViewModel(IBankTerminalService bankTerminalService)
StepId = BankTerminalStep.CheckDoneStepId;
Title = "Goodbye";
Content = "";
KeyPadMode = KeyPadMode.YesNo;
KeyPadMode = KeyPadMode.Disabled;
KeyPadMaxChars = 10;
TimeOut = 3;
TimeOutStep = BankTerminalStep.WelcomeStepId;
}

public override async Task<KeyPadEntryResponse> OnKeyPadEntry(KeyPadEntry keyPadEntry)
{
return await Task.FromResult(new KeyPadEntryResponse() { IsValid = false });
}

public async override Task<SubmitStepResponse> SubmitStep(string entry)
{
SubmitStepResponse response = new SubmitStepResponse();
Expand Down
Loading

0 comments on commit c475038

Please sign in to comment.