Initial commit
This commit is contained in:
+31
@@ -0,0 +1,31 @@
|
||||
using AutoBet.DataRecorded.RaceResultsDataCollector;
|
||||
using BritishHorseRacingApi;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using SwiftyMessageHub.Core;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AutoBet.DataRecorded.MessageControllers
|
||||
{
|
||||
public class PostRaceDataCollectorController : MessageController
|
||||
{
|
||||
[MessageRoute]
|
||||
public async Task LoadRaces(PostRaceDataCollectorDetails details)
|
||||
{
|
||||
var api = new ApiClient();
|
||||
Console.WriteLine("Loading races");
|
||||
using (var db = new Db.HorseRacingDataContext())
|
||||
{
|
||||
var results = await db.Races.Where(e => e.RaceDate.Date == details.DateToCollect.Date)
|
||||
.Where(e => !db.RunnerResults.Any(e1 => e1.RaceId == e.RaceId))
|
||||
.ToListAsync();
|
||||
|
||||
foreach (var result in results)
|
||||
{
|
||||
await CurrentContext.Hub.SendMessage(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
using BritishHorseRacingApi;
|
||||
using BritishHorseRacingApi.Models;
|
||||
using SwiftyMessageHub.Core;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AutoBet.DataRecorded.MessageControllers
|
||||
{
|
||||
public class PostRaceRunnerCollectorController : MessageController
|
||||
{
|
||||
private static SemaphoreSlim _semaphore = new SemaphoreSlim(1);
|
||||
[MessageRoute]
|
||||
public async Task LoadRaces(Db.Race details)
|
||||
{
|
||||
var api = new ApiClient();
|
||||
Console.WriteLine($"Getting results for race {details.RaceId}");
|
||||
_semaphore.Wait();
|
||||
PagedResult<RunnerResult> results;
|
||||
try
|
||||
{
|
||||
results = await api.GetRaceResults(details.RaceDate.Year, details.RaceId, details.DivisionSequence);
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
_semaphore.Release();
|
||||
}
|
||||
foreach (var result in results.Data)
|
||||
{
|
||||
await CurrentContext.Hub.SendMessage(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
using BritishHorseRacingApi.Models;
|
||||
using SwiftyMessageHub.Core;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AutoBet.DataRecorded.MessageControllers
|
||||
{
|
||||
public class PostRaceRunnerResultRecorderController : MessageController
|
||||
{
|
||||
[MessageRoute]
|
||||
public async Task SaveRunnerResult(RunnerResult details)
|
||||
{
|
||||
Console.WriteLine($"Saving results for {details.RacehorseName}");
|
||||
var dbRunnerResult = new Db.RunnerResult()
|
||||
{
|
||||
RaceId = details.RaceId,
|
||||
YearOfRace = details.YearOfRace,
|
||||
DivisionSequence = details.DivisionSequence,
|
||||
HorseId = details.HorseId,
|
||||
AnimalId = details.AnimalId,
|
||||
ResultFinishPos = details.ResultFinishPos,
|
||||
Status = details.Status,
|
||||
Ran = details.Ran,
|
||||
NonRunnerDeclaredReason = details.NonRunnerDeclaredReason,
|
||||
NonRunnerDeclaredDate = details.NonRunnerDeclaredDate,
|
||||
NonRunnerDeclaredTime = details.NonRunnerDeclaredTime,
|
||||
RacehorseName = details.RacehorseName,
|
||||
AgeYear = details.AgeYear,
|
||||
Bred = details.Bred,
|
||||
ClothNumber = details.ClothNumber,
|
||||
DrawnStall = details.DrawnStall,
|
||||
WeightValue = details.WeightValue,
|
||||
SexType = details.SexType,
|
||||
JockeyId = details.JockeyId,
|
||||
JockeyName = details.JockeyName,
|
||||
JockeyProfile = details.JockeyProfile,
|
||||
TrainerId = details.TrainerId,
|
||||
TrainerName = details.TrainerName,
|
||||
OwnerId = details.OwnerId,
|
||||
OwnerName = details.OwnerName,
|
||||
WbSilkCode = details.WbSilkCode,
|
||||
WbSilkDescription = details.WbSilkDescription,
|
||||
SilkImage = details.SilkImage,
|
||||
Plus10 = details.Plus10,
|
||||
ResultBtnDistance = details.ResultBtnDistance,
|
||||
PositionFinishTime = details.PositionFinishTime,
|
||||
BettingRatio = details.BettingRatio,
|
||||
PerformanceFigure = details.PerformanceFigure,
|
||||
RatingFlat = details.RatingFlat,
|
||||
RatingAwt = details.RatingAwt,
|
||||
RatingChase = details.RatingChase,
|
||||
RatingHurdle = details.RatingHurdle,
|
||||
RaceCriteriaRaceType = details.RaceCriteriaRaceType,
|
||||
Hro = details.Hro,
|
||||
FinishTime = details.FinishTime,
|
||||
ResultFinishDNF = details.ResultFinishDNF,
|
||||
FinishTimeInMilliseconds = String.IsNullOrWhiteSpace(details.ResultFinishDNF) ? details.FinishTimeInMilliseconds() : null,
|
||||
LossMilliseconds = details.LossMilliseconds(),
|
||||
};
|
||||
using(var db = new Db.HorseRacingDataContext())
|
||||
{
|
||||
db.RunnerResults.Add(dbRunnerResult);
|
||||
await db.SaveChangesAsync();
|
||||
}
|
||||
Console.WriteLine($"Saved results for {details.RacehorseName}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
using System;
|
||||
|
||||
namespace AutoBet.DataRecorded.RaceResultsDataCollector
|
||||
{
|
||||
public class PostRaceDataCollectorDetails
|
||||
{
|
||||
public DateTime DateToCollect { get; set; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user