From 17a40cb95f14877c21373d323cec0b8520b7d364 Mon Sep 17 00:00:00 2001 From: Martin Lee Date: Mon, 13 Apr 2020 15:16:46 +0100 Subject: [PATCH] Initial commit --- .editorconfig | 4 + .gitignore | 357 +++++++++++ .vs/AutoBet/DesignTimeBuild/.dtbcache | Bin 0 -> 6299032 bytes AutoBet.ApiGenerator/ApiClassessGenerator.cs | 72 +++ AutoBet.ApiGenerator/ApiClientGenetaor.cs | 153 +++++ AutoBet.ApiGenerator/ApiEnumsGenerator.cs | 89 +++ .../AutoBet.ApiGenerator.csproj | 13 + AutoBet.ApiGenerator/CSharpClassBuilder.cs | 103 ++++ .../Extensions/StringBuilderExtensions.cs | 22 + AutoBet.ApiGenerator/Program.cs | 40 ++ .../Properties/launchSettings.json | 8 + AutoBet.Core.Tests/AutoBet.Core.Tests.csproj | 24 + AutoBet.Core/AutoBet.Core.csproj | 15 + AutoBet.Core/AutoBetBot.cs | 173 ++++++ .../AutoBet.DataRecorded.csproj | 32 + AutoBet.DataRecorded/NLog.config | 14 + .../PostRaceDataCollectorController.cs | 31 + .../PostRaceRunnerCollectorController.cs | 39 ++ ...PostRaceRunnerResultRecorderController .cs | 69 +++ .../RaceResultsDataSnapshotDetails.cs | 9 + .../OddsDataCollectorController.cs | 70 +++ .../OddsDataCollector/OddsSnapshotDetails.cs | 9 + .../OddsDataRecorderController.cs | 22 + .../Models/PreRaceDataCollectDetails.cs | 11 + .../PreRaceDataCollectorController.cs | 23 + .../PreRaceDataRecorderController.cs | 50 ++ .../Models/PreRaceRunnerCollectDetails.cs | 14 + .../PreRaceRunnerCollectorController.cs | 41 ++ .../PreRaceRunnerRecorderController.cs | 77 +++ AutoBet.DataRecorded/Program.cs | 342 ++++++++++ AutoBet.Db/AutoBet.Db.csproj | 24 + AutoBet.Db/BetOdds.cs | 11 + AutoBet.Db/Entity.cs | 12 + AutoBet.Db/Fixture.cs | 37 ++ AutoBet.Db/FixtureSession.cs | 9 + AutoBet.Db/FixtureType.cs | 9 + AutoBet.Db/HorseRacingDataContext.cs | 37 ++ AutoBet.Db/LastRun.cs | 13 + .../20191229213205_Intialize.Designer.cs | 83 +++ .../Migrations/20191229213205_Intialize.cs | 63 ++ .../20200223123134_RaceDetail.Designer.cs | 338 ++++++++++ .../Migrations/20200223123134_RaceDetail.cs | 149 +++++ ...200227201354_RaceRunnerDetails.Designer.cs | 467 ++++++++++++++ .../20200227201354_RaceRunnerDetails.cs | 412 +++++++++++++ ...27234057_RaceRunnerDetailsTime.Designer.cs | 467 ++++++++++++++ .../20200227234057_RaceRunnerDetailsTime.cs | 28 + .../Migrations/20200228205907_DNF.Designer.cs | 470 ++++++++++++++ AutoBet.Db/Migrations/20200228205907_DNF.cs | 22 + .../20200228230741_DecimalOdds.Designer.cs | 473 ++++++++++++++ .../Migrations/20200228230741_DecimalOdds.cs | 22 + ...200228231116_DecimalOddsRename.Designer.cs | 473 ++++++++++++++ .../20200228231116_DecimalOddsRename.cs | 32 + ...8233655_RacehorseNameNoCountry.Designer.cs | 476 ++++++++++++++ .../20200228233655_RacehorseNameNoCountry.cs | 22 + ...0200229113517_AddWeightInGrams.Designer.cs | 479 ++++++++++++++ .../20200229113517_AddWeightInGrams.cs | 22 + ...29185203_AddPredictionToRunner.Designer.cs | 482 +++++++++++++++ .../20200229185203_AddPredictionToRunner.cs | 23 + .../20200310165642_AddFixtures.Designer.cs | 580 +++++++++++++++++ .../Migrations/20200310165642_AddFixtures.cs | 57 ++ ...00311215708_AddFixtureIdToRace.Designer.cs | 583 ++++++++++++++++++ .../20200311215708_AddFixtureIdToRace.cs | 23 + ...200413114806_JockeyIdCanBeNull.Designer.cs | 583 ++++++++++++++++++ .../20200413114806_JockeyIdCanBeNull.cs | 28 + .../HorseRacingDataContextModelSnapshot.cs | 581 +++++++++++++++++ AutoBet.Db/NLog.config | 14 + AutoBet.Db/OddsSnapshot.cs | 15 + AutoBet.Db/OddsType.cs | 8 + AutoBet.Db/Race.cs | 30 + AutoBet.Db/RacePlanningCode.cs | 7 + AutoBet.Db/RacingTrackType.cs | 9 + AutoBet.Db/Runner.cs | 57 ++ AutoBet.Db/RunnerResult.cs | 54 ++ AutoBet.Db/SexType.cs | 11 + AutoBet.Db/Status.cs | 10 + AutoBet.Learn/AutoBet.Learn.csproj | 24 + .../Extensions/EstimatorExtensions.cs | 16 + AutoBet.Learn/HorseOddsResult.cs | 10 + AutoBet.Learn/HorseOddsTrainingData.cs | 43 ++ AutoBet.Learn/Program.cs | 236 +++++++ AutoBet.sln | 60 ++ 81 files changed, 10120 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .vs/AutoBet/DesignTimeBuild/.dtbcache create mode 100644 AutoBet.ApiGenerator/ApiClassessGenerator.cs create mode 100644 AutoBet.ApiGenerator/ApiClientGenetaor.cs create mode 100644 AutoBet.ApiGenerator/ApiEnumsGenerator.cs create mode 100644 AutoBet.ApiGenerator/AutoBet.ApiGenerator.csproj create mode 100644 AutoBet.ApiGenerator/CSharpClassBuilder.cs create mode 100644 AutoBet.ApiGenerator/Extensions/StringBuilderExtensions.cs create mode 100644 AutoBet.ApiGenerator/Program.cs create mode 100644 AutoBet.ApiGenerator/Properties/launchSettings.json create mode 100644 AutoBet.Core.Tests/AutoBet.Core.Tests.csproj create mode 100644 AutoBet.Core/AutoBet.Core.csproj create mode 100644 AutoBet.Core/AutoBetBot.cs create mode 100644 AutoBet.DataRecorded/AutoBet.DataRecorded.csproj create mode 100644 AutoBet.DataRecorded/NLog.config create mode 100644 AutoBet.DataRecorded/PostRaceDetailsCollection/PostRaceDataCollector/PostRaceDataCollectorController.cs create mode 100644 AutoBet.DataRecorded/PostRaceDetailsCollection/PostRaceDataLoader/PostRaceRunnerCollectorController.cs create mode 100644 AutoBet.DataRecorded/PostRaceDetailsCollection/PostRaceRunnerRecorder/PostRaceRunnerResultRecorderController .cs create mode 100644 AutoBet.DataRecorded/PostRaceDetailsCollection/RaceResultsDataSnapshotDetails.cs create mode 100644 AutoBet.DataRecorded/PreRaceAnalysis/OddsDataCollector/OddsDataCollectorController.cs create mode 100644 AutoBet.DataRecorded/PreRaceAnalysis/OddsDataCollector/OddsSnapshotDetails.cs create mode 100644 AutoBet.DataRecorded/PreRaceAnalysis/OddsDataRecorder/OddsDataRecorderController.cs create mode 100644 AutoBet.DataRecorded/PreRacePrepartion/PreRaceDataCollector/Models/PreRaceDataCollectDetails.cs create mode 100644 AutoBet.DataRecorded/PreRacePrepartion/PreRaceDataCollector/PreRaceDataCollectorController.cs create mode 100644 AutoBet.DataRecorded/PreRacePrepartion/PreRaceDataRecorder/PreRaceDataRecorderController.cs create mode 100644 AutoBet.DataRecorded/PreRacePrepartion/PreRaceRunnerCollector/Models/PreRaceRunnerCollectDetails.cs create mode 100644 AutoBet.DataRecorded/PreRacePrepartion/PreRaceRunnerCollector/PreRaceRunnerCollectorController.cs create mode 100644 AutoBet.DataRecorded/PreRacePrepartion/PreRaceRunnerRecorder/PreRaceRunnerRecorderController.cs create mode 100644 AutoBet.DataRecorded/Program.cs create mode 100644 AutoBet.Db/AutoBet.Db.csproj create mode 100644 AutoBet.Db/BetOdds.cs create mode 100644 AutoBet.Db/Entity.cs create mode 100644 AutoBet.Db/Fixture.cs create mode 100644 AutoBet.Db/FixtureSession.cs create mode 100644 AutoBet.Db/FixtureType.cs create mode 100644 AutoBet.Db/HorseRacingDataContext.cs create mode 100644 AutoBet.Db/LastRun.cs create mode 100644 AutoBet.Db/Migrations/20191229213205_Intialize.Designer.cs create mode 100644 AutoBet.Db/Migrations/20191229213205_Intialize.cs create mode 100644 AutoBet.Db/Migrations/20200223123134_RaceDetail.Designer.cs create mode 100644 AutoBet.Db/Migrations/20200223123134_RaceDetail.cs create mode 100644 AutoBet.Db/Migrations/20200227201354_RaceRunnerDetails.Designer.cs create mode 100644 AutoBet.Db/Migrations/20200227201354_RaceRunnerDetails.cs create mode 100644 AutoBet.Db/Migrations/20200227234057_RaceRunnerDetailsTime.Designer.cs create mode 100644 AutoBet.Db/Migrations/20200227234057_RaceRunnerDetailsTime.cs create mode 100644 AutoBet.Db/Migrations/20200228205907_DNF.Designer.cs create mode 100644 AutoBet.Db/Migrations/20200228205907_DNF.cs create mode 100644 AutoBet.Db/Migrations/20200228230741_DecimalOdds.Designer.cs create mode 100644 AutoBet.Db/Migrations/20200228230741_DecimalOdds.cs create mode 100644 AutoBet.Db/Migrations/20200228231116_DecimalOddsRename.Designer.cs create mode 100644 AutoBet.Db/Migrations/20200228231116_DecimalOddsRename.cs create mode 100644 AutoBet.Db/Migrations/20200228233655_RacehorseNameNoCountry.Designer.cs create mode 100644 AutoBet.Db/Migrations/20200228233655_RacehorseNameNoCountry.cs create mode 100644 AutoBet.Db/Migrations/20200229113517_AddWeightInGrams.Designer.cs create mode 100644 AutoBet.Db/Migrations/20200229113517_AddWeightInGrams.cs create mode 100644 AutoBet.Db/Migrations/20200229185203_AddPredictionToRunner.Designer.cs create mode 100644 AutoBet.Db/Migrations/20200229185203_AddPredictionToRunner.cs create mode 100644 AutoBet.Db/Migrations/20200310165642_AddFixtures.Designer.cs create mode 100644 AutoBet.Db/Migrations/20200310165642_AddFixtures.cs create mode 100644 AutoBet.Db/Migrations/20200311215708_AddFixtureIdToRace.Designer.cs create mode 100644 AutoBet.Db/Migrations/20200311215708_AddFixtureIdToRace.cs create mode 100644 AutoBet.Db/Migrations/20200413114806_JockeyIdCanBeNull.Designer.cs create mode 100644 AutoBet.Db/Migrations/20200413114806_JockeyIdCanBeNull.cs create mode 100644 AutoBet.Db/Migrations/HorseRacingDataContextModelSnapshot.cs create mode 100644 AutoBet.Db/NLog.config create mode 100644 AutoBet.Db/OddsSnapshot.cs create mode 100644 AutoBet.Db/OddsType.cs create mode 100644 AutoBet.Db/Race.cs create mode 100644 AutoBet.Db/RacePlanningCode.cs create mode 100644 AutoBet.Db/RacingTrackType.cs create mode 100644 AutoBet.Db/Runner.cs create mode 100644 AutoBet.Db/RunnerResult.cs create mode 100644 AutoBet.Db/SexType.cs create mode 100644 AutoBet.Db/Status.cs create mode 100644 AutoBet.Learn/AutoBet.Learn.csproj create mode 100644 AutoBet.Learn/Extensions/EstimatorExtensions.cs create mode 100644 AutoBet.Learn/HorseOddsResult.cs create mode 100644 AutoBet.Learn/HorseOddsTrainingData.cs create mode 100644 AutoBet.Learn/Program.cs create mode 100644 AutoBet.sln diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..4e13c08 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +[*.cs] + +# IDE0063: Use simple 'using' statement +csharp_prefer_simple_using_statement = false:suggestion diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..091f163 --- /dev/null +++ b/.gitignore @@ -0,0 +1,357 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*[.json, .xml, .info] + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ \ No newline at end of file diff --git a/.vs/AutoBet/DesignTimeBuild/.dtbcache b/.vs/AutoBet/DesignTimeBuild/.dtbcache new file mode 100644 index 0000000000000000000000000000000000000000..1ff1c0eca019d8dc52228c5d4dbd38899fce12d2 GIT binary patch literal 6299032 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

    K) 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 R@>q$)xO{oqw9jwtjn1o5ju;sE-EB`eJ;c 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

    _NZJ^QJ;>nft!q{P# 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�rwG-2XCFtG|uaFWR(YC4jyZu{zfO!%nRT}=2W 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 z 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\r\n"); + + var descriptionLines = summary.Trim().TrimEnd('\n').Replace("\r", "").Split('\n'); + foreach (var line in descriptionLines) + { + sb.AppendWithIndent(indentSpaces, "/// "); + sb.Append(line.Trim()); + sb.AppendLine(); + } + sb.AppendWithIndent(indentSpaces, "/// \r\n"); + } + } + + public static void ClassFooter(StringBuilder sb) + { + sb.AppendWithIndent(4, "}"); + sb.AppendLine(); + } + + public static void ClassHeader(StringBuilder sb, string name) + { + sb.AppendWithIndent(4, "public class "); + sb.Append(name); + sb.AppendLine(); + sb.AppendWithIndent(4, "{"); + sb.AppendLine(); + } + + public static void EnumHeader(StringBuilder sb, string name) + { + sb.AppendWithIndent(4, "public enum "); + sb.Append(name); + sb.AppendLine(); + sb.AppendWithIndent(4, "{"); + sb.AppendLine(); + } + + public static void UsingHeader(StringBuilder sb, string namespaceValue, params string[] usings) + { + sb.AppendLine("using System;"); + foreach (var value in usings) + { + sb.AppendFormat("using {0};", value); + sb.AppendLine(); + } + + sb.AppendLine(); + sb.Append("namespace "); + sb.Append(namespaceValue); + sb.AppendLine(); + sb.AppendLine("{"); + } + + public static void UsingFooter(StringBuilder sb) + { + sb.Append("}"); + } + + public static string GetDataType(string responseType) + { + if (responseType.StartsWith("list(")) + { + return GetCSharpType(responseType.Substring(5, responseType.Length - 6)) + "[]"; + } + + if (responseType.StartsWith("set(")) + { + return GetCSharpType(responseType.Substring(4, responseType.Length - 5)) + "[]"; + } + + return GetCSharpType(responseType); + } + + private static string GetCSharpType(string responseType) + { + switch (responseType) + { + case "i64": + return "long"; + case "i32": + return "int"; + case "dateTime": + return "DateTime"; + default: + return responseType; + } + } + } +} diff --git a/AutoBet.ApiGenerator/Extensions/StringBuilderExtensions.cs b/AutoBet.ApiGenerator/Extensions/StringBuilderExtensions.cs new file mode 100644 index 0000000..3f1d91e --- /dev/null +++ b/AutoBet.ApiGenerator/Extensions/StringBuilderExtensions.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace AutoBet.ApiGenerator.Extensions +{ + internal static class StringBuilderExtensions + { + public static void AppendWithIndent(this StringBuilder sb, int spaces, string value = null) + { + for (var i = 0; i < spaces; i++) + { + sb.Append(" "); + } + + if(value != null) + { + sb.Append(value); + } + } + } +} diff --git a/AutoBet.ApiGenerator/Program.cs b/AutoBet.ApiGenerator/Program.cs new file mode 100644 index 0000000..6a3f0d8 --- /dev/null +++ b/AutoBet.ApiGenerator/Program.cs @@ -0,0 +1,40 @@ +using System; + +namespace AutoBet.ApiGenerator +{ + public static class Program + { + private static string _inputXmlFile; + private static string _outputFilesDirectory; + + static void Main(string[] args) + { + //ProccessArguments(args); + //var namespaceValue = "SuccessfulCode.BetfairApi"; + //var clientName = "Betting"; + ////var apiClientGenerator = new ApiClientGenetaor(_inputXmlFile, _outputFilesDirectory); + ////apiClientGenerator.Process(clientName, namespaceValue); + ////var apiClassesGenerator = new ApiClassessGenerator(_inputXmlFile, _outputFilesDirectory); + ////apiClassesGenerator.Process(namespaceValue, clientName + "Models"); + ////var apiEnumsGenerator = new ApiEnumsGenerator(_inputXmlFile, _outputFilesDirectory); + ////apiEnumsGenerator.Process(namespaceValue, clientName + "Models", "Enums"); + } + + private static void ProccessArguments(string[] args) + { + for (var i = 0; i < args.Length; i++) + { + switch (args[i]) + { + case "-i": + _inputXmlFile = args[++i]; + break; + + case "-d": + _outputFilesDirectory = args[++i]; + break; + } + } + } + } +} diff --git a/AutoBet.ApiGenerator/Properties/launchSettings.json b/AutoBet.ApiGenerator/Properties/launchSettings.json new file mode 100644 index 0000000..8f4b0e7 --- /dev/null +++ b/AutoBet.ApiGenerator/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "AutoBet.ApiGenerator": { + "commandName": "Project", + "commandLineArgs": "-i \"E:\\Betfair\\bettingapi.xml\" -d \"C:\\Users\\Martin\\Documents\\Visual Studio 2017\\Projects\\AutoBet\\SuccessfulCode.BetfairApi\"" + } + } +} \ No newline at end of file diff --git a/AutoBet.Core.Tests/AutoBet.Core.Tests.csproj b/AutoBet.Core.Tests/AutoBet.Core.Tests.csproj new file mode 100644 index 0000000..fa72849 --- /dev/null +++ b/AutoBet.Core.Tests/AutoBet.Core.Tests.csproj @@ -0,0 +1,24 @@ + + + + netcoreapp2.1 + + false + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + + + + + + diff --git a/AutoBet.Core/AutoBet.Core.csproj b/AutoBet.Core/AutoBet.Core.csproj new file mode 100644 index 0000000..1677567 --- /dev/null +++ b/AutoBet.Core/AutoBet.Core.csproj @@ -0,0 +1,15 @@ + + + netcoreapp2.1 + + + + + + + + + + + + diff --git a/AutoBet.Core/AutoBetBot.cs b/AutoBet.Core/AutoBetBot.cs new file mode 100644 index 0000000..9cff17f --- /dev/null +++ b/AutoBet.Core/AutoBetBot.cs @@ -0,0 +1,173 @@ +//using SuccessfulCode.BetfairApi; +//using SuccessfulCode.BetfairApi.BettingModels; +//using SuccessfulCode.BetfairApi.BettingModels.Enums; +//using Microsoft.EntityFrameworkCore; +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Threading.Tasks; +//using System.Dynamic; + +//namespace AutoBet.Core +//{ +// public class AutoBetBot +// { +// private BettingApiClient _client; +// private BetfairHorseRacingQueries _horseRacingApi; + +// public AutoBetBot() +// { +// var auth = new Authentication("TheRocker1987", "reSharper1036!", "H5TT4zKqOlRCpNOr"); +// _client = new BettingApiClient(auth); +// _horseRacingApi = new BetfairHorseRacingQueries(_client); +// } + +// public async Task MakeBets() +// { +// var catalogues = await _horseRacingApi.GetHorseWinCatalogue(DateTime.UtcNow.AddHours(1), DateTime.UtcNow.AddDays(1)); +// var catalogueIdToCatalogue = catalogues.ToDictionary(e => e.MarketId, e => e); + +// var horseIdToHorseName = catalogues.SelectMany(e1 => e1.Runners) +// .ToDictionary(e => e.SelectionId, e => e.RunnerName); + +// using (var mainDb = new ExpandoObject()) +// { + +// var account = await mainDb.Accounts.LastOrDefaultAsync(); +// var latestTransaction = await mainDb.Transactions.Where(e => e.AccountId == account.Id).LastOrDefaultAsync(); +// await CheckBetOutComes(mainDb, account, latestTransaction); +// latestTransaction = await mainDb.Transactions.Where(e => e.AccountId == account.Id).LastOrDefaultAsync(); +// var marketIdsAlreadyBet = await mainDb.Bets.Where(e => e.Transaction.AccountId == account.Id) +// .Select(e => e.ExchangeMarketId) +// .ToArrayAsync(); +// var remainingLiability = latestTransaction.ElidgableLiability; + +// var marketBooks = await _horseRacingApi.GetMarketBookPrices(catalogues); +// marketBooks = marketBooks.Where(e => !marketIdsAlreadyBet.Contains(e.MarketId)).ToArray(); +// foreach (var item in marketBooks) +// { +// // var liabilityUsed = await BetOnBook(item, stake, remainingLiability, catalogueIdToCatalogue, horseIdToHorseName, mainDb, account, latestTransaction); +// //remainingLiability -= liabilityUsed; +// } +// } + +// Console.WriteLine("Finished"); +// } + +// private async Task CheckBetOutComes(MainDb mainDb, Account account, AccountTransaction transaction) +// { +// var unselltedBets = mainDb.Bets.Where(e => e.Status == Database.Models.BetStatus.Unsettled).ToDictionary(e => e.ExchangeBetId, e => e); +// var settledBets = await _client.ListClearedOrders(SuccessfulCode.BetfairApi.BettingModels.Enums.BetStatus.Settled, betIds: unselltedBets.Keys.ToArray()); +// foreach(var bet in settledBets.ClearedOrders) +// { +// if (!unselltedBets.TryGetValue(bet.BetId, out Bet betRecord)) +// { +// continue; +// } + +// betRecord.Status = bet.Profit > 0 ? Database.Models.BetStatus.Won : Database.Models.BetStatus.Lost; +// if(betRecord.Status == Database.Models.BetStatus.Won) +// { +// var reserverFunds = 1;//Math.Round(bet.Profit.PercentOf(20.00m) - 0.005m, 2); +// var recordTransaction = new AccountTransaction() +// { +// AccountId = account.Id, +// CreatedAt = DateTime.UtcNow, +// ElidgableLiability = transaction.ElidgableLiability + betRecord.Liability + (bet.Profit - reserverFunds), +// TransactionType = TransactionType.BetPlaced, +// ReservedFunds = transaction.ReservedFunds += reserverFunds +// }; +// mainDb.Transactions.Add(recordTransaction); +// } +// } +// await mainDb.SaveChangesAsync(); +// } + +// private async Task BetOnBook( +// MarketBook book, +// decimal stake, +// decimal remainingLiability, +// Dictionary catalogueIdToCatalog, +// Dictionary horseIdToName, +// MainDb db, +// Account account, +// AccountTransaction transaction +// ) +// { +// var eventDetails = catalogueIdToCatalog[book.MarketId]; +// var runners = book.Runners.Where(e => e.ExchangePrices.AvailableToLay.Length > 0) +// .OrderBy(e => e.ExchangePrices.AvailableToLay[0].Price) +// .ToArray(); + +// Console.WriteLine($"{eventDetails.Event.Name} @ {eventDetails.MarketStartTime}"); +// foreach (var runner in runners) +// { +// Console.WriteLine($"-{horseIdToName[runner.SelectionId]}:{runner.ExchangePrices.AvailableToLay[0].Price} Liability: {(runner.ExchangePrices.AvailableToLay[0].Price * stake) - stake}"); +// } + +// if (runners.Length <= 3) +// { +// Console.WriteLine($"Less than 3 horses to lay against"); +// return 0m; +// } + +// var selectedRunner = runners.Skip(3) +// .Where(e => e.ExchangePrices.AvailableToLay[0].Price > 7 && e.ExchangePrices.AvailableToLay[0].Price < 10.001m) +// .FirstOrDefault(); + +// if (selectedRunner == null) +// { +// Console.WriteLine("No elidgable runner"); +// return 0m; +// } + +// var liability = (selectedRunner.ExchangePrices.AvailableToLay[0].Price * stake) - stake; +// Console.WriteLine($"Selected:{horseIdToName[selectedRunner.SelectionId]}:{selectedRunner.ExchangePrices.AvailableToLay[0].Price} Liability: {liability}"); + +// if (liability > remainingLiability) +// { +// Console.WriteLine($"Passing horse as {liability} need but only {transaction.ElidgableLiability} available"); +// return 0m; +// } +// //var placeBetResult = new PlaceExecutionReport() +// //{ +// // InstructionReports = new[] +// // { +// // new PlaceInstructionReport() +// // { +// // BetId = "Not real" +// // } +// // } +// //}; +// var placeBetResult = await _client.PlaceOrders(eventDetails.MarketId, new PlaceInstruction[] { +// new PlaceInstruction() +// { +// SelectionId = selectedRunner.SelectionId, +// Side = Side.Lay, +// OrderType = OrderType.Limit, +// LimitOrder = new LimitOrder +// { +// Price = selectedRunner.ExchangePrices.AvailableToLay[0].Price, +// Size = stake, +// PersistenceType = PersistenceType.Lapse +// } +// } +// }); + +// if (placeBetResult.InstructionReports.Length == 0 || String.IsNullOrWhiteSpace(placeBetResult.InstructionReports[0].BetId)) +// { +// Console.WriteLine("Bet failed at exchange"); +// return 0; +// } + +// remainingLiability -= liability; + +// var betRecord = CreateBetRecord(stake, horseIdToName, eventDetails, selectedRunner, liability, placeBetResult); +// var tranasctionRecord = CreateTransactionRecord(remainingLiability, account, transaction, betRecord); +// await SaveTranasction(db, tranasctionRecord); + +// Console.WriteLine("--bet placed"); +// return remainingLiability; +// } +// } +//} diff --git a/AutoBet.DataRecorded/AutoBet.DataRecorded.csproj b/AutoBet.DataRecorded/AutoBet.DataRecorded.csproj new file mode 100644 index 0000000..d4a910a --- /dev/null +++ b/AutoBet.DataRecorded/AutoBet.DataRecorded.csproj @@ -0,0 +1,32 @@ + + + + Exe + netcoreapp3.0 + + + + + + + + + + + + + + + + + + + + ..\..\SwiftyMessageHub\SwiftyMessageHub.RabbitMq\bin\Debug\netstandard2.0\SwiftyMessageHub.Core.dll + + + ..\..\SwiftyMessageHub\SwiftyMessageHub.RabbitMq\bin\Debug\netstandard2.0\SwiftyMessageHub.RabbitMq.dll + + + + diff --git a/AutoBet.DataRecorded/NLog.config b/AutoBet.DataRecorded/NLog.config new file mode 100644 index 0000000..8a60478 --- /dev/null +++ b/AutoBet.DataRecorded/NLog.config @@ -0,0 +1,14 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/AutoBet.DataRecorded/PostRaceDetailsCollection/PostRaceDataCollector/PostRaceDataCollectorController.cs b/AutoBet.DataRecorded/PostRaceDetailsCollection/PostRaceDataCollector/PostRaceDataCollectorController.cs new file mode 100644 index 0000000..df79607 --- /dev/null +++ b/AutoBet.DataRecorded/PostRaceDetailsCollection/PostRaceDataCollector/PostRaceDataCollectorController.cs @@ -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); + } + } + } + } +} diff --git a/AutoBet.DataRecorded/PostRaceDetailsCollection/PostRaceDataLoader/PostRaceRunnerCollectorController.cs b/AutoBet.DataRecorded/PostRaceDetailsCollection/PostRaceDataLoader/PostRaceRunnerCollectorController.cs new file mode 100644 index 0000000..e8f17aa --- /dev/null +++ b/AutoBet.DataRecorded/PostRaceDetailsCollection/PostRaceDataLoader/PostRaceRunnerCollectorController.cs @@ -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 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); + } + } + } +} diff --git a/AutoBet.DataRecorded/PostRaceDetailsCollection/PostRaceRunnerRecorder/PostRaceRunnerResultRecorderController .cs b/AutoBet.DataRecorded/PostRaceDetailsCollection/PostRaceRunnerRecorder/PostRaceRunnerResultRecorderController .cs new file mode 100644 index 0000000..a7fa79a --- /dev/null +++ b/AutoBet.DataRecorded/PostRaceDetailsCollection/PostRaceRunnerRecorder/PostRaceRunnerResultRecorderController .cs @@ -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}"); + } + } +} diff --git a/AutoBet.DataRecorded/PostRaceDetailsCollection/RaceResultsDataSnapshotDetails.cs b/AutoBet.DataRecorded/PostRaceDetailsCollection/RaceResultsDataSnapshotDetails.cs new file mode 100644 index 0000000..eb9e693 --- /dev/null +++ b/AutoBet.DataRecorded/PostRaceDetailsCollection/RaceResultsDataSnapshotDetails.cs @@ -0,0 +1,9 @@ +using System; + +namespace AutoBet.DataRecorded.RaceResultsDataCollector +{ + public class PostRaceDataCollectorDetails + { + public DateTime DateToCollect { get; set; } + } +} \ No newline at end of file diff --git a/AutoBet.DataRecorded/PreRaceAnalysis/OddsDataCollector/OddsDataCollectorController.cs b/AutoBet.DataRecorded/PreRaceAnalysis/OddsDataCollector/OddsDataCollectorController.cs new file mode 100644 index 0000000..dd98932 --- /dev/null +++ b/AutoBet.DataRecorded/PreRaceAnalysis/OddsDataCollector/OddsDataCollectorController.cs @@ -0,0 +1,70 @@ +using SuccessfulCode.BetfairApi; +using SuccessfulCode.BetfairApi.BettingModels; +using SwiftyMessageHub.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace AutoBet.DataRecorded.MessageControllers +{ + public class OddsDataCollectorController : MessageController + { + [MessageRoute] + public async Task GenerateSnapshot(OddsSnapshotDetails details) + { + var auth = new Authentication("TheRocker1987", "reSharper1036!", "H5TT4zKqOlRCpNOr"); + var client = new BettingApiClient(auth); + var horseRacingQueries = new BetfairHorseRacingQueries(client); + var horseWins = await horseRacingQueries.GetHorseWinCatalogue(DateTime.UtcNow.AddHours(-2), DateTime.UtcNow); + var marketDetails = horseWins.ToDictionary(e => e.MarketId, e => e); + var horseDetails = horseWins.SelectMany(e => e.Runners.Select(e1 => new { Key = (e.MarketId, e1.SelectionId), Value = e1 })).ToDictionary(e => e.Key, e => e.Value); + var prices = await horseRacingQueries.GetBestPrices(horseWins.Select(e => e.MarketId).ToArray()); + var snapShots = prices.SelectMany(e => e.Runners.Select(e1 => GenerateOddsSnapshots(marketDetails, horseDetails, e1, e))); + + foreach (var snapshot in snapShots) + { + await SendResponse(snapshot); + } + } + + private static Db.OddsSnapshot GenerateOddsSnapshots(Dictionary marketDetails, Dictionary<(string MarketId, long SelectionId), RunnerCatalog> horseDetails, Runner runner, MarketBook book) + { + var marketDetail = marketDetails[book.MarketId]; + var horseDetail = horseDetails[(marketDetail.MarketId, runner.SelectionId)]; + var runnerName = Regex.Match(horseDetail.RunnerName, "^[0-9]*\\.? ?(.*)", RegexOptions.Compiled).Groups[1].Value; + var oddsSnapshot = new Db.OddsSnapshot() + { + EventName = marketDetail.Event.Name, + HorseName = runnerName, + JockeyName = horseDetail.Metadata.JockeyName, + Odds = GenerateOdds(runner), + SnapshotDate = DateTime.UtcNow + }; + + return oddsSnapshot; + } + + private static List GenerateOdds(Runner e1) + { + var backOdds = e1.ExchangePrices.AvailableToBack.Select(e => new Db.BetOdds() + { + OddsType = Db.OddsType.Back, + Available = (decimal)e.Size, + Odds = e.Price + }).ToList(); + + var layOdds = e1.ExchangePrices.AvailableToBack.Select(e => new Db.BetOdds() + { + OddsType = Db.OddsType.Lay, + Available = (decimal)e.Size, + Odds = e.Price + }).ToList(); + + backOdds.AddRange(layOdds); + return backOdds; + } + } +} diff --git a/AutoBet.DataRecorded/PreRaceAnalysis/OddsDataCollector/OddsSnapshotDetails.cs b/AutoBet.DataRecorded/PreRaceAnalysis/OddsDataCollector/OddsSnapshotDetails.cs new file mode 100644 index 0000000..7a3f36c --- /dev/null +++ b/AutoBet.DataRecorded/PreRaceAnalysis/OddsDataCollector/OddsSnapshotDetails.cs @@ -0,0 +1,9 @@ +using SwiftyMessageHub.Core; + +namespace AutoBet.DataRecorded.MessageControllers +{ + [MessageType("OddsSnapshotDetails")] + public class OddsSnapshotDetails + { + } +} \ No newline at end of file diff --git a/AutoBet.DataRecorded/PreRaceAnalysis/OddsDataRecorder/OddsDataRecorderController.cs b/AutoBet.DataRecorded/PreRaceAnalysis/OddsDataRecorder/OddsDataRecorderController.cs new file mode 100644 index 0000000..bbddcca --- /dev/null +++ b/AutoBet.DataRecorded/PreRaceAnalysis/OddsDataRecorder/OddsDataRecorderController.cs @@ -0,0 +1,22 @@ +using AutoBet.Db; +using SwiftyMessageHub.Core; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; + +namespace AutoBet.DataRecorded.MessageControllers +{ + public class OddsDataRecorderController : MessageController + { + [MessageRoute] + public async Task SaveSnapshot(OddsSnapshot snapshotToSave) + { + using (var db = new HorseRacingDataContext()) + { + db.OddsSnapshots.Add(snapshotToSave); + await db.SaveChangesAsync(); + } + } + } +} diff --git a/AutoBet.DataRecorded/PreRacePrepartion/PreRaceDataCollector/Models/PreRaceDataCollectDetails.cs b/AutoBet.DataRecorded/PreRacePrepartion/PreRaceDataCollector/Models/PreRaceDataCollectDetails.cs new file mode 100644 index 0000000..50ff40d --- /dev/null +++ b/AutoBet.DataRecorded/PreRacePrepartion/PreRaceDataCollector/Models/PreRaceDataCollectDetails.cs @@ -0,0 +1,11 @@ +using SwiftyMessageHub.Core; +using System; + +namespace AutoBet.DataRecorded +{ + [MessageType("PreRaceDataSnapshotDetails")] + public class PreRaceDataCollectDetails + { + public DateTime DateToCollect { get; set; } + } +} \ No newline at end of file diff --git a/AutoBet.DataRecorded/PreRacePrepartion/PreRaceDataCollector/PreRaceDataCollectorController.cs b/AutoBet.DataRecorded/PreRacePrepartion/PreRaceDataCollector/PreRaceDataCollectorController.cs new file mode 100644 index 0000000..4c9ce82 --- /dev/null +++ b/AutoBet.DataRecorded/PreRacePrepartion/PreRaceDataCollector/PreRaceDataCollectorController.cs @@ -0,0 +1,23 @@ +using SwiftyMessageHub.Core; +using System; +using System.Threading.Tasks; + +namespace AutoBet.DataRecorded.MessageControllers +{ + public class PreRaceDataCollectorController : MessageController + { + [MessageRoute] + public async Task CollectPreRaceData(PreRaceDataCollectDetails details) + { + var client = new BritishHorseRacingApi.ApiClient(); + var date = details.DateToCollect; + Console.WriteLine("Loading races"); + var races = await client.GetAllRacesForDay(date.Year, date.Month, date.Day); + foreach (var race in races) + { + Console.WriteLine($"Race id {race.RaceId} loaded"); + await CurrentContext.Hub.SendMessage(race); + } + } + } +} diff --git a/AutoBet.DataRecorded/PreRacePrepartion/PreRaceDataRecorder/PreRaceDataRecorderController.cs b/AutoBet.DataRecorded/PreRacePrepartion/PreRaceDataRecorder/PreRaceDataRecorderController.cs new file mode 100644 index 0000000..b23d9ee --- /dev/null +++ b/AutoBet.DataRecorded/PreRacePrepartion/PreRaceDataRecorder/PreRaceDataRecorderController.cs @@ -0,0 +1,50 @@ +using BritishHorseRacingApi.Models; +using AutoBet.DataRecorded.PreRaceRunnerCollector; +using SwiftyMessageHub.Core; +using System.Threading.Tasks; +using System; + +namespace AutoBet.DataRecorded.PreRaceDataRecorder +{ + public class PreRaceDataRecorderController : MessageController + { + [MessageRoute] + public async Task CollectPreRaceData(Race details) + { + Console.WriteLine($"Saving race id {details.RaceId}"); + using (var db = new Db.HorseRacingDataContext()) + { + db.Races.Add(new Db.Race() + { + DistanceChangeText = details.DistanceChangeText, + BlackTypeRace = details.BlackTypeRace, + AbandonedReasonCode = details.AbandonedReasonCode, + RaceCriteriaRaceType = details.RaceCriteriaRaceType, + DistanceChange = details.DistanceChange, + DistanceText = details.DistanceText, + DistanceValue = details.DistanceValue, + DistanceUnits = details.DistanceUnits, + RawDistanceText = details.RawDistanceText, + RatingBand = details.RatingBand, + RaceClass = details.RaceClass, + PrizeCurrency = details.PrizeCurrency, + PrizeAmount = details.PrizeAmount, + AgeLimit = details.AgeLimit, + RaceName = details.RaceName, + RaceTime = details.RaceTime, + RaceDate = details.RaceDate, + DivisionSequence = details.DivisionSequence, + YearOfRace = details.YearOfRace, + RaceId = details.RaceId, + Plus10 = details.Plus10, + }); + await db.SaveChangesAsync(); + } + await CurrentContext.Hub.SendMessage(new PreRaceRunnerCollectDetails() + { + DateToCollect = details.RaceDate, + RaceId = details.RaceId + }); + } + } +} diff --git a/AutoBet.DataRecorded/PreRacePrepartion/PreRaceRunnerCollector/Models/PreRaceRunnerCollectDetails.cs b/AutoBet.DataRecorded/PreRacePrepartion/PreRaceRunnerCollector/Models/PreRaceRunnerCollectDetails.cs new file mode 100644 index 0000000..c5a48ac --- /dev/null +++ b/AutoBet.DataRecorded/PreRacePrepartion/PreRaceRunnerCollector/Models/PreRaceRunnerCollectDetails.cs @@ -0,0 +1,14 @@ +using System; + +namespace AutoBet.DataRecorded.PreRaceRunnerCollector +{ + public class PreRaceRunnerCollectDetails + { + public PreRaceRunnerCollectDetails() + { + } + + public DateTime DateToCollect { get; set; } + public int RaceId { get; set; } + } +} \ No newline at end of file diff --git a/AutoBet.DataRecorded/PreRacePrepartion/PreRaceRunnerCollector/PreRaceRunnerCollectorController.cs b/AutoBet.DataRecorded/PreRacePrepartion/PreRaceRunnerCollector/PreRaceRunnerCollectorController.cs new file mode 100644 index 0000000..79dac7e --- /dev/null +++ b/AutoBet.DataRecorded/PreRacePrepartion/PreRaceRunnerCollector/PreRaceRunnerCollectorController.cs @@ -0,0 +1,41 @@ +using BritishHorseRacingApi.Models; +using SwiftyMessageHub.Core; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace AutoBet.DataRecorded.PreRaceRunnerCollector +{ + public class PreRaceRunnerCollectorController : MessageController + { + public static SemaphoreSlim semaphore = new SemaphoreSlim(1); + [MessageRoute] + public async Task CollectPreRaceData(PreRaceRunnerCollectDetails details) + { + var client = new BritishHorseRacingApi.ApiClient(); + var date = details.DateToCollect; + Console.WriteLine($"Preparing to load runners for race id {details.RaceId}"); + await semaphore.WaitAsync(); + try + { + Console.WriteLine($"Loading runners for race id {details.RaceId}"); + var runners = await client.GetRaceRunners(date.Year, details.RaceId); + foreach (var runner in runners.Data) + { + Console.WriteLine($"Loaded runner {runner.RacehorseName} id {details.RaceId}"); + await CurrentContext.Hub.SendMessage(runner); + } + } + catch(Exception ex) + { + throw; + } + finally + { + semaphore.Release(); + } + } + } +} diff --git a/AutoBet.DataRecorded/PreRacePrepartion/PreRaceRunnerRecorder/PreRaceRunnerRecorderController.cs b/AutoBet.DataRecorded/PreRacePrepartion/PreRaceRunnerRecorder/PreRaceRunnerRecorderController.cs new file mode 100644 index 0000000..fb1120b --- /dev/null +++ b/AutoBet.DataRecorded/PreRacePrepartion/PreRaceRunnerRecorder/PreRaceRunnerRecorderController.cs @@ -0,0 +1,77 @@ +using BritishHorseRacingApi.Models; +using SwiftyMessageHub.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AutoBet.DataRecorded.PreRaceRunnerRecorder +{ + public class PreRaceRunnerRecorderController : MessageController + { + [MessageRoute] + public async Task RecordRunner(Runner details) + { + Console.WriteLine($"Saving runner {details.RacehorseName}"); + using (var db = new Db.HorseRacingDataContext()) + { + db.Runners.Add(new Db.Runner() + { + HeadGearWearingCode = details.HeadGearWearingCode, + HeadGearWearingSheepSkin = details.HeadGearWearingSheepSkin, + HeadGearDescription = details.HeadGearDescription, + HeadGearAbbreviation = details.HeadGearAbbreviation, + JockeyProfile = details.JockeyProfile, + CourseWinner = details.CourseWinner, + DistanceWinner = details.DistanceWinner, + WindSurgeryFirstRun = details.WindSurgeryFirstRun, + TrainerId = details.TrainerId, + TrainerName = details.TrainerName, + OwnerId = details.OwnerId, + OwnerName = details.OwnerName, + WbSilkCode = details.WbSilkCode, + WbSilkDescription = details.WbSilkDescription, + SilkImage = details.SilkImage, + Plus10 = details.Plus10, + ForecastPriceNumerator = details.ForecastPriceNumerator, + ForecastPriceDenominator = details.ForecastPriceDenominator, + WeightText = details.WeightText, + WeightsJockeyClaiming = details.WeightsJockeyClaiming, + Odds = details.Odds, + DecimalOdds = details.DecimalOdds(), + JockeyName = details.JockeyName, + Status = (Db.Status)details.Status, + RaceId = details.RaceId, + YearOfRace = details.YearOfRace, + DivisionSequence = details.DivisionSequence, + AnimalId = details.AnimalId, + RacehorseName = details.RacehorseName, + AgeYears = details.AgeYears, + Bred = details.Bred, + ClothNumber = details.ClothNumber, + DrawnStall = details.DrawnStall, + ReserveNumber = details.ReserveNumber, + BhaRating = details.BhaRating, + FormFigures = details.FormFigures, + WeightValue = details.WeightValue, + PenaltyValue = details.PenaltyValue, + SexType = (Db.SexType)details.SexType, + NonRunnerDeclaredReason = details.NonRunnerDeclaredReason, + NonRunnerDeclaredDate = details.NonRunnerDeclaredDate, + NonRunnerDeclaredTime = details.NonRunnerDeclaredTime, + RunnerNumber = details.RunnerNumber, + JockeyId = details.JockeyId, + RaceHorseNameWithoutCountry = details.RacehorseNameWithoutCountry, + WeightInGrams = details.WeightInGrams, + LastRuns = details.LastRuns?.Select(e => new Db.LastRun() + { + Days = e.Days, + RaceType = e.RaceType + }).ToList() + }); + await db.SaveChangesAsync(); + } + } + } +} diff --git a/AutoBet.DataRecorded/Program.cs b/AutoBet.DataRecorded/Program.cs new file mode 100644 index 0000000..b4f39c6 --- /dev/null +++ b/AutoBet.DataRecorded/Program.cs @@ -0,0 +1,342 @@ +using AutoBet.DataRecorded.MessageControllers; +using SwiftyMessageHub.Core; +using System; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using AutoBet.DataRecorded.RaceResultsDataCollector; +using BritishHorseRacingApi; +using System.Collections.Generic; +using BritishHorseRacingApi.Models; +using Microsoft.EntityFrameworkCore; +using AutoBet.Db; +using ApiModels = BritishHorseRacingApi.Models; + +namespace AutoBet.DataRecorded +{ + class Program + { + public static async Task Main(string[] args) + { + //StartResultsCollection().GetAwaiter().GetResult(); + //var dayToCollectRunners = GetDayToCollect(); + await CollectPastResults(); + + //await CollectCurrent(); + //await GetFixtureIds(); + + } + + private static async Task GetFixtureIds() + { + Db.Fixture[] fixturesToProcces; + using (var db = new Db.HorseRacingDataContext()) + { + var ids = db.Races.Where(e => e.FixtureId != 0).Select(e => e.FixtureId).ToArray(); + fixturesToProcces = db.Fixtures.Where(e => !ids.Contains(e.FixtureId)).ToArray(); + var client = new ApiClient(TimeSpan.FromSeconds(0), "D_SID=188.172.158.138:JT/OEx87nl5ScspTQk38UsDfuIz94DbCf5CYsIC7WpU; __utmz=36595059.1583064856.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); D_ZID=52A68C14-B4B6-3844-8896-9B0E426FEABA; D_ZUID=2E7A90D0-30B7-31B4-BB43-CB2B0DACBDF8; D_HID=0316E576-4AF0-35A5-BEB9-CECB592B4EC2; bha-ie-test=true; __utmc=36595059; __utma=36595059.34208775.1583064856.1583966446.1584046318.17; bha_token=%7B%22token%22%3A%22MjE3Y2I1NDBhYWViZWQ0YmM4YjZmYjg2NDRlOTA2NzU%3D%22%2C%22timestamp%22%3A1584046320723%7D; D_IID=A18DB74E-9ABD-33E1-BF94-96209AF6178E; D_UID=9CDC96FD-4EFE-308E-BC28-2F105AC0B01B; __utmt=1; __utmb=36595059.6.10.1584046318"); + foreach (var fixture in fixturesToProcces) + { + var races = await client.GetRaces(fixture.FixtureYear, fixture.FixtureId); + foreach (var race in races.Data) + { + var dbRace = db.Races.FirstOrDefault(e => e.RaceId == race.RaceId); + if (dbRace == null) + { + AddRace(db, fixture.FixtureId, race); + await LoadRunners(fixture.FixtureDate.Date, client, db, race); + continue; + } + + dbRace.FixtureId = fixture.FixtureId; + } + db.SaveChanges(); + } + } + } + + private static async Task CollectPastResults() + { + var dayToCollectRunners = new DateTime(2019, 11, 23);// GetDayToCollect(); + + var client = new ApiClient(TimeSpan.FromSeconds(0), "D_SID=188.172.158.138:JT/OEx87nl5ScspTQk38UsDfuIz94DbCf5CYsIC7WpU; __utmz=36595059.1583064856.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); D_IID=A18DB74E-9ABD-33E1-BF94-96209AF6178E; D_UID=9CDC96FD-4EFE-308E-BC28-2F105AC0B01B; __utmc=36595059; bha-ie-test=true; D_ZID=3F37C446-48FB-3F85-B8D2-66FC90A17473; D_ZUID=27B27203-7708-3F5E-8C01-86A8BF3A21DD; D_HID=BC00CAA4-06EE-39E0-8579-A00DCFA20171; bha_token=%7B%22token%22%3A%22ZjYxM2UwMWEwZmZjNjdhYmM5NzRmMDhmMGVmOTYxNGY%3D%22%2C%22timestamp%22%3A1586699412252%7D; __utma=36595059.34208775.1583064856.1586685187.1586702516.21; __utmt=1; __utmb=36595059.2.10.1586702516"); + while (true) + { + try + { + var dayToCollectResults = dayToCollectRunners; + await LoadPreRaceData(dayToCollectRunners, client); + await LoadResults(dayToCollectResults, client); + dayToCollectRunners = dayToCollectRunners.AddDays(-1); + } + catch(Exception ex) + { + Console.WriteLine(ex.Message); + Console.WriteLine("Enter new cookie:"); + var cookie = Console.ReadLine(); + if (!String.IsNullOrWhiteSpace(cookie)) + client = new ApiClient(TimeSpan.FromSeconds(0), cookie); + } + + } + } + + private static async Task CollectCurrent() + { + var dayToCollectRunners = DateTime.Now.Date; + var dayToCollectResults = dayToCollectRunners.AddDays(-1); + var client = new ApiClient(TimeSpan.FromSeconds(0), "D_SID=188.172.158.138:JT/OEx87nl5ScspTQk38UsDfuIz94DbCf5CYsIC7WpU; __utmz=36595059.1583064856.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); D_ZID=52A68C14-B4B6-3844-8896-9B0E426FEABA; D_ZUID=2E7A90D0-30B7-31B4-BB43-CB2B0DACBDF8; D_HID=0316E576-4AF0-35A5-BEB9-CECB592B4EC2; bha-ie-test=true; __utmc=36595059; D_IID=A18DB74E-9ABD-33E1-BF94-96209AF6178E; D_UID=9CDC96FD-4EFE-308E-BC28-2F105AC0B01B; __utma=36595059.34208775.1583064856.1584046318.1584135333.18; __utmt=1; __utmb=36595059.1.10.1584135333; bha_token=%7B%22token%22%3A%22NTc0OTdjNTRiMjg2ZGYyYzEyYThmMjRlZDZmYmIyMzM%3D%22%2C%22timestamp%22%3A1584135334879%7D"); + await LoadPreRaceData(dayToCollectRunners, client); + await LoadResults(dayToCollectResults, client); + } + + private static async Task LoadPreRaceData(DateTime date, ApiClient client) + { + Console.WriteLine($"Loading fixtures for {date}"); + var fixtures = await client.GetAllFixturesForDay(date.Year, date.Month, date.Day); + using (var db = new Db.HorseRacingDataContext()) + { + foreach (var fixture in fixtures) + { + Console.WriteLine($"Processing fixture {fixture.FixtureName}"); + var dbFixture = ApiFixtureToDbFixture(fixture); + db.Fixtures.Add(dbFixture); + await db.SaveChangesAsync(); + + await LoadRaces(date, client, db, fixture.FixtureYear, fixture.FixtureId); + } + } + } + + private static async Task LoadRaces(DateTime date, ApiClient client, HorseRacingDataContext db, int year, int fixtureId) + { + Console.WriteLine($"Loading races for {date}"); + var races = await client.GetRaces(year, fixtureId); + + foreach (var race in races.Data) + { + AddRace(db, fixtureId, race); + await db.SaveChangesAsync(); + await LoadRunners(date, client, db, race); + await db.SaveChangesAsync(); + } + } + + private static async Task LoadRunners(DateTime date, ApiClient client, HorseRacingDataContext db, ApiModels.Race race) + { + Console.WriteLine($"Loading runners for race id {race.RaceId}"); + var runners = await client.GetRaceRunners(date.Year, race.RaceId, race.DivisionSequence); + foreach (var runner in runners.Data) + { + Console.WriteLine($"Loaded runner {runner.RacehorseName} for race {race.RaceId})"); + db.Runners.Add(new Db.Runner() + { + HeadGearWearingCode = runner.HeadGearWearingCode, + HeadGearWearingSheepSkin = runner.HeadGearWearingSheepSkin, + HeadGearDescription = runner.HeadGearDescription, + HeadGearAbbreviation = runner.HeadGearAbbreviation, + JockeyProfile = runner.JockeyProfile, + CourseWinner = runner.CourseWinner, + DistanceWinner = runner.DistanceWinner, + WindSurgeryFirstRun = runner.WindSurgeryFirstRun, + TrainerId = runner.TrainerId, + TrainerName = runner.TrainerName, + OwnerId = runner.OwnerId, + OwnerName = runner.OwnerName, + WbSilkCode = runner.WbSilkCode, + WbSilkDescription = runner.WbSilkDescription, + SilkImage = runner.SilkImage, + Plus10 = runner.Plus10, + ForecastPriceNumerator = runner.ForecastPriceNumerator, + ForecastPriceDenominator = runner.ForecastPriceDenominator, + WeightText = runner.WeightText, + WeightsJockeyClaiming = runner.WeightsJockeyClaiming, + Odds = runner.Odds, + DecimalOdds = runner.DecimalOdds(), + JockeyName = runner.JockeyName, + Status = (Db.Status)runner.Status, + RaceId = runner.RaceId, + YearOfRace = runner.YearOfRace, + DivisionSequence = runner.DivisionSequence, + AnimalId = runner.AnimalId, + RacehorseName = runner.RacehorseName, + AgeYears = runner.AgeYears, + Bred = runner.Bred, + ClothNumber = runner.ClothNumber, + DrawnStall = runner.DrawnStall, + ReserveNumber = runner.ReserveNumber, + BhaRating = runner.BhaRating, + FormFigures = runner.FormFigures, + WeightValue = runner.WeightValue, + PenaltyValue = runner.PenaltyValue, + SexType = (Db.SexType)runner.SexType, + NonRunnerDeclaredReason = runner.NonRunnerDeclaredReason, + NonRunnerDeclaredDate = runner.NonRunnerDeclaredDate, + NonRunnerDeclaredTime = runner.NonRunnerDeclaredTime, + RunnerNumber = runner.RunnerNumber, + JockeyId = runner.JockeyId, + RaceHorseNameWithoutCountry = runner.RacehorseNameWithoutCountry, + WeightInGrams = runner.WeightInGrams, + LastRuns = runner.LastRuns?.Select(e => new Db.LastRun() + { + Days = e.Days, + RaceType = e.RaceType + }).ToList() + }); + } + } + + private static void AddRace(HorseRacingDataContext db, int fixtureId, ApiModels.Race race) + { + Console.WriteLine($"Saving {race.RaceName}"); + var dbRace = ApiRaceToDbRace(race, fixtureId); + db.Races.Add(dbRace); + + } + + private static Db.Fixture ApiFixtureToDbFixture(ApiModels.Fixture fixture) + { + return new Db.Fixture() + { + GoingUpdatedTime = fixture.GoingUpdatedTime, + GoingUpdatedDate = fixture.GoingUpdatedDate, + FixtureSession = (Db.FixtureSession)fixture.FixtureSession, + AbandonedReasonCode = fixture.AbandonedReasonCode, + Rail = fixture.Rail, + Stalls = fixture.Stalls, + Other = fixture.Other, + Weather = fixture.Weather, + Going = fixture.Going, + MajorEvent = fixture.MajorEvent, + TicketsLink = fixture.TicketsLink, + CourseId = fixture.CourseId, + RacePlanningCode = (Db.RacePlanningCode)fixture.RacePlanningCode, + RacingTrackType = (Db.RacingTrackType)fixture.RacingTrackType, + MeetingId = fixture.MeetingId, + FixtureType = (Db.FixtureType)fixture.FixtureType, + FixtureName = fixture.FixtureName, + NumberOfRaces = fixture.NumberOfRaces, + BcsEvent = fixture.BcsEvent, + BlackTypeRaces = fixture.BlackTypeRaces, + EntriesAvailable = fixture.EntriesAvailable, + RacecardAvailable = fixture.RacecardAvailable, + ResultsAvailable = fixture.ResultsAvailable, + FirstRace = fixture.FirstRace, + CourseName = fixture.CourseName, + Distance = fixture.Distance, + FixtureDate = fixture.FixtureDate, + FixtureYear = fixture.FixtureYear, + FixtureId = fixture.FixtureId + }; + } + + private static Db.Race ApiRaceToDbRace(ApiModels.Race race, int fixtureId) + { + return new Db.Race() + { + DistanceChangeText = race.DistanceChangeText, + BlackTypeRace = race.BlackTypeRace, + AbandonedReasonCode = race.AbandonedReasonCode, + RaceCriteriaRaceType = race.RaceCriteriaRaceType, + DistanceChange = race.DistanceChange, + DistanceText = race.DistanceText, + DistanceValue = race.DistanceValue, + DistanceUnits = race.DistanceUnits, + RawDistanceText = race.RawDistanceText, + RatingBand = race.RatingBand, + RaceClass = race.RaceClass, + PrizeCurrency = race.PrizeCurrency, + PrizeAmount = race.PrizeAmount, + AgeLimit = race.AgeLimit, + RaceName = race.RaceName, + RaceTime = race.RaceTime, + RaceDate = race.RaceDate, + DivisionSequence = race.DivisionSequence, + YearOfRace = race.YearOfRace, + RaceId = race.RaceId, + Plus10 = race.Plus10, + FixtureId = fixtureId + }; + } + + private static async Task LoadResults(DateTime date, ApiClient client) + { + using (var db = new Db.HorseRacingDataContext()) + { + var races = await db.Races.Where(e => e.RaceDate == date.Date).ToListAsync(); + foreach(var race in races) + { + if (race.RaceId != 1684) + continue; + var results = await client.GetRaceResults(race.YearOfRace, race.RaceId, race.DivisionSequence); + foreach (var runnerResult in results.Data) + { + var dbRunnerResult = new Db.RunnerResult() + { + RaceId = runnerResult.RaceId, + YearOfRace = runnerResult.YearOfRace, + DivisionSequence = runnerResult.DivisionSequence, + HorseId = runnerResult.HorseId, + AnimalId = runnerResult.AnimalId, + ResultFinishPos = runnerResult.ResultFinishPos, + Status = runnerResult.Status, + Ran = runnerResult.Ran, + NonRunnerDeclaredReason = runnerResult.NonRunnerDeclaredReason, + NonRunnerDeclaredDate = runnerResult.NonRunnerDeclaredDate, + NonRunnerDeclaredTime = runnerResult.NonRunnerDeclaredTime, + RacehorseName = runnerResult.RacehorseName, + RacehorseNameWithoutConuntry = runnerResult.RacehorseNameWithoutCountry, + AgeYear = runnerResult.AgeYear, + Bred = runnerResult.Bred, + ClothNumber = runnerResult.ClothNumber, + DrawnStall = runnerResult.DrawnStall, + WeightValue = runnerResult.WeightValue, + SexType = runnerResult.SexType, + JockeyId = runnerResult.JockeyId, + JockeyName = runnerResult.JockeyName, + JockeyProfile = runnerResult.JockeyProfile, + TrainerId = runnerResult.TrainerId, + TrainerName = runnerResult.TrainerName, + OwnerId = runnerResult.OwnerId, + OwnerName = runnerResult.OwnerName, + WbSilkCode = runnerResult.WbSilkCode, + WbSilkDescription = runnerResult.WbSilkDescription, + SilkImage = runnerResult.SilkImage, + Plus10 = runnerResult.Plus10, + ResultBtnDistance = runnerResult.ResultBtnDistance, + PositionFinishTime = runnerResult.PositionFinishTime, + BettingRatio = runnerResult.BettingRatio, + PerformanceFigure = runnerResult.PerformanceFigure, + RatingFlat = runnerResult.RatingFlat, + RatingAwt = runnerResult.RatingAwt, + RatingChase = runnerResult.RatingChase, + RatingHurdle = runnerResult.RatingHurdle, + RaceCriteriaRaceType = runnerResult.RaceCriteriaRaceType, + Hro = runnerResult.Hro, + FinishTime = runnerResult.FinishTime, + ResultFinishDNF = runnerResult.ResultFinishDNF, + FinishTimeInMilliseconds = String.IsNullOrWhiteSpace(runnerResult.ResultFinishDNF) ? runnerResult.FinishTimeInMilliseconds() : null, + LossMilliseconds = runnerResult.LossMilliseconds(), + }; + db.RunnerResults.Add(dbRunnerResult); + await db.SaveChangesAsync(); + } + } + } + } + + public static DateTime _dateToCollectRunners = GetDayToCollect(); + public static DateTime GetDayToCollect() + { + using(var db = new Db.HorseRacingDataContext()) + { + var date = db.Races.OrderBy(e => e.RaceDate) + .Select(e => e.RaceDate) + .First() + .Date; + + return date.AddDays(-1); + } + } + } +} diff --git a/AutoBet.Db/AutoBet.Db.csproj b/AutoBet.Db/AutoBet.Db.csproj new file mode 100644 index 0000000..2037c09 --- /dev/null +++ b/AutoBet.Db/AutoBet.Db.csproj @@ -0,0 +1,24 @@ + + + + netcoreapp3.0 + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + diff --git a/AutoBet.Db/BetOdds.cs b/AutoBet.Db/BetOdds.cs new file mode 100644 index 0000000..45554a8 --- /dev/null +++ b/AutoBet.Db/BetOdds.cs @@ -0,0 +1,11 @@ +namespace AutoBet.Db +{ + public class BetOdds + { + public int Id { get; set; } + public OddsType OddsType { get; set; } + public decimal Odds { get; set; } + public decimal Available {get;set;} + public OddsSnapshot OddsSnapshot { get; set; } + } +} diff --git a/AutoBet.Db/Entity.cs b/AutoBet.Db/Entity.cs new file mode 100644 index 0000000..80bbd62 --- /dev/null +++ b/AutoBet.Db/Entity.cs @@ -0,0 +1,12 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace AutoBet.Db +{ + public class Entity + { + [Key] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public string Id { get; set; } + } +} \ No newline at end of file diff --git a/AutoBet.Db/Fixture.cs b/AutoBet.Db/Fixture.cs new file mode 100644 index 0000000..d8c33fd --- /dev/null +++ b/AutoBet.Db/Fixture.cs @@ -0,0 +1,37 @@ +using System; + +namespace AutoBet.Db +{ + public class Fixture : Entity + { + public string GoingUpdatedTime { get; set; } + public string GoingUpdatedDate { get; set; } + public FixtureSession FixtureSession { get; set; } + public int AbandonedReasonCode { get; set; } + public string Rail { get; set; } + public string Stalls { get; set; } + public string Other { get; set; } + public string Weather { get; set; } + public string Going { get; set; } + public int? MajorEvent { get; set; } + public string TicketsLink { get; set; } + public int CourseId { get; set; } + public RacePlanningCode RacePlanningCode { get; set; } + public RacingTrackType RacingTrackType { get; set; } + public int MeetingId { get; set; } + public FixtureType FixtureType { get; set; } + public string FixtureName { get; set; } + public int NumberOfRaces { get; set; } + public int BcsEvent { get; set; } + public int BlackTypeRaces { get; set; } + public bool EntriesAvailable { get; set; } + public bool RacecardAvailable { get; set; } + public bool ResultsAvailable { get; set; } + public DateTime? FirstRace { get; set; } + public string CourseName { get; set; } + public string Distance { get; set; } + public DateTime FixtureDate { get; set; } + public int FixtureYear { get; set; } + public int FixtureId { get; set; } + } +} \ No newline at end of file diff --git a/AutoBet.Db/FixtureSession.cs b/AutoBet.Db/FixtureSession.cs new file mode 100644 index 0000000..e7b9c60 --- /dev/null +++ b/AutoBet.Db/FixtureSession.cs @@ -0,0 +1,9 @@ +namespace AutoBet.Db +{ + public enum FixtureSession + { + Afternoon = 0, + Evening = 1, + Floodlit = 2 + } +} \ No newline at end of file diff --git a/AutoBet.Db/FixtureType.cs b/AutoBet.Db/FixtureType.cs new file mode 100644 index 0000000..ce167e5 --- /dev/null +++ b/AutoBet.Db/FixtureType.cs @@ -0,0 +1,9 @@ +namespace AutoBet.Db +{ + public enum FixtureType + { + Flat = 0, + Jump = 1, + Mixed = 2 + } +} \ No newline at end of file diff --git a/AutoBet.Db/HorseRacingDataContext.cs b/AutoBet.Db/HorseRacingDataContext.cs new file mode 100644 index 0000000..59b585b --- /dev/null +++ b/AutoBet.Db/HorseRacingDataContext.cs @@ -0,0 +1,37 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Data.SqlClient; + +namespace AutoBet.Db +{ + public class HorseRacingDataContext : DbContext + { + public DbSet Races { get; set; } + public DbSet Runners { get; set; } + public DbSet LastRuns { get; set; } + public DbSet RunnerResults { get; set; } + public DbSet OddsSnapshots { get; set; } + public DbSet BetOdds { get; set; } + public DbSet Fixtures { get; set; } + + public static string ConnectionString { get; } = GenerateConnectionString(); + private static string GenerateConnectionString() + { + var connBuilder = new SqlConnectionStringBuilder + { + IntegratedSecurity = true, + InitialCatalog = "AutoBet.DataRecorded2", + DataSource = ".\\SQLEXPRESS", + ConnectTimeout = (int)TimeSpan.FromMinutes(2).TotalSeconds + }; + return connBuilder.ToString(); + } + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + base.OnConfiguring(optionsBuilder); + + + optionsBuilder.UseSqlServer(ConnectionString); + } + } +} diff --git a/AutoBet.Db/LastRun.cs b/AutoBet.Db/LastRun.cs new file mode 100644 index 0000000..f111379 --- /dev/null +++ b/AutoBet.Db/LastRun.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace AutoBet.Db +{ + public partial class LastRun + { + public int Id { get; set; } + public string RaceType { get; set; } + public int Days { get; set; } + } +} diff --git a/AutoBet.Db/Migrations/20191229213205_Intialize.Designer.cs b/AutoBet.Db/Migrations/20191229213205_Intialize.Designer.cs new file mode 100644 index 0000000..81d7b5d --- /dev/null +++ b/AutoBet.Db/Migrations/20191229213205_Intialize.Designer.cs @@ -0,0 +1,83 @@ +// +using System; +using AutoBet.Db; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace AutoBet.Db.Migrations +{ + [DbContext(typeof(HorseRacingDataContext))] + [Migration("20191229213205_Intialize")] + partial class Intialize + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Available") + .HasColumnType("decimal(18,2)"); + + b.Property("Odds") + .HasColumnType("decimal(18,2)"); + + b.Property("OddsSnapshotId") + .HasColumnType("int"); + + b.Property("OddsType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OddsSnapshotId"); + + b.ToTable("BetOdds"); + }); + + modelBuilder.Entity("AutoBet.Db.OddsSnapshot", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("EventName") + .HasColumnType("nvarchar(max)"); + + b.Property("HorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("SnapshotDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("OddsSnapshots"); + }); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.HasOne("AutoBet.Db.OddsSnapshot", "OddsSnapshot") + .WithMany("Odds") + .HasForeignKey("OddsSnapshotId"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AutoBet.Db/Migrations/20191229213205_Intialize.cs b/AutoBet.Db/Migrations/20191229213205_Intialize.cs new file mode 100644 index 0000000..b36b61f --- /dev/null +++ b/AutoBet.Db/Migrations/20191229213205_Intialize.cs @@ -0,0 +1,63 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace AutoBet.Db.Migrations +{ + public partial class Intialize : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "OddsSnapshots", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + EventName = table.Column(nullable: true), + HorseName = table.Column(nullable: true), + JockeyName = table.Column(nullable: true), + SnapshotDate = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_OddsSnapshots", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "BetOdds", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + OddsType = table.Column(nullable: false), + Odds = table.Column(nullable: false), + Available = table.Column(nullable: false), + OddsSnapshotId = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_BetOdds", x => x.Id); + table.ForeignKey( + name: "FK_BetOdds_OddsSnapshots_OddsSnapshotId", + column: x => x.OddsSnapshotId, + principalTable: "OddsSnapshots", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateIndex( + name: "IX_BetOdds_OddsSnapshotId", + table: "BetOdds", + column: "OddsSnapshotId"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "BetOdds"); + + migrationBuilder.DropTable( + name: "OddsSnapshots"); + } + } +} diff --git a/AutoBet.Db/Migrations/20200223123134_RaceDetail.Designer.cs b/AutoBet.Db/Migrations/20200223123134_RaceDetail.Designer.cs new file mode 100644 index 0000000..4e07d15 --- /dev/null +++ b/AutoBet.Db/Migrations/20200223123134_RaceDetail.Designer.cs @@ -0,0 +1,338 @@ +// +using System; +using AutoBet.Db; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace AutoBet.Db.Migrations +{ + [DbContext(typeof(HorseRacingDataContext))] + [Migration("20200223123134_RaceDetail")] + partial class RaceDetail + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Available") + .HasColumnType("decimal(18,2)"); + + b.Property("Odds") + .HasColumnType("decimal(18,2)"); + + b.Property("OddsSnapshotId") + .HasColumnType("int"); + + b.Property("OddsType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OddsSnapshotId"); + + b.ToTable("BetOdds"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Days") + .HasColumnType("int"); + + b.Property("RaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RunnerId"); + + b.ToTable("LastRuns"); + }); + + modelBuilder.Entity("AutoBet.Db.OddsSnapshot", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("EventName") + .HasColumnType("nvarchar(max)"); + + b.Property("HorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("SnapshotDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("OddsSnapshots"); + }); + + modelBuilder.Entity("AutoBet.Db.Race", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AbandonedReasonCode") + .HasColumnType("int"); + + b.Property("AgeLimit") + .HasColumnType("nvarchar(max)"); + + b.Property("BlackTypeRace") + .HasColumnType("int"); + + b.Property("DistanceChange") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceChangeText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceUnits") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceValue") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("bit"); + + b.Property("PrizeAmount") + .HasColumnType("int"); + + b.Property("PrizeCurrency") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceClass") + .HasColumnType("int"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceDate") + .HasColumnType("datetime2"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RaceName") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceTime") + .HasColumnType("time"); + + b.Property("RatingBand") + .HasColumnType("nvarchar(max)"); + + b.Property("RawDistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Races"); + }); + + modelBuilder.Entity("AutoBet.Db.Runner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYears") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BhaRating") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("CourseWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("ForecastPriceDenominator") + .HasColumnType("nvarchar(max)"); + + b.Property("ForecastPriceNumerator") + .HasColumnType("nvarchar(max)"); + + b.Property("FormFigures") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearAbbreviation") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingCode") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingSheepSkin") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("nvarchar(max)"); + + b.Property("Odds") + .HasColumnType("nvarchar(max)"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PenaltyValue") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("ReserveNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerNumber") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("int"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightText") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightsJockeyClaiming") + .HasColumnType("int"); + + b.Property("WindSurgeryFirstRun") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Runners"); + }); + + modelBuilder.Entity("AutoBet.Db.RunnerResult", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.ToTable("RunnerResults"); + }); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.HasOne("AutoBet.Db.OddsSnapshot", "OddsSnapshot") + .WithMany("Odds") + .HasForeignKey("OddsSnapshotId"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.HasOne("AutoBet.Db.Runner", null) + .WithMany("LastRuns") + .HasForeignKey("RunnerId"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AutoBet.Db/Migrations/20200223123134_RaceDetail.cs b/AutoBet.Db/Migrations/20200223123134_RaceDetail.cs new file mode 100644 index 0000000..50e4bd0 --- /dev/null +++ b/AutoBet.Db/Migrations/20200223123134_RaceDetail.cs @@ -0,0 +1,149 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace AutoBet.Db.Migrations +{ + public partial class RaceDetail : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Races", + columns: table => new + { + Id = table.Column(nullable: false), + DistanceChangeText = table.Column(nullable: true), + BlackTypeRace = table.Column(nullable: false), + AbandonedReasonCode = table.Column(nullable: false), + RaceCriteriaRaceType = table.Column(nullable: true), + DistanceChange = table.Column(nullable: true), + DistanceText = table.Column(nullable: true), + DistanceValue = table.Column(nullable: false), + DistanceUnits = table.Column(nullable: true), + RawDistanceText = table.Column(nullable: true), + RatingBand = table.Column(nullable: true), + RaceClass = table.Column(nullable: false), + PrizeCurrency = table.Column(nullable: true), + PrizeAmount = table.Column(nullable: false), + AgeLimit = table.Column(nullable: true), + RaceName = table.Column(nullable: true), + RaceTime = table.Column(nullable: false), + RaceDate = table.Column(nullable: false), + DivisionSequence = table.Column(nullable: false), + YearOfRace = table.Column(nullable: false), + RaceId = table.Column(nullable: false), + Plus10 = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Races", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "RunnerResults", + columns: table => new + { + Id = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_RunnerResults", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Runners", + columns: table => new + { + Id = table.Column(nullable: false), + HeadGearWearingCode = table.Column(nullable: true), + HeadGearWearingSheepSkin = table.Column(nullable: false), + HeadGearDescription = table.Column(nullable: true), + HeadGearAbbreviation = table.Column(nullable: true), + JockeyProfile = table.Column(nullable: false), + CourseWinner = table.Column(nullable: true), + DistanceWinner = table.Column(nullable: true), + WindSurgeryFirstRun = table.Column(nullable: true), + TrainerId = table.Column(nullable: false), + TrainerName = table.Column(nullable: true), + OwnerId = table.Column(nullable: false), + OwnerName = table.Column(nullable: true), + WbSilkCode = table.Column(nullable: true), + WbSilkDescription = table.Column(nullable: true), + SilkImage = table.Column(nullable: true), + Plus10 = table.Column(nullable: false), + ForecastPriceNumerator = table.Column(nullable: true), + ForecastPriceDenominator = table.Column(nullable: true), + WeightText = table.Column(nullable: true), + WeightsJockeyClaiming = table.Column(nullable: false), + Odds = table.Column(nullable: true), + JockeyName = table.Column(nullable: true), + Status = table.Column(nullable: false), + RaceId = table.Column(nullable: false), + YearOfRace = table.Column(nullable: false), + DivisionSequence = table.Column(nullable: false), + AnimalId = table.Column(nullable: false), + RacehorseName = table.Column(nullable: true), + AgeYears = table.Column(nullable: false), + Bred = table.Column(nullable: true), + ClothNumber = table.Column(nullable: false), + DrawnStall = table.Column(nullable: true), + ReserveNumber = table.Column(nullable: true), + BhaRating = table.Column(nullable: true), + FormFigures = table.Column(nullable: true), + WeightValue = table.Column(nullable: true), + PenaltyValue = table.Column(nullable: false), + SexType = table.Column(nullable: false), + NonRunnerDeclaredReason = table.Column(nullable: true), + NonRunnerDeclaredDate = table.Column(nullable: true), + NonRunnerDeclaredTime = table.Column(nullable: true), + RunnerNumber = table.Column(nullable: false), + JockeyId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Runners", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "LastRuns", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + RaceType = table.Column(nullable: true), + Days = table.Column(nullable: false), + RunnerId = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_LastRuns", x => x.Id); + table.ForeignKey( + name: "FK_LastRuns_Runners_RunnerId", + column: x => x.RunnerId, + principalTable: "Runners", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateIndex( + name: "IX_LastRuns_RunnerId", + table: "LastRuns", + column: "RunnerId"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "LastRuns"); + + migrationBuilder.DropTable( + name: "Races"); + + migrationBuilder.DropTable( + name: "RunnerResults"); + + migrationBuilder.DropTable( + name: "Runners"); + } + } +} diff --git a/AutoBet.Db/Migrations/20200227201354_RaceRunnerDetails.Designer.cs b/AutoBet.Db/Migrations/20200227201354_RaceRunnerDetails.Designer.cs new file mode 100644 index 0000000..169ede2 --- /dev/null +++ b/AutoBet.Db/Migrations/20200227201354_RaceRunnerDetails.Designer.cs @@ -0,0 +1,467 @@ +// +using System; +using AutoBet.Db; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace AutoBet.Db.Migrations +{ + [DbContext(typeof(HorseRacingDataContext))] + [Migration("20200227201354_RaceRunnerDetails")] + partial class RaceRunnerDetails + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Available") + .HasColumnType("decimal(18,2)"); + + b.Property("Odds") + .HasColumnType("decimal(18,2)"); + + b.Property("OddsSnapshotId") + .HasColumnType("int"); + + b.Property("OddsType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OddsSnapshotId"); + + b.ToTable("BetOdds"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Days") + .HasColumnType("int"); + + b.Property("RaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RunnerId"); + + b.ToTable("LastRuns"); + }); + + modelBuilder.Entity("AutoBet.Db.OddsSnapshot", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("EventName") + .HasColumnType("nvarchar(max)"); + + b.Property("HorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("SnapshotDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("OddsSnapshots"); + }); + + modelBuilder.Entity("AutoBet.Db.Race", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AbandonedReasonCode") + .HasColumnType("int"); + + b.Property("AgeLimit") + .HasColumnType("nvarchar(max)"); + + b.Property("BlackTypeRace") + .HasColumnType("int"); + + b.Property("DistanceChange") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceChangeText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceUnits") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceValue") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("bit"); + + b.Property("PrizeAmount") + .HasColumnType("int"); + + b.Property("PrizeCurrency") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceClass") + .HasColumnType("int"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceDate") + .HasColumnType("datetime2"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RaceName") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceTime") + .HasColumnType("time"); + + b.Property("RatingBand") + .HasColumnType("nvarchar(max)"); + + b.Property("RawDistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Races"); + }); + + modelBuilder.Entity("AutoBet.Db.Runner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYears") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BhaRating") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("CourseWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("ForecastPriceDenominator") + .HasColumnType("nvarchar(max)"); + + b.Property("ForecastPriceNumerator") + .HasColumnType("nvarchar(max)"); + + b.Property("FormFigures") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearAbbreviation") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingCode") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingSheepSkin") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("nvarchar(max)"); + + b.Property("Odds") + .HasColumnType("nvarchar(max)"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PenaltyValue") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("ReserveNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerNumber") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("int"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightText") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightsJockeyClaiming") + .HasColumnType("int"); + + b.Property("WindSurgeryFirstRun") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Runners"); + }); + + modelBuilder.Entity("AutoBet.Db.RunnerResult", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYear") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BettingRatio") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("FinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("FinishTimeInMilliseconds") + .HasColumnType("int"); + + b.Property("HorseId") + .HasColumnType("int"); + + b.Property("Hro") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("LossMilliseconds") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("datetime2"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("time"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PerformanceFigure") + .HasColumnType("nvarchar(max)"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("PositionFinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("RacehorseNameWithoutConuntry") + .HasColumnType("nvarchar(max)"); + + b.Property("Ran") + .HasColumnType("int"); + + b.Property("RatingAwt") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingChase") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingFlat") + .HasColumnType("int"); + + b.Property("RatingHurdle") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultBtnDistance") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishPos") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("nvarchar(max)"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("nvarchar(max)"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("int"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("RunnerResults"); + }); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.HasOne("AutoBet.Db.OddsSnapshot", "OddsSnapshot") + .WithMany("Odds") + .HasForeignKey("OddsSnapshotId"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.HasOne("AutoBet.Db.Runner", null) + .WithMany("LastRuns") + .HasForeignKey("RunnerId"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AutoBet.Db/Migrations/20200227201354_RaceRunnerDetails.cs b/AutoBet.Db/Migrations/20200227201354_RaceRunnerDetails.cs new file mode 100644 index 0000000..6c420c0 --- /dev/null +++ b/AutoBet.Db/Migrations/20200227201354_RaceRunnerDetails.cs @@ -0,0 +1,412 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace AutoBet.Db.Migrations +{ + public partial class RaceRunnerDetails : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "AgeYear", + table: "RunnerResults", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "AnimalId", + table: "RunnerResults", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "BettingRatio", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "Bred", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "ClothNumber", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "DivisionSequence", + table: "RunnerResults", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "DrawnStall", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "FinishTime", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "FinishTimeInMilliseconds", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "HorseId", + table: "RunnerResults", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "Hro", + table: "RunnerResults", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "JockeyId", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "JockeyName", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "JockeyProfile", + table: "RunnerResults", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "LossMilliseconds", + table: "RunnerResults", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "NonRunnerDeclaredDate", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "NonRunnerDeclaredReason", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "NonRunnerDeclaredTime", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "OwnerId", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "OwnerName", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "PerformanceFigure", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "Plus10", + table: "RunnerResults", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "PositionFinishTime", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "RaceCriteriaRaceType", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "RaceId", + table: "RunnerResults", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "RacehorseName", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "RacehorseNameWithoutConuntry", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "Ran", + table: "RunnerResults", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "RatingAwt", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "RatingChase", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "RatingFlat", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "RatingHurdle", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "ResultBtnDistance", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "ResultFinishPos", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "SexType", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "SilkImage", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "Status", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "TrainerId", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "TrainerName", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "WbSilkCode", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "WbSilkDescription", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "WeightValue", + table: "RunnerResults", + nullable: true); + + migrationBuilder.AddColumn( + name: "YearOfRace", + table: "RunnerResults", + nullable: false, + defaultValue: 0); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "AgeYear", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "AnimalId", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "BettingRatio", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "Bred", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "ClothNumber", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "DivisionSequence", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "DrawnStall", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "FinishTime", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "FinishTimeInMilliseconds", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "HorseId", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "Hro", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "JockeyId", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "JockeyName", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "JockeyProfile", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "LossMilliseconds", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "NonRunnerDeclaredDate", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "NonRunnerDeclaredReason", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "NonRunnerDeclaredTime", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "OwnerId", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "OwnerName", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "PerformanceFigure", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "Plus10", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "PositionFinishTime", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "RaceCriteriaRaceType", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "RaceId", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "RacehorseName", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "RacehorseNameWithoutConuntry", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "Ran", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "RatingAwt", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "RatingChase", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "RatingFlat", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "RatingHurdle", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "ResultBtnDistance", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "ResultFinishPos", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "SexType", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "SilkImage", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "Status", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "TrainerId", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "TrainerName", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "WbSilkCode", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "WbSilkDescription", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "WeightValue", + table: "RunnerResults"); + + migrationBuilder.DropColumn( + name: "YearOfRace", + table: "RunnerResults"); + } + } +} diff --git a/AutoBet.Db/Migrations/20200227234057_RaceRunnerDetailsTime.Designer.cs b/AutoBet.Db/Migrations/20200227234057_RaceRunnerDetailsTime.Designer.cs new file mode 100644 index 0000000..f8037ba --- /dev/null +++ b/AutoBet.Db/Migrations/20200227234057_RaceRunnerDetailsTime.Designer.cs @@ -0,0 +1,467 @@ +// +using System; +using AutoBet.Db; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace AutoBet.Db.Migrations +{ + [DbContext(typeof(HorseRacingDataContext))] + [Migration("20200227234057_RaceRunnerDetailsTime")] + partial class RaceRunnerDetailsTime + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Available") + .HasColumnType("decimal(18,2)"); + + b.Property("Odds") + .HasColumnType("decimal(18,2)"); + + b.Property("OddsSnapshotId") + .HasColumnType("int"); + + b.Property("OddsType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OddsSnapshotId"); + + b.ToTable("BetOdds"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Days") + .HasColumnType("int"); + + b.Property("RaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RunnerId"); + + b.ToTable("LastRuns"); + }); + + modelBuilder.Entity("AutoBet.Db.OddsSnapshot", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("EventName") + .HasColumnType("nvarchar(max)"); + + b.Property("HorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("SnapshotDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("OddsSnapshots"); + }); + + modelBuilder.Entity("AutoBet.Db.Race", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AbandonedReasonCode") + .HasColumnType("int"); + + b.Property("AgeLimit") + .HasColumnType("nvarchar(max)"); + + b.Property("BlackTypeRace") + .HasColumnType("int"); + + b.Property("DistanceChange") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceChangeText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceUnits") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceValue") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("bit"); + + b.Property("PrizeAmount") + .HasColumnType("int"); + + b.Property("PrizeCurrency") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceClass") + .HasColumnType("int"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceDate") + .HasColumnType("datetime2"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RaceName") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceTime") + .HasColumnType("time"); + + b.Property("RatingBand") + .HasColumnType("nvarchar(max)"); + + b.Property("RawDistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Races"); + }); + + modelBuilder.Entity("AutoBet.Db.Runner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYears") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BhaRating") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("CourseWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("ForecastPriceDenominator") + .HasColumnType("nvarchar(max)"); + + b.Property("ForecastPriceNumerator") + .HasColumnType("nvarchar(max)"); + + b.Property("FormFigures") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearAbbreviation") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingCode") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingSheepSkin") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("nvarchar(max)"); + + b.Property("Odds") + .HasColumnType("nvarchar(max)"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PenaltyValue") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("ReserveNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerNumber") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("int"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightText") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightsJockeyClaiming") + .HasColumnType("int"); + + b.Property("WindSurgeryFirstRun") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Runners"); + }); + + modelBuilder.Entity("AutoBet.Db.RunnerResult", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYear") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BettingRatio") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("FinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("FinishTimeInMilliseconds") + .HasColumnType("int"); + + b.Property("HorseId") + .HasColumnType("int"); + + b.Property("Hro") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("LossMilliseconds") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("datetime2"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("time"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PerformanceFigure") + .HasColumnType("nvarchar(max)"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("PositionFinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("RacehorseNameWithoutConuntry") + .HasColumnType("nvarchar(max)"); + + b.Property("Ran") + .HasColumnType("int"); + + b.Property("RatingAwt") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingChase") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingFlat") + .HasColumnType("int"); + + b.Property("RatingHurdle") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultBtnDistance") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishPos") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("nvarchar(max)"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("nvarchar(max)"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("int"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("RunnerResults"); + }); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.HasOne("AutoBet.Db.OddsSnapshot", "OddsSnapshot") + .WithMany("Odds") + .HasForeignKey("OddsSnapshotId"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.HasOne("AutoBet.Db.Runner", null) + .WithMany("LastRuns") + .HasForeignKey("RunnerId"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AutoBet.Db/Migrations/20200227234057_RaceRunnerDetailsTime.cs b/AutoBet.Db/Migrations/20200227234057_RaceRunnerDetailsTime.cs new file mode 100644 index 0000000..b2e59dd --- /dev/null +++ b/AutoBet.Db/Migrations/20200227234057_RaceRunnerDetailsTime.cs @@ -0,0 +1,28 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace AutoBet.Db.Migrations +{ + public partial class RaceRunnerDetailsTime : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "LossMilliseconds", + table: "RunnerResults", + nullable: true, + oldClrType: typeof(int), + oldType: "int"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "LossMilliseconds", + table: "RunnerResults", + type: "int", + nullable: false, + oldClrType: typeof(int), + oldNullable: true); + } + } +} diff --git a/AutoBet.Db/Migrations/20200228205907_DNF.Designer.cs b/AutoBet.Db/Migrations/20200228205907_DNF.Designer.cs new file mode 100644 index 0000000..622c6d4 --- /dev/null +++ b/AutoBet.Db/Migrations/20200228205907_DNF.Designer.cs @@ -0,0 +1,470 @@ +// +using System; +using AutoBet.Db; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace AutoBet.Db.Migrations +{ + [DbContext(typeof(HorseRacingDataContext))] + [Migration("20200228205907_DNF")] + partial class DNF + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Available") + .HasColumnType("decimal(18,2)"); + + b.Property("Odds") + .HasColumnType("decimal(18,2)"); + + b.Property("OddsSnapshotId") + .HasColumnType("int"); + + b.Property("OddsType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OddsSnapshotId"); + + b.ToTable("BetOdds"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Days") + .HasColumnType("int"); + + b.Property("RaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RunnerId"); + + b.ToTable("LastRuns"); + }); + + modelBuilder.Entity("AutoBet.Db.OddsSnapshot", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("EventName") + .HasColumnType("nvarchar(max)"); + + b.Property("HorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("SnapshotDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("OddsSnapshots"); + }); + + modelBuilder.Entity("AutoBet.Db.Race", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AbandonedReasonCode") + .HasColumnType("int"); + + b.Property("AgeLimit") + .HasColumnType("nvarchar(max)"); + + b.Property("BlackTypeRace") + .HasColumnType("int"); + + b.Property("DistanceChange") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceChangeText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceUnits") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceValue") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("bit"); + + b.Property("PrizeAmount") + .HasColumnType("int"); + + b.Property("PrizeCurrency") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceClass") + .HasColumnType("int"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceDate") + .HasColumnType("datetime2"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RaceName") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceTime") + .HasColumnType("time"); + + b.Property("RatingBand") + .HasColumnType("nvarchar(max)"); + + b.Property("RawDistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Races"); + }); + + modelBuilder.Entity("AutoBet.Db.Runner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYears") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BhaRating") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("CourseWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("ForecastPriceDenominator") + .HasColumnType("nvarchar(max)"); + + b.Property("ForecastPriceNumerator") + .HasColumnType("nvarchar(max)"); + + b.Property("FormFigures") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearAbbreviation") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingCode") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingSheepSkin") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("nvarchar(max)"); + + b.Property("Odds") + .HasColumnType("nvarchar(max)"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PenaltyValue") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("ReserveNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerNumber") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("int"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightText") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightsJockeyClaiming") + .HasColumnType("int"); + + b.Property("WindSurgeryFirstRun") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Runners"); + }); + + modelBuilder.Entity("AutoBet.Db.RunnerResult", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYear") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BettingRatio") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("FinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("FinishTimeInMilliseconds") + .HasColumnType("int"); + + b.Property("HorseId") + .HasColumnType("int"); + + b.Property("Hro") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("LossMilliseconds") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("datetime2"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("time"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PerformanceFigure") + .HasColumnType("nvarchar(max)"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("PositionFinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("RacehorseNameWithoutConuntry") + .HasColumnType("nvarchar(max)"); + + b.Property("Ran") + .HasColumnType("int"); + + b.Property("RatingAwt") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingChase") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingFlat") + .HasColumnType("int"); + + b.Property("RatingHurdle") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultBtnDistance") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishDNF") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishPos") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("nvarchar(max)"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("nvarchar(max)"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("int"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("RunnerResults"); + }); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.HasOne("AutoBet.Db.OddsSnapshot", "OddsSnapshot") + .WithMany("Odds") + .HasForeignKey("OddsSnapshotId"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.HasOne("AutoBet.Db.Runner", null) + .WithMany("LastRuns") + .HasForeignKey("RunnerId"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AutoBet.Db/Migrations/20200228205907_DNF.cs b/AutoBet.Db/Migrations/20200228205907_DNF.cs new file mode 100644 index 0000000..5795bc0 --- /dev/null +++ b/AutoBet.Db/Migrations/20200228205907_DNF.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace AutoBet.Db.Migrations +{ + public partial class DNF : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "ResultFinishDNF", + table: "RunnerResults", + nullable: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "ResultFinishDNF", + table: "RunnerResults"); + } + } +} diff --git a/AutoBet.Db/Migrations/20200228230741_DecimalOdds.Designer.cs b/AutoBet.Db/Migrations/20200228230741_DecimalOdds.Designer.cs new file mode 100644 index 0000000..85d1c7a --- /dev/null +++ b/AutoBet.Db/Migrations/20200228230741_DecimalOdds.Designer.cs @@ -0,0 +1,473 @@ +// +using System; +using AutoBet.Db; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace AutoBet.Db.Migrations +{ + [DbContext(typeof(HorseRacingDataContext))] + [Migration("20200228230741_DecimalOdds")] + partial class DecimalOdds + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Available") + .HasColumnType("decimal(18,2)"); + + b.Property("Odds") + .HasColumnType("decimal(18,2)"); + + b.Property("OddsSnapshotId") + .HasColumnType("int"); + + b.Property("OddsType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OddsSnapshotId"); + + b.ToTable("BetOdds"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Days") + .HasColumnType("int"); + + b.Property("RaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RunnerId"); + + b.ToTable("LastRuns"); + }); + + modelBuilder.Entity("AutoBet.Db.OddsSnapshot", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("EventName") + .HasColumnType("nvarchar(max)"); + + b.Property("HorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("SnapshotDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("OddsSnapshots"); + }); + + modelBuilder.Entity("AutoBet.Db.Race", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AbandonedReasonCode") + .HasColumnType("int"); + + b.Property("AgeLimit") + .HasColumnType("nvarchar(max)"); + + b.Property("BlackTypeRace") + .HasColumnType("int"); + + b.Property("DistanceChange") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceChangeText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceUnits") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceValue") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("bit"); + + b.Property("PrizeAmount") + .HasColumnType("int"); + + b.Property("PrizeCurrency") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceClass") + .HasColumnType("int"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceDate") + .HasColumnType("datetime2"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RaceName") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceTime") + .HasColumnType("time"); + + b.Property("RatingBand") + .HasColumnType("nvarchar(max)"); + + b.Property("RawDistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Races"); + }); + + modelBuilder.Entity("AutoBet.Db.Runner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYears") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BhaRating") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("CourseWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DecimailOdds") + .HasColumnType("decimal(18,2)"); + + b.Property("DistanceWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("ForecastPriceDenominator") + .HasColumnType("nvarchar(max)"); + + b.Property("ForecastPriceNumerator") + .HasColumnType("nvarchar(max)"); + + b.Property("FormFigures") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearAbbreviation") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingCode") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingSheepSkin") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("nvarchar(max)"); + + b.Property("Odds") + .HasColumnType("nvarchar(max)"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PenaltyValue") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("ReserveNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerNumber") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("int"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightText") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightsJockeyClaiming") + .HasColumnType("int"); + + b.Property("WindSurgeryFirstRun") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Runners"); + }); + + modelBuilder.Entity("AutoBet.Db.RunnerResult", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYear") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BettingRatio") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("FinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("FinishTimeInMilliseconds") + .HasColumnType("int"); + + b.Property("HorseId") + .HasColumnType("int"); + + b.Property("Hro") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("LossMilliseconds") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("datetime2"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("time"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PerformanceFigure") + .HasColumnType("nvarchar(max)"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("PositionFinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("RacehorseNameWithoutConuntry") + .HasColumnType("nvarchar(max)"); + + b.Property("Ran") + .HasColumnType("int"); + + b.Property("RatingAwt") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingChase") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingFlat") + .HasColumnType("int"); + + b.Property("RatingHurdle") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultBtnDistance") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishDNF") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishPos") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("nvarchar(max)"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("nvarchar(max)"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("int"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("RunnerResults"); + }); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.HasOne("AutoBet.Db.OddsSnapshot", "OddsSnapshot") + .WithMany("Odds") + .HasForeignKey("OddsSnapshotId"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.HasOne("AutoBet.Db.Runner", null) + .WithMany("LastRuns") + .HasForeignKey("RunnerId"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AutoBet.Db/Migrations/20200228230741_DecimalOdds.cs b/AutoBet.Db/Migrations/20200228230741_DecimalOdds.cs new file mode 100644 index 0000000..8b675e2 --- /dev/null +++ b/AutoBet.Db/Migrations/20200228230741_DecimalOdds.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace AutoBet.Db.Migrations +{ + public partial class DecimalOdds : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "DecimailOdds", + table: "Runners", + nullable: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "DecimailOdds", + table: "Runners"); + } + } +} diff --git a/AutoBet.Db/Migrations/20200228231116_DecimalOddsRename.Designer.cs b/AutoBet.Db/Migrations/20200228231116_DecimalOddsRename.Designer.cs new file mode 100644 index 0000000..e2e5cd6 --- /dev/null +++ b/AutoBet.Db/Migrations/20200228231116_DecimalOddsRename.Designer.cs @@ -0,0 +1,473 @@ +// +using System; +using AutoBet.Db; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace AutoBet.Db.Migrations +{ + [DbContext(typeof(HorseRacingDataContext))] + [Migration("20200228231116_DecimalOddsRename")] + partial class DecimalOddsRename + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Available") + .HasColumnType("decimal(18,2)"); + + b.Property("Odds") + .HasColumnType("decimal(18,2)"); + + b.Property("OddsSnapshotId") + .HasColumnType("int"); + + b.Property("OddsType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OddsSnapshotId"); + + b.ToTable("BetOdds"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Days") + .HasColumnType("int"); + + b.Property("RaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RunnerId"); + + b.ToTable("LastRuns"); + }); + + modelBuilder.Entity("AutoBet.Db.OddsSnapshot", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("EventName") + .HasColumnType("nvarchar(max)"); + + b.Property("HorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("SnapshotDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("OddsSnapshots"); + }); + + modelBuilder.Entity("AutoBet.Db.Race", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AbandonedReasonCode") + .HasColumnType("int"); + + b.Property("AgeLimit") + .HasColumnType("nvarchar(max)"); + + b.Property("BlackTypeRace") + .HasColumnType("int"); + + b.Property("DistanceChange") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceChangeText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceUnits") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceValue") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("bit"); + + b.Property("PrizeAmount") + .HasColumnType("int"); + + b.Property("PrizeCurrency") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceClass") + .HasColumnType("int"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceDate") + .HasColumnType("datetime2"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RaceName") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceTime") + .HasColumnType("time"); + + b.Property("RatingBand") + .HasColumnType("nvarchar(max)"); + + b.Property("RawDistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Races"); + }); + + modelBuilder.Entity("AutoBet.Db.Runner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYears") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BhaRating") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("CourseWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DecimalOdds") + .HasColumnType("decimal(18,2)"); + + b.Property("DistanceWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("ForecastPriceDenominator") + .HasColumnType("nvarchar(max)"); + + b.Property("ForecastPriceNumerator") + .HasColumnType("nvarchar(max)"); + + b.Property("FormFigures") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearAbbreviation") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingCode") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingSheepSkin") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("nvarchar(max)"); + + b.Property("Odds") + .HasColumnType("nvarchar(max)"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PenaltyValue") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("ReserveNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerNumber") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("int"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightText") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightsJockeyClaiming") + .HasColumnType("int"); + + b.Property("WindSurgeryFirstRun") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Runners"); + }); + + modelBuilder.Entity("AutoBet.Db.RunnerResult", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYear") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BettingRatio") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("FinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("FinishTimeInMilliseconds") + .HasColumnType("int"); + + b.Property("HorseId") + .HasColumnType("int"); + + b.Property("Hro") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("LossMilliseconds") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("datetime2"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("time"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PerformanceFigure") + .HasColumnType("nvarchar(max)"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("PositionFinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("RacehorseNameWithoutConuntry") + .HasColumnType("nvarchar(max)"); + + b.Property("Ran") + .HasColumnType("int"); + + b.Property("RatingAwt") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingChase") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingFlat") + .HasColumnType("int"); + + b.Property("RatingHurdle") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultBtnDistance") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishDNF") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishPos") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("nvarchar(max)"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("nvarchar(max)"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("int"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("RunnerResults"); + }); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.HasOne("AutoBet.Db.OddsSnapshot", "OddsSnapshot") + .WithMany("Odds") + .HasForeignKey("OddsSnapshotId"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.HasOne("AutoBet.Db.Runner", null) + .WithMany("LastRuns") + .HasForeignKey("RunnerId"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AutoBet.Db/Migrations/20200228231116_DecimalOddsRename.cs b/AutoBet.Db/Migrations/20200228231116_DecimalOddsRename.cs new file mode 100644 index 0000000..9cf8bee --- /dev/null +++ b/AutoBet.Db/Migrations/20200228231116_DecimalOddsRename.cs @@ -0,0 +1,32 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace AutoBet.Db.Migrations +{ + public partial class DecimalOddsRename : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "DecimailOdds", + table: "Runners"); + + migrationBuilder.AddColumn( + name: "DecimalOdds", + table: "Runners", + nullable: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "DecimalOdds", + table: "Runners"); + + migrationBuilder.AddColumn( + name: "DecimailOdds", + table: "Runners", + type: "decimal(18,2)", + nullable: true); + } + } +} diff --git a/AutoBet.Db/Migrations/20200228233655_RacehorseNameNoCountry.Designer.cs b/AutoBet.Db/Migrations/20200228233655_RacehorseNameNoCountry.Designer.cs new file mode 100644 index 0000000..0c807fe --- /dev/null +++ b/AutoBet.Db/Migrations/20200228233655_RacehorseNameNoCountry.Designer.cs @@ -0,0 +1,476 @@ +// +using System; +using AutoBet.Db; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace AutoBet.Db.Migrations +{ + [DbContext(typeof(HorseRacingDataContext))] + [Migration("20200228233655_RacehorseNameNoCountry")] + partial class RacehorseNameNoCountry + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Available") + .HasColumnType("decimal(18,2)"); + + b.Property("Odds") + .HasColumnType("decimal(18,2)"); + + b.Property("OddsSnapshotId") + .HasColumnType("int"); + + b.Property("OddsType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OddsSnapshotId"); + + b.ToTable("BetOdds"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Days") + .HasColumnType("int"); + + b.Property("RaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RunnerId"); + + b.ToTable("LastRuns"); + }); + + modelBuilder.Entity("AutoBet.Db.OddsSnapshot", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("EventName") + .HasColumnType("nvarchar(max)"); + + b.Property("HorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("SnapshotDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("OddsSnapshots"); + }); + + modelBuilder.Entity("AutoBet.Db.Race", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AbandonedReasonCode") + .HasColumnType("int"); + + b.Property("AgeLimit") + .HasColumnType("nvarchar(max)"); + + b.Property("BlackTypeRace") + .HasColumnType("int"); + + b.Property("DistanceChange") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceChangeText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceUnits") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceValue") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("bit"); + + b.Property("PrizeAmount") + .HasColumnType("int"); + + b.Property("PrizeCurrency") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceClass") + .HasColumnType("int"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceDate") + .HasColumnType("datetime2"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RaceName") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceTime") + .HasColumnType("time"); + + b.Property("RatingBand") + .HasColumnType("nvarchar(max)"); + + b.Property("RawDistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Races"); + }); + + modelBuilder.Entity("AutoBet.Db.Runner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYears") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BhaRating") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("CourseWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DecimalOdds") + .HasColumnType("decimal(18,2)"); + + b.Property("DistanceWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("ForecastPriceDenominator") + .HasColumnType("nvarchar(max)"); + + b.Property("ForecastPriceNumerator") + .HasColumnType("nvarchar(max)"); + + b.Property("FormFigures") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearAbbreviation") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingCode") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingSheepSkin") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("nvarchar(max)"); + + b.Property("Odds") + .HasColumnType("nvarchar(max)"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PenaltyValue") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("RaceHorseNameWithoutCountry") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("ReserveNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerNumber") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("int"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightText") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightsJockeyClaiming") + .HasColumnType("int"); + + b.Property("WindSurgeryFirstRun") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Runners"); + }); + + modelBuilder.Entity("AutoBet.Db.RunnerResult", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYear") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BettingRatio") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("FinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("FinishTimeInMilliseconds") + .HasColumnType("int"); + + b.Property("HorseId") + .HasColumnType("int"); + + b.Property("Hro") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("LossMilliseconds") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("datetime2"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("time"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PerformanceFigure") + .HasColumnType("nvarchar(max)"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("PositionFinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("RacehorseNameWithoutConuntry") + .HasColumnType("nvarchar(max)"); + + b.Property("Ran") + .HasColumnType("int"); + + b.Property("RatingAwt") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingChase") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingFlat") + .HasColumnType("int"); + + b.Property("RatingHurdle") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultBtnDistance") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishDNF") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishPos") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("nvarchar(max)"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("nvarchar(max)"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("int"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("RunnerResults"); + }); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.HasOne("AutoBet.Db.OddsSnapshot", "OddsSnapshot") + .WithMany("Odds") + .HasForeignKey("OddsSnapshotId"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.HasOne("AutoBet.Db.Runner", null) + .WithMany("LastRuns") + .HasForeignKey("RunnerId"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AutoBet.Db/Migrations/20200228233655_RacehorseNameNoCountry.cs b/AutoBet.Db/Migrations/20200228233655_RacehorseNameNoCountry.cs new file mode 100644 index 0000000..fc4abf8 --- /dev/null +++ b/AutoBet.Db/Migrations/20200228233655_RacehorseNameNoCountry.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace AutoBet.Db.Migrations +{ + public partial class RacehorseNameNoCountry : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "RaceHorseNameWithoutCountry", + table: "Runners", + nullable: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "RaceHorseNameWithoutCountry", + table: "Runners"); + } + } +} diff --git a/AutoBet.Db/Migrations/20200229113517_AddWeightInGrams.Designer.cs b/AutoBet.Db/Migrations/20200229113517_AddWeightInGrams.Designer.cs new file mode 100644 index 0000000..5104f3e --- /dev/null +++ b/AutoBet.Db/Migrations/20200229113517_AddWeightInGrams.Designer.cs @@ -0,0 +1,479 @@ +// +using System; +using AutoBet.Db; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace AutoBet.Db.Migrations +{ + [DbContext(typeof(HorseRacingDataContext))] + [Migration("20200229113517_AddWeightInGrams")] + partial class AddWeightInGrams + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Available") + .HasColumnType("decimal(18,2)"); + + b.Property("Odds") + .HasColumnType("decimal(18,2)"); + + b.Property("OddsSnapshotId") + .HasColumnType("int"); + + b.Property("OddsType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OddsSnapshotId"); + + b.ToTable("BetOdds"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Days") + .HasColumnType("int"); + + b.Property("RaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RunnerId"); + + b.ToTable("LastRuns"); + }); + + modelBuilder.Entity("AutoBet.Db.OddsSnapshot", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("EventName") + .HasColumnType("nvarchar(max)"); + + b.Property("HorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("SnapshotDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("OddsSnapshots"); + }); + + modelBuilder.Entity("AutoBet.Db.Race", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AbandonedReasonCode") + .HasColumnType("int"); + + b.Property("AgeLimit") + .HasColumnType("nvarchar(max)"); + + b.Property("BlackTypeRace") + .HasColumnType("int"); + + b.Property("DistanceChange") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceChangeText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceUnits") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceValue") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("bit"); + + b.Property("PrizeAmount") + .HasColumnType("int"); + + b.Property("PrizeCurrency") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceClass") + .HasColumnType("int"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceDate") + .HasColumnType("datetime2"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RaceName") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceTime") + .HasColumnType("time"); + + b.Property("RatingBand") + .HasColumnType("nvarchar(max)"); + + b.Property("RawDistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Races"); + }); + + modelBuilder.Entity("AutoBet.Db.Runner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYears") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BhaRating") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("CourseWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DecimalOdds") + .HasColumnType("decimal(18,2)"); + + b.Property("DistanceWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("ForecastPriceDenominator") + .HasColumnType("nvarchar(max)"); + + b.Property("ForecastPriceNumerator") + .HasColumnType("nvarchar(max)"); + + b.Property("FormFigures") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearAbbreviation") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingCode") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingSheepSkin") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("nvarchar(max)"); + + b.Property("Odds") + .HasColumnType("nvarchar(max)"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PenaltyValue") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("RaceHorseNameWithoutCountry") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("ReserveNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerNumber") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("int"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightInGrams") + .HasColumnType("decimal(18,2)"); + + b.Property("WeightText") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightsJockeyClaiming") + .HasColumnType("int"); + + b.Property("WindSurgeryFirstRun") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Runners"); + }); + + modelBuilder.Entity("AutoBet.Db.RunnerResult", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYear") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BettingRatio") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("FinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("FinishTimeInMilliseconds") + .HasColumnType("int"); + + b.Property("HorseId") + .HasColumnType("int"); + + b.Property("Hro") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("LossMilliseconds") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("datetime2"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("time"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PerformanceFigure") + .HasColumnType("nvarchar(max)"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("PositionFinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("RacehorseNameWithoutConuntry") + .HasColumnType("nvarchar(max)"); + + b.Property("Ran") + .HasColumnType("int"); + + b.Property("RatingAwt") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingChase") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingFlat") + .HasColumnType("int"); + + b.Property("RatingHurdle") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultBtnDistance") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishDNF") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishPos") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("nvarchar(max)"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("nvarchar(max)"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("int"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("RunnerResults"); + }); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.HasOne("AutoBet.Db.OddsSnapshot", "OddsSnapshot") + .WithMany("Odds") + .HasForeignKey("OddsSnapshotId"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.HasOne("AutoBet.Db.Runner", null) + .WithMany("LastRuns") + .HasForeignKey("RunnerId"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AutoBet.Db/Migrations/20200229113517_AddWeightInGrams.cs b/AutoBet.Db/Migrations/20200229113517_AddWeightInGrams.cs new file mode 100644 index 0000000..b823d0e --- /dev/null +++ b/AutoBet.Db/Migrations/20200229113517_AddWeightInGrams.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace AutoBet.Db.Migrations +{ + public partial class AddWeightInGrams : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "WeightInGrams", + table: "Runners", + nullable: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "WeightInGrams", + table: "Runners"); + } + } +} diff --git a/AutoBet.Db/Migrations/20200229185203_AddPredictionToRunner.Designer.cs b/AutoBet.Db/Migrations/20200229185203_AddPredictionToRunner.Designer.cs new file mode 100644 index 0000000..3c8fb95 --- /dev/null +++ b/AutoBet.Db/Migrations/20200229185203_AddPredictionToRunner.Designer.cs @@ -0,0 +1,482 @@ +// +using System; +using AutoBet.Db; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace AutoBet.Db.Migrations +{ + [DbContext(typeof(HorseRacingDataContext))] + [Migration("20200229185203_AddPredictionToRunner")] + partial class AddPredictionToRunner + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Available") + .HasColumnType("decimal(18,2)"); + + b.Property("Odds") + .HasColumnType("decimal(18,2)"); + + b.Property("OddsSnapshotId") + .HasColumnType("int"); + + b.Property("OddsType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OddsSnapshotId"); + + b.ToTable("BetOdds"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Days") + .HasColumnType("int"); + + b.Property("RaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RunnerId"); + + b.ToTable("LastRuns"); + }); + + modelBuilder.Entity("AutoBet.Db.OddsSnapshot", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("EventName") + .HasColumnType("nvarchar(max)"); + + b.Property("HorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("SnapshotDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("OddsSnapshots"); + }); + + modelBuilder.Entity("AutoBet.Db.Race", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AbandonedReasonCode") + .HasColumnType("int"); + + b.Property("AgeLimit") + .HasColumnType("nvarchar(max)"); + + b.Property("BlackTypeRace") + .HasColumnType("int"); + + b.Property("DistanceChange") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceChangeText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceUnits") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceValue") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("bit"); + + b.Property("PrizeAmount") + .HasColumnType("int"); + + b.Property("PrizeCurrency") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceClass") + .HasColumnType("int"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceDate") + .HasColumnType("datetime2"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RaceName") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceTime") + .HasColumnType("time"); + + b.Property("RatingBand") + .HasColumnType("nvarchar(max)"); + + b.Property("RawDistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Races"); + }); + + modelBuilder.Entity("AutoBet.Db.Runner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYears") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BhaRating") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("CourseWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DecimalOdds") + .HasColumnType("decimal(18,2)"); + + b.Property("DistanceWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("ForecastPriceDenominator") + .HasColumnType("nvarchar(max)"); + + b.Property("ForecastPriceNumerator") + .HasColumnType("nvarchar(max)"); + + b.Property("FormFigures") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearAbbreviation") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingCode") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingSheepSkin") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("nvarchar(max)"); + + b.Property("Odds") + .HasColumnType("nvarchar(max)"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PenaltyValue") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("Prediction") + .HasColumnType("real"); + + b.Property("RaceHorseNameWithoutCountry") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("ReserveNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerNumber") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("int"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightInGrams") + .HasColumnType("decimal(18,2)"); + + b.Property("WeightText") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightsJockeyClaiming") + .HasColumnType("int"); + + b.Property("WindSurgeryFirstRun") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Runners"); + }); + + modelBuilder.Entity("AutoBet.Db.RunnerResult", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYear") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BettingRatio") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("FinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("FinishTimeInMilliseconds") + .HasColumnType("int"); + + b.Property("HorseId") + .HasColumnType("int"); + + b.Property("Hro") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("LossMilliseconds") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("datetime2"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("time"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PerformanceFigure") + .HasColumnType("nvarchar(max)"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("PositionFinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("RacehorseNameWithoutConuntry") + .HasColumnType("nvarchar(max)"); + + b.Property("Ran") + .HasColumnType("int"); + + b.Property("RatingAwt") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingChase") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingFlat") + .HasColumnType("int"); + + b.Property("RatingHurdle") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultBtnDistance") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishDNF") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishPos") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("nvarchar(max)"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("nvarchar(max)"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("int"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("RunnerResults"); + }); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.HasOne("AutoBet.Db.OddsSnapshot", "OddsSnapshot") + .WithMany("Odds") + .HasForeignKey("OddsSnapshotId"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.HasOne("AutoBet.Db.Runner", null) + .WithMany("LastRuns") + .HasForeignKey("RunnerId"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AutoBet.Db/Migrations/20200229185203_AddPredictionToRunner.cs b/AutoBet.Db/Migrations/20200229185203_AddPredictionToRunner.cs new file mode 100644 index 0000000..38b4b33 --- /dev/null +++ b/AutoBet.Db/Migrations/20200229185203_AddPredictionToRunner.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace AutoBet.Db.Migrations +{ + public partial class AddPredictionToRunner : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "Prediction", + table: "Runners", + nullable: false, + defaultValue: 0f); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Prediction", + table: "Runners"); + } + } +} diff --git a/AutoBet.Db/Migrations/20200310165642_AddFixtures.Designer.cs b/AutoBet.Db/Migrations/20200310165642_AddFixtures.Designer.cs new file mode 100644 index 0000000..2d75cd3 --- /dev/null +++ b/AutoBet.Db/Migrations/20200310165642_AddFixtures.Designer.cs @@ -0,0 +1,580 @@ +// +using System; +using AutoBet.Db; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace AutoBet.Db.Migrations +{ + [DbContext(typeof(HorseRacingDataContext))] + [Migration("20200310165642_AddFixtures")] + partial class AddFixtures + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.2") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Available") + .HasColumnType("decimal(18,2)"); + + b.Property("Odds") + .HasColumnType("decimal(18,2)"); + + b.Property("OddsSnapshotId") + .HasColumnType("int"); + + b.Property("OddsType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OddsSnapshotId"); + + b.ToTable("BetOdds"); + }); + + modelBuilder.Entity("AutoBet.Db.Fixture", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AbandonedReasonCode") + .HasColumnType("int"); + + b.Property("BcsEvent") + .HasColumnType("int"); + + b.Property("BlackTypeRaces") + .HasColumnType("int"); + + b.Property("CourseId") + .HasColumnType("int"); + + b.Property("CourseName") + .HasColumnType("nvarchar(max)"); + + b.Property("Distance") + .HasColumnType("nvarchar(max)"); + + b.Property("EntriesAvailable") + .HasColumnType("bit"); + + b.Property("FirstRace") + .HasColumnType("datetime2"); + + b.Property("FixtureDate") + .HasColumnType("datetime2"); + + b.Property("FixtureId") + .HasColumnType("int"); + + b.Property("FixtureName") + .HasColumnType("nvarchar(max)"); + + b.Property("FixtureSession") + .HasColumnType("int"); + + b.Property("FixtureType") + .HasColumnType("int"); + + b.Property("FixtureYear") + .HasColumnType("int"); + + b.Property("Going") + .HasColumnType("nvarchar(max)"); + + b.Property("GoingUpdatedDate") + .HasColumnType("nvarchar(max)"); + + b.Property("GoingUpdatedTime") + .HasColumnType("nvarchar(max)"); + + b.Property("MajorEvent") + .HasColumnType("int"); + + b.Property("MeetingId") + .HasColumnType("int"); + + b.Property("NumberOfRaces") + .HasColumnType("int"); + + b.Property("Other") + .HasColumnType("nvarchar(max)"); + + b.Property("RacePlanningCode") + .HasColumnType("int"); + + b.Property("RacecardAvailable") + .HasColumnType("bit"); + + b.Property("RacingTrackType") + .HasColumnType("int"); + + b.Property("Rail") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultsAvailable") + .HasColumnType("bit"); + + b.Property("Stalls") + .HasColumnType("nvarchar(max)"); + + b.Property("TicketsLink") + .HasColumnType("nvarchar(max)"); + + b.Property("Weather") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Fixtures"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Days") + .HasColumnType("int"); + + b.Property("RaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RunnerId"); + + b.ToTable("LastRuns"); + }); + + modelBuilder.Entity("AutoBet.Db.OddsSnapshot", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("EventName") + .HasColumnType("nvarchar(max)"); + + b.Property("HorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("SnapshotDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("OddsSnapshots"); + }); + + modelBuilder.Entity("AutoBet.Db.Race", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AbandonedReasonCode") + .HasColumnType("int"); + + b.Property("AgeLimit") + .HasColumnType("nvarchar(max)"); + + b.Property("BlackTypeRace") + .HasColumnType("int"); + + b.Property("DistanceChange") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceChangeText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceUnits") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceValue") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("bit"); + + b.Property("PrizeAmount") + .HasColumnType("int"); + + b.Property("PrizeCurrency") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceClass") + .HasColumnType("int"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceDate") + .HasColumnType("datetime2"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RaceName") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceTime") + .HasColumnType("time"); + + b.Property("RatingBand") + .HasColumnType("nvarchar(max)"); + + b.Property("RawDistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Races"); + }); + + modelBuilder.Entity("AutoBet.Db.Runner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYears") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BhaRating") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("CourseWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DecimalOdds") + .HasColumnType("decimal(18,2)"); + + b.Property("DistanceWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("ForecastPriceDenominator") + .HasColumnType("nvarchar(max)"); + + b.Property("ForecastPriceNumerator") + .HasColumnType("nvarchar(max)"); + + b.Property("FormFigures") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearAbbreviation") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingCode") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingSheepSkin") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("nvarchar(max)"); + + b.Property("Odds") + .HasColumnType("nvarchar(max)"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PenaltyValue") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("Prediction") + .HasColumnType("real"); + + b.Property("RaceHorseNameWithoutCountry") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("ReserveNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerNumber") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("int"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightInGrams") + .HasColumnType("decimal(18,2)"); + + b.Property("WeightText") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightsJockeyClaiming") + .HasColumnType("int"); + + b.Property("WindSurgeryFirstRun") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Runners"); + }); + + modelBuilder.Entity("AutoBet.Db.RunnerResult", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYear") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BettingRatio") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("FinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("FinishTimeInMilliseconds") + .HasColumnType("int"); + + b.Property("HorseId") + .HasColumnType("int"); + + b.Property("Hro") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("LossMilliseconds") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("datetime2"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("time"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PerformanceFigure") + .HasColumnType("nvarchar(max)"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("PositionFinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("RacehorseNameWithoutConuntry") + .HasColumnType("nvarchar(max)"); + + b.Property("Ran") + .HasColumnType("int"); + + b.Property("RatingAwt") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingChase") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingFlat") + .HasColumnType("int"); + + b.Property("RatingHurdle") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultBtnDistance") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishDNF") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishPos") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("nvarchar(max)"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("nvarchar(max)"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("int"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("RunnerResults"); + }); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.HasOne("AutoBet.Db.OddsSnapshot", "OddsSnapshot") + .WithMany("Odds") + .HasForeignKey("OddsSnapshotId"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.HasOne("AutoBet.Db.Runner", null) + .WithMany("LastRuns") + .HasForeignKey("RunnerId"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AutoBet.Db/Migrations/20200310165642_AddFixtures.cs b/AutoBet.Db/Migrations/20200310165642_AddFixtures.cs new file mode 100644 index 0000000..a70be46 --- /dev/null +++ b/AutoBet.Db/Migrations/20200310165642_AddFixtures.cs @@ -0,0 +1,57 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace AutoBet.Db.Migrations +{ + public partial class AddFixtures : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Fixtures", + columns: table => new + { + Id = table.Column(nullable: false), + GoingUpdatedTime = table.Column(nullable: true), + GoingUpdatedDate = table.Column(nullable: true), + FixtureSession = table.Column(nullable: false), + AbandonedReasonCode = table.Column(nullable: false), + Rail = table.Column(nullable: true), + Stalls = table.Column(nullable: true), + Other = table.Column(nullable: true), + Weather = table.Column(nullable: true), + Going = table.Column(nullable: true), + MajorEvent = table.Column(nullable: true), + TicketsLink = table.Column(nullable: true), + CourseId = table.Column(nullable: false), + RacePlanningCode = table.Column(nullable: false), + RacingTrackType = table.Column(nullable: false), + MeetingId = table.Column(nullable: false), + FixtureType = table.Column(nullable: false), + FixtureName = table.Column(nullable: true), + NumberOfRaces = table.Column(nullable: false), + BcsEvent = table.Column(nullable: false), + BlackTypeRaces = table.Column(nullable: false), + EntriesAvailable = table.Column(nullable: false), + RacecardAvailable = table.Column(nullable: false), + ResultsAvailable = table.Column(nullable: false), + FirstRace = table.Column(nullable: true), + CourseName = table.Column(nullable: true), + Distance = table.Column(nullable: true), + FixtureDate = table.Column(nullable: false), + FixtureYear = table.Column(nullable: false), + FixtureId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Fixtures", x => x.Id); + }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Fixtures"); + } + } +} diff --git a/AutoBet.Db/Migrations/20200311215708_AddFixtureIdToRace.Designer.cs b/AutoBet.Db/Migrations/20200311215708_AddFixtureIdToRace.Designer.cs new file mode 100644 index 0000000..fad42fa --- /dev/null +++ b/AutoBet.Db/Migrations/20200311215708_AddFixtureIdToRace.Designer.cs @@ -0,0 +1,583 @@ +// +using System; +using AutoBet.Db; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace AutoBet.Db.Migrations +{ + [DbContext(typeof(HorseRacingDataContext))] + [Migration("20200311215708_AddFixtureIdToRace")] + partial class AddFixtureIdToRace + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.2") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Available") + .HasColumnType("decimal(18,2)"); + + b.Property("Odds") + .HasColumnType("decimal(18,2)"); + + b.Property("OddsSnapshotId") + .HasColumnType("int"); + + b.Property("OddsType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OddsSnapshotId"); + + b.ToTable("BetOdds"); + }); + + modelBuilder.Entity("AutoBet.Db.Fixture", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AbandonedReasonCode") + .HasColumnType("int"); + + b.Property("BcsEvent") + .HasColumnType("int"); + + b.Property("BlackTypeRaces") + .HasColumnType("int"); + + b.Property("CourseId") + .HasColumnType("int"); + + b.Property("CourseName") + .HasColumnType("nvarchar(max)"); + + b.Property("Distance") + .HasColumnType("nvarchar(max)"); + + b.Property("EntriesAvailable") + .HasColumnType("bit"); + + b.Property("FirstRace") + .HasColumnType("datetime2"); + + b.Property("FixtureDate") + .HasColumnType("datetime2"); + + b.Property("FixtureId") + .HasColumnType("int"); + + b.Property("FixtureName") + .HasColumnType("nvarchar(max)"); + + b.Property("FixtureSession") + .HasColumnType("int"); + + b.Property("FixtureType") + .HasColumnType("int"); + + b.Property("FixtureYear") + .HasColumnType("int"); + + b.Property("Going") + .HasColumnType("nvarchar(max)"); + + b.Property("GoingUpdatedDate") + .HasColumnType("nvarchar(max)"); + + b.Property("GoingUpdatedTime") + .HasColumnType("nvarchar(max)"); + + b.Property("MajorEvent") + .HasColumnType("int"); + + b.Property("MeetingId") + .HasColumnType("int"); + + b.Property("NumberOfRaces") + .HasColumnType("int"); + + b.Property("Other") + .HasColumnType("nvarchar(max)"); + + b.Property("RacePlanningCode") + .HasColumnType("int"); + + b.Property("RacecardAvailable") + .HasColumnType("bit"); + + b.Property("RacingTrackType") + .HasColumnType("int"); + + b.Property("Rail") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultsAvailable") + .HasColumnType("bit"); + + b.Property("Stalls") + .HasColumnType("nvarchar(max)"); + + b.Property("TicketsLink") + .HasColumnType("nvarchar(max)"); + + b.Property("Weather") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Fixtures"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Days") + .HasColumnType("int"); + + b.Property("RaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RunnerId"); + + b.ToTable("LastRuns"); + }); + + modelBuilder.Entity("AutoBet.Db.OddsSnapshot", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("EventName") + .HasColumnType("nvarchar(max)"); + + b.Property("HorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("SnapshotDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("OddsSnapshots"); + }); + + modelBuilder.Entity("AutoBet.Db.Race", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AbandonedReasonCode") + .HasColumnType("int"); + + b.Property("AgeLimit") + .HasColumnType("nvarchar(max)"); + + b.Property("BlackTypeRace") + .HasColumnType("int"); + + b.Property("DistanceChange") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceChangeText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceUnits") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceValue") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("FixtureId") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("bit"); + + b.Property("PrizeAmount") + .HasColumnType("int"); + + b.Property("PrizeCurrency") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceClass") + .HasColumnType("int"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceDate") + .HasColumnType("datetime2"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RaceName") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceTime") + .HasColumnType("time"); + + b.Property("RatingBand") + .HasColumnType("nvarchar(max)"); + + b.Property("RawDistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Races"); + }); + + modelBuilder.Entity("AutoBet.Db.Runner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYears") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BhaRating") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("CourseWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DecimalOdds") + .HasColumnType("decimal(18,2)"); + + b.Property("DistanceWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("ForecastPriceDenominator") + .HasColumnType("nvarchar(max)"); + + b.Property("ForecastPriceNumerator") + .HasColumnType("nvarchar(max)"); + + b.Property("FormFigures") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearAbbreviation") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingCode") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingSheepSkin") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("nvarchar(max)"); + + b.Property("Odds") + .HasColumnType("nvarchar(max)"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PenaltyValue") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("Prediction") + .HasColumnType("real"); + + b.Property("RaceHorseNameWithoutCountry") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("ReserveNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerNumber") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("int"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightInGrams") + .HasColumnType("decimal(18,2)"); + + b.Property("WeightText") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightsJockeyClaiming") + .HasColumnType("int"); + + b.Property("WindSurgeryFirstRun") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Runners"); + }); + + modelBuilder.Entity("AutoBet.Db.RunnerResult", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYear") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BettingRatio") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("FinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("FinishTimeInMilliseconds") + .HasColumnType("int"); + + b.Property("HorseId") + .HasColumnType("int"); + + b.Property("Hro") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("LossMilliseconds") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("datetime2"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("time"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PerformanceFigure") + .HasColumnType("nvarchar(max)"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("PositionFinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("RacehorseNameWithoutConuntry") + .HasColumnType("nvarchar(max)"); + + b.Property("Ran") + .HasColumnType("int"); + + b.Property("RatingAwt") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingChase") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingFlat") + .HasColumnType("int"); + + b.Property("RatingHurdle") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultBtnDistance") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishDNF") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishPos") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("nvarchar(max)"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("nvarchar(max)"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("int"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("RunnerResults"); + }); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.HasOne("AutoBet.Db.OddsSnapshot", "OddsSnapshot") + .WithMany("Odds") + .HasForeignKey("OddsSnapshotId"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.HasOne("AutoBet.Db.Runner", null) + .WithMany("LastRuns") + .HasForeignKey("RunnerId"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AutoBet.Db/Migrations/20200311215708_AddFixtureIdToRace.cs b/AutoBet.Db/Migrations/20200311215708_AddFixtureIdToRace.cs new file mode 100644 index 0000000..0a6632b --- /dev/null +++ b/AutoBet.Db/Migrations/20200311215708_AddFixtureIdToRace.cs @@ -0,0 +1,23 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace AutoBet.Db.Migrations +{ + public partial class AddFixtureIdToRace : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "FixtureId", + table: "Races", + nullable: false, + defaultValue: 0); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "FixtureId", + table: "Races"); + } + } +} diff --git a/AutoBet.Db/Migrations/20200413114806_JockeyIdCanBeNull.Designer.cs b/AutoBet.Db/Migrations/20200413114806_JockeyIdCanBeNull.Designer.cs new file mode 100644 index 0000000..cb7ba90 --- /dev/null +++ b/AutoBet.Db/Migrations/20200413114806_JockeyIdCanBeNull.Designer.cs @@ -0,0 +1,583 @@ +// +using System; +using AutoBet.Db; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace AutoBet.Db.Migrations +{ + [DbContext(typeof(HorseRacingDataContext))] + [Migration("20200413114806_JockeyIdCanBeNull")] + partial class JockeyIdCanBeNull + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.2") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Available") + .HasColumnType("decimal(18,2)"); + + b.Property("Odds") + .HasColumnType("decimal(18,2)"); + + b.Property("OddsSnapshotId") + .HasColumnType("int"); + + b.Property("OddsType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OddsSnapshotId"); + + b.ToTable("BetOdds"); + }); + + modelBuilder.Entity("AutoBet.Db.Fixture", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AbandonedReasonCode") + .HasColumnType("int"); + + b.Property("BcsEvent") + .HasColumnType("int"); + + b.Property("BlackTypeRaces") + .HasColumnType("int"); + + b.Property("CourseId") + .HasColumnType("int"); + + b.Property("CourseName") + .HasColumnType("nvarchar(max)"); + + b.Property("Distance") + .HasColumnType("nvarchar(max)"); + + b.Property("EntriesAvailable") + .HasColumnType("bit"); + + b.Property("FirstRace") + .HasColumnType("datetime2"); + + b.Property("FixtureDate") + .HasColumnType("datetime2"); + + b.Property("FixtureId") + .HasColumnType("int"); + + b.Property("FixtureName") + .HasColumnType("nvarchar(max)"); + + b.Property("FixtureSession") + .HasColumnType("int"); + + b.Property("FixtureType") + .HasColumnType("int"); + + b.Property("FixtureYear") + .HasColumnType("int"); + + b.Property("Going") + .HasColumnType("nvarchar(max)"); + + b.Property("GoingUpdatedDate") + .HasColumnType("nvarchar(max)"); + + b.Property("GoingUpdatedTime") + .HasColumnType("nvarchar(max)"); + + b.Property("MajorEvent") + .HasColumnType("int"); + + b.Property("MeetingId") + .HasColumnType("int"); + + b.Property("NumberOfRaces") + .HasColumnType("int"); + + b.Property("Other") + .HasColumnType("nvarchar(max)"); + + b.Property("RacePlanningCode") + .HasColumnType("int"); + + b.Property("RacecardAvailable") + .HasColumnType("bit"); + + b.Property("RacingTrackType") + .HasColumnType("int"); + + b.Property("Rail") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultsAvailable") + .HasColumnType("bit"); + + b.Property("Stalls") + .HasColumnType("nvarchar(max)"); + + b.Property("TicketsLink") + .HasColumnType("nvarchar(max)"); + + b.Property("Weather") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Fixtures"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Days") + .HasColumnType("int"); + + b.Property("RaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RunnerId"); + + b.ToTable("LastRuns"); + }); + + modelBuilder.Entity("AutoBet.Db.OddsSnapshot", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("EventName") + .HasColumnType("nvarchar(max)"); + + b.Property("HorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("SnapshotDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("OddsSnapshots"); + }); + + modelBuilder.Entity("AutoBet.Db.Race", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AbandonedReasonCode") + .HasColumnType("int"); + + b.Property("AgeLimit") + .HasColumnType("nvarchar(max)"); + + b.Property("BlackTypeRace") + .HasColumnType("int"); + + b.Property("DistanceChange") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceChangeText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceUnits") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceValue") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("FixtureId") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("bit"); + + b.Property("PrizeAmount") + .HasColumnType("int"); + + b.Property("PrizeCurrency") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceClass") + .HasColumnType("int"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceDate") + .HasColumnType("datetime2"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RaceName") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceTime") + .HasColumnType("time"); + + b.Property("RatingBand") + .HasColumnType("nvarchar(max)"); + + b.Property("RawDistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Races"); + }); + + modelBuilder.Entity("AutoBet.Db.Runner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYears") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BhaRating") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("CourseWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DecimalOdds") + .HasColumnType("decimal(18,2)"); + + b.Property("DistanceWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("ForecastPriceDenominator") + .HasColumnType("nvarchar(max)"); + + b.Property("ForecastPriceNumerator") + .HasColumnType("nvarchar(max)"); + + b.Property("FormFigures") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearAbbreviation") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingCode") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingSheepSkin") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("nvarchar(max)"); + + b.Property("Odds") + .HasColumnType("nvarchar(max)"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PenaltyValue") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("Prediction") + .HasColumnType("real"); + + b.Property("RaceHorseNameWithoutCountry") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("ReserveNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerNumber") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("int"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightInGrams") + .HasColumnType("decimal(18,2)"); + + b.Property("WeightText") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightsJockeyClaiming") + .HasColumnType("int"); + + b.Property("WindSurgeryFirstRun") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Runners"); + }); + + modelBuilder.Entity("AutoBet.Db.RunnerResult", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYear") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BettingRatio") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("FinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("FinishTimeInMilliseconds") + .HasColumnType("int"); + + b.Property("HorseId") + .HasColumnType("int"); + + b.Property("Hro") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("LossMilliseconds") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("datetime2"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("time"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PerformanceFigure") + .HasColumnType("nvarchar(max)"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("PositionFinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("RacehorseNameWithoutConuntry") + .HasColumnType("nvarchar(max)"); + + b.Property("Ran") + .HasColumnType("int"); + + b.Property("RatingAwt") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingChase") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingFlat") + .HasColumnType("int"); + + b.Property("RatingHurdle") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultBtnDistance") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishDNF") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishPos") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("nvarchar(max)"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("nvarchar(max)"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("int"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("RunnerResults"); + }); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.HasOne("AutoBet.Db.OddsSnapshot", "OddsSnapshot") + .WithMany("Odds") + .HasForeignKey("OddsSnapshotId"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.HasOne("AutoBet.Db.Runner", null) + .WithMany("LastRuns") + .HasForeignKey("RunnerId"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AutoBet.Db/Migrations/20200413114806_JockeyIdCanBeNull.cs b/AutoBet.Db/Migrations/20200413114806_JockeyIdCanBeNull.cs new file mode 100644 index 0000000..672dcd3 --- /dev/null +++ b/AutoBet.Db/Migrations/20200413114806_JockeyIdCanBeNull.cs @@ -0,0 +1,28 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace AutoBet.Db.Migrations +{ + public partial class JockeyIdCanBeNull : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "JockeyId", + table: "Runners", + nullable: true, + oldClrType: typeof(int), + oldType: "int"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "JockeyId", + table: "Runners", + type: "int", + nullable: false, + oldClrType: typeof(int), + oldNullable: true); + } + } +} diff --git a/AutoBet.Db/Migrations/HorseRacingDataContextModelSnapshot.cs b/AutoBet.Db/Migrations/HorseRacingDataContextModelSnapshot.cs new file mode 100644 index 0000000..cedc489 --- /dev/null +++ b/AutoBet.Db/Migrations/HorseRacingDataContextModelSnapshot.cs @@ -0,0 +1,581 @@ +// +using System; +using AutoBet.Db; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace AutoBet.Db.Migrations +{ + [DbContext(typeof(HorseRacingDataContext))] + partial class HorseRacingDataContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "3.1.2") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Available") + .HasColumnType("decimal(18,2)"); + + b.Property("Odds") + .HasColumnType("decimal(18,2)"); + + b.Property("OddsSnapshotId") + .HasColumnType("int"); + + b.Property("OddsType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OddsSnapshotId"); + + b.ToTable("BetOdds"); + }); + + modelBuilder.Entity("AutoBet.Db.Fixture", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AbandonedReasonCode") + .HasColumnType("int"); + + b.Property("BcsEvent") + .HasColumnType("int"); + + b.Property("BlackTypeRaces") + .HasColumnType("int"); + + b.Property("CourseId") + .HasColumnType("int"); + + b.Property("CourseName") + .HasColumnType("nvarchar(max)"); + + b.Property("Distance") + .HasColumnType("nvarchar(max)"); + + b.Property("EntriesAvailable") + .HasColumnType("bit"); + + b.Property("FirstRace") + .HasColumnType("datetime2"); + + b.Property("FixtureDate") + .HasColumnType("datetime2"); + + b.Property("FixtureId") + .HasColumnType("int"); + + b.Property("FixtureName") + .HasColumnType("nvarchar(max)"); + + b.Property("FixtureSession") + .HasColumnType("int"); + + b.Property("FixtureType") + .HasColumnType("int"); + + b.Property("FixtureYear") + .HasColumnType("int"); + + b.Property("Going") + .HasColumnType("nvarchar(max)"); + + b.Property("GoingUpdatedDate") + .HasColumnType("nvarchar(max)"); + + b.Property("GoingUpdatedTime") + .HasColumnType("nvarchar(max)"); + + b.Property("MajorEvent") + .HasColumnType("int"); + + b.Property("MeetingId") + .HasColumnType("int"); + + b.Property("NumberOfRaces") + .HasColumnType("int"); + + b.Property("Other") + .HasColumnType("nvarchar(max)"); + + b.Property("RacePlanningCode") + .HasColumnType("int"); + + b.Property("RacecardAvailable") + .HasColumnType("bit"); + + b.Property("RacingTrackType") + .HasColumnType("int"); + + b.Property("Rail") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultsAvailable") + .HasColumnType("bit"); + + b.Property("Stalls") + .HasColumnType("nvarchar(max)"); + + b.Property("TicketsLink") + .HasColumnType("nvarchar(max)"); + + b.Property("Weather") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Fixtures"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Days") + .HasColumnType("int"); + + b.Property("RaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RunnerId"); + + b.ToTable("LastRuns"); + }); + + modelBuilder.Entity("AutoBet.Db.OddsSnapshot", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("EventName") + .HasColumnType("nvarchar(max)"); + + b.Property("HorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("SnapshotDate") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.ToTable("OddsSnapshots"); + }); + + modelBuilder.Entity("AutoBet.Db.Race", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AbandonedReasonCode") + .HasColumnType("int"); + + b.Property("AgeLimit") + .HasColumnType("nvarchar(max)"); + + b.Property("BlackTypeRace") + .HasColumnType("int"); + + b.Property("DistanceChange") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceChangeText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceUnits") + .HasColumnType("nvarchar(max)"); + + b.Property("DistanceValue") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("FixtureId") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("bit"); + + b.Property("PrizeAmount") + .HasColumnType("int"); + + b.Property("PrizeCurrency") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceClass") + .HasColumnType("int"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceDate") + .HasColumnType("datetime2"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RaceName") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceTime") + .HasColumnType("time"); + + b.Property("RatingBand") + .HasColumnType("nvarchar(max)"); + + b.Property("RawDistanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Races"); + }); + + modelBuilder.Entity("AutoBet.Db.Runner", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYears") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BhaRating") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("CourseWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DecimalOdds") + .HasColumnType("decimal(18,2)"); + + b.Property("DistanceWinner") + .HasColumnType("nvarchar(max)"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("ForecastPriceDenominator") + .HasColumnType("nvarchar(max)"); + + b.Property("ForecastPriceNumerator") + .HasColumnType("nvarchar(max)"); + + b.Property("FormFigures") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearAbbreviation") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingCode") + .HasColumnType("nvarchar(max)"); + + b.Property("HeadGearWearingSheepSkin") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("nvarchar(max)"); + + b.Property("Odds") + .HasColumnType("nvarchar(max)"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PenaltyValue") + .HasColumnType("int"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("Prediction") + .HasColumnType("real"); + + b.Property("RaceHorseNameWithoutCountry") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("ReserveNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("RunnerNumber") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("int"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightInGrams") + .HasColumnType("decimal(18,2)"); + + b.Property("WeightText") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightsJockeyClaiming") + .HasColumnType("int"); + + b.Property("WindSurgeryFirstRun") + .HasColumnType("nvarchar(max)"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Runners"); + }); + + modelBuilder.Entity("AutoBet.Db.RunnerResult", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(450)"); + + b.Property("AgeYear") + .HasColumnType("int"); + + b.Property("AnimalId") + .HasColumnType("int"); + + b.Property("BettingRatio") + .HasColumnType("nvarchar(max)"); + + b.Property("Bred") + .HasColumnType("nvarchar(max)"); + + b.Property("ClothNumber") + .HasColumnType("int"); + + b.Property("DivisionSequence") + .HasColumnType("int"); + + b.Property("DrawnStall") + .HasColumnType("int"); + + b.Property("FinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("FinishTimeInMilliseconds") + .HasColumnType("int"); + + b.Property("HorseId") + .HasColumnType("int"); + + b.Property("Hro") + .HasColumnType("int"); + + b.Property("JockeyId") + .HasColumnType("int"); + + b.Property("JockeyName") + .HasColumnType("nvarchar(max)"); + + b.Property("JockeyProfile") + .HasColumnType("int"); + + b.Property("LossMilliseconds") + .HasColumnType("int"); + + b.Property("NonRunnerDeclaredDate") + .HasColumnType("datetime2"); + + b.Property("NonRunnerDeclaredReason") + .HasColumnType("nvarchar(max)"); + + b.Property("NonRunnerDeclaredTime") + .HasColumnType("time"); + + b.Property("OwnerId") + .HasColumnType("int"); + + b.Property("OwnerName") + .HasColumnType("nvarchar(max)"); + + b.Property("PerformanceFigure") + .HasColumnType("nvarchar(max)"); + + b.Property("Plus10") + .HasColumnType("int"); + + b.Property("PositionFinishTime") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceCriteriaRaceType") + .HasColumnType("nvarchar(max)"); + + b.Property("RaceId") + .HasColumnType("int"); + + b.Property("RacehorseName") + .HasColumnType("nvarchar(max)"); + + b.Property("RacehorseNameWithoutConuntry") + .HasColumnType("nvarchar(max)"); + + b.Property("Ran") + .HasColumnType("int"); + + b.Property("RatingAwt") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingChase") + .HasColumnType("nvarchar(max)"); + + b.Property("RatingFlat") + .HasColumnType("int"); + + b.Property("RatingHurdle") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultBtnDistance") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishDNF") + .HasColumnType("nvarchar(max)"); + + b.Property("ResultFinishPos") + .HasColumnType("int"); + + b.Property("SexType") + .HasColumnType("nvarchar(max)"); + + b.Property("SilkImage") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("nvarchar(max)"); + + b.Property("TrainerId") + .HasColumnType("int"); + + b.Property("TrainerName") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkCode") + .HasColumnType("nvarchar(max)"); + + b.Property("WbSilkDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("WeightValue") + .HasColumnType("int"); + + b.Property("YearOfRace") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("RunnerResults"); + }); + + modelBuilder.Entity("AutoBet.Db.BetOdds", b => + { + b.HasOne("AutoBet.Db.OddsSnapshot", "OddsSnapshot") + .WithMany("Odds") + .HasForeignKey("OddsSnapshotId"); + }); + + modelBuilder.Entity("AutoBet.Db.LastRun", b => + { + b.HasOne("AutoBet.Db.Runner", null) + .WithMany("LastRuns") + .HasForeignKey("RunnerId"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AutoBet.Db/NLog.config b/AutoBet.Db/NLog.config new file mode 100644 index 0000000..8a60478 --- /dev/null +++ b/AutoBet.Db/NLog.config @@ -0,0 +1,14 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/AutoBet.Db/OddsSnapshot.cs b/AutoBet.Db/OddsSnapshot.cs new file mode 100644 index 0000000..d7b6526 --- /dev/null +++ b/AutoBet.Db/OddsSnapshot.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace AutoBet.Db +{ + public class OddsSnapshot + { + public int Id { get; set; } + public string EventName { get; set; } + public string HorseName { get; set; } + public string JockeyName { get; set; } + public DateTime SnapshotDate { get; set; } + public List Odds { get; set; } + } +} diff --git a/AutoBet.Db/OddsType.cs b/AutoBet.Db/OddsType.cs new file mode 100644 index 0000000..2edd90e --- /dev/null +++ b/AutoBet.Db/OddsType.cs @@ -0,0 +1,8 @@ +namespace AutoBet.Db +{ + public enum OddsType + { + Back, + Lay + } +} diff --git a/AutoBet.Db/Race.cs b/AutoBet.Db/Race.cs new file mode 100644 index 0000000..fd28c8f --- /dev/null +++ b/AutoBet.Db/Race.cs @@ -0,0 +1,30 @@ +using System; + +namespace AutoBet.Db +{ + public class Race : Entity + { + public string DistanceChangeText { get; set; } + public int BlackTypeRace { get; set; } + public int AbandonedReasonCode { get; set; } + public string RaceCriteriaRaceType { get; set; } + public string DistanceChange { get; set; } + public string DistanceText { get; set; } + public int DistanceValue { get; set; } + public string DistanceUnits { get; set; } + public string RawDistanceText { get; set; } + public string RatingBand { get; set; } + public int RaceClass { get; set; } + public string PrizeCurrency { get; set; } + public int PrizeAmount { get; set; } + public string AgeLimit { get; set; } + public string RaceName { get; set; } + public TimeSpan RaceTime { get; set; } + public DateTime RaceDate { get; set; } + public int DivisionSequence { get; set; } + public int YearOfRace { get; set; } + public int RaceId { get; set; } + public bool Plus10 { get; set; } + public int FixtureId { get; set; } + } +} \ No newline at end of file diff --git a/AutoBet.Db/RacePlanningCode.cs b/AutoBet.Db/RacePlanningCode.cs new file mode 100644 index 0000000..ecdbe0a --- /dev/null +++ b/AutoBet.Db/RacePlanningCode.cs @@ -0,0 +1,7 @@ +namespace AutoBet.Db +{ + public enum RacePlanningCode + { + Normal = 0 + } +} \ No newline at end of file diff --git a/AutoBet.Db/RacingTrackType.cs b/AutoBet.Db/RacingTrackType.cs new file mode 100644 index 0000000..eeaa5f4 --- /dev/null +++ b/AutoBet.Db/RacingTrackType.cs @@ -0,0 +1,9 @@ +namespace AutoBet.Db +{ + public enum RacingTrackType + { + Awt = 0, + Turf = 1, + Mixed = 2 + } +} \ No newline at end of file diff --git a/AutoBet.Db/Runner.cs b/AutoBet.Db/Runner.cs new file mode 100644 index 0000000..4d9dbd7 --- /dev/null +++ b/AutoBet.Db/Runner.cs @@ -0,0 +1,57 @@ +using System.Collections.Generic; +using System.Text; + +namespace AutoBet.Db +{ + public class Runner : Entity + { + public string HeadGearWearingCode { get; set; } + public int HeadGearWearingSheepSkin { get; set; } + public string HeadGearDescription { get; set; } + public string HeadGearAbbreviation { get; set; } + public int JockeyProfile { get; set; } + public string CourseWinner { get; set; } + public string DistanceWinner { get; set; } + public string WindSurgeryFirstRun { get; set; } + public int TrainerId { get; set; } + public string TrainerName { get; set; } + public int OwnerId { get; set; } + public string OwnerName { get; set; } + public string WbSilkCode { get; set; } + public string WbSilkDescription { get; set; } + public string SilkImage { get; set; } + public int Plus10 { get; set; } + public string ForecastPriceNumerator { get; set; } + public string ForecastPriceDenominator { get; set; } + public string WeightText { get; set; } + public int WeightsJockeyClaiming { get; set; } + public string Odds { get; set; } + public string JockeyName { get; set; } + public Status Status { get; set; } + public int RaceId { get; set; } + public int YearOfRace { get; set; } + public int DivisionSequence { get; set; } + public int AnimalId { get; set; } + public string RacehorseName { get; set; } + public int AgeYears { get; set; } + public string Bred { get; set; } + public int ClothNumber { get; set; } + public int? DrawnStall { get; set; } + public string ReserveNumber { get; set; } + public string BhaRating { get; set; } + public string FormFigures { get; set; } + public string WeightValue { get; set; } + public int PenaltyValue { get; set; } + public SexType SexType { get; set; } + public string NonRunnerDeclaredReason { get; set; } + public string NonRunnerDeclaredDate { get; set; } + public string NonRunnerDeclaredTime { get; set; } + public int RunnerNumber { get; set; } + public int? JockeyId { get; set; } + public List LastRuns { get; set; } + public decimal? DecimalOdds { get; set; } + public string RaceHorseNameWithoutCountry { get; set; } + public decimal? WeightInGrams { get; set; } + public float Prediction { get; set; } + } +} diff --git a/AutoBet.Db/RunnerResult.cs b/AutoBet.Db/RunnerResult.cs new file mode 100644 index 0000000..710c715 --- /dev/null +++ b/AutoBet.Db/RunnerResult.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace AutoBet.Db +{ + public class RunnerResult : Entity + { + public int RaceId { get; set; } + public int YearOfRace { get; set; } + public int DivisionSequence { get; set; } + public int HorseId { get; set; } + public int AnimalId { get; set; } + public int? ResultFinishPos { get; set; } + public string Status { get; set; } + public int Ran { get; set; } + public string NonRunnerDeclaredReason { get; set; } + public DateTime? NonRunnerDeclaredDate { get; set; } + public TimeSpan? NonRunnerDeclaredTime { get; set; } + public string RacehorseName { get; set; } + public int AgeYear { get; set; } + public string Bred { get; set; } + public int? ClothNumber { get; set; } + public int? DrawnStall { get; set; } + public int? WeightValue { get; set; } + public string SexType { get; set; } + public int? JockeyId { get; set; } + public string JockeyName { get; set; } + public int JockeyProfile { get; set; } + public int? TrainerId { get; set; } + public string TrainerName { get; set; } + public int? OwnerId { get; set; } + public string OwnerName { get; set; } + public string WbSilkCode { get; set; } + public string WbSilkDescription { get; set; } + public string SilkImage { get; set; } + public int Plus10 { get; set; } + public string ResultBtnDistance { get; set; } + public string PositionFinishTime { get; set; } + public string BettingRatio { get; set; } + public string PerformanceFigure { get; set; } + public int? RatingFlat { get; set; } + public string RatingAwt { get; set; } + public string RatingChase { get; set; } + public string RatingHurdle { get; set; } + public string RaceCriteriaRaceType { get; set; } + public int Hro { get; set; } + public string FinishTime { get; set; } + public string ResultFinishDNF { get; set; } + public int? FinishTimeInMilliseconds { get; set; } + public int? LossMilliseconds { get; set; } + public string RacehorseNameWithoutConuntry { get; set; } + } +} diff --git a/AutoBet.Db/SexType.cs b/AutoBet.Db/SexType.cs new file mode 100644 index 0000000..9993abb --- /dev/null +++ b/AutoBet.Db/SexType.cs @@ -0,0 +1,11 @@ +namespace AutoBet.Db +{ + public enum SexType + { + Filly, + Gelding, + Colt, + Mare, + Stallion + } +} diff --git a/AutoBet.Db/Status.cs b/AutoBet.Db/Status.cs new file mode 100644 index 0000000..2c54d58 --- /dev/null +++ b/AutoBet.Db/Status.cs @@ -0,0 +1,10 @@ +namespace AutoBet.Db +{ + public enum Status + { + Runner, + Dnf, + Withdrawn, + NonRunner + } +} diff --git a/AutoBet.Learn/AutoBet.Learn.csproj b/AutoBet.Learn/AutoBet.Learn.csproj new file mode 100644 index 0000000..910d6e3 --- /dev/null +++ b/AutoBet.Learn/AutoBet.Learn.csproj @@ -0,0 +1,24 @@ + + + + Exe + netcoreapp3.1 + + + + + + + + + + + + + + + + + + + diff --git a/AutoBet.Learn/Extensions/EstimatorExtensions.cs b/AutoBet.Learn/Extensions/EstimatorExtensions.cs new file mode 100644 index 0000000..4ee3f43 --- /dev/null +++ b/AutoBet.Learn/Extensions/EstimatorExtensions.cs @@ -0,0 +1,16 @@ +using Microsoft.ML; +using Microsoft.ML.Data; +using Microsoft.ML.Transforms; + +namespace AutoBet.Learn.Extensions +{ + public static class EstimatorExtensions + { + //Converts string to one hot encoding vectors + public static EstimatorChain EncodeColumn(this IEstimator pipeline, MLContext mlContext, string column) + { + var catergoricalTransforms = mlContext.Transforms.Categorical; + return pipeline.Append(catergoricalTransforms.OneHotEncoding(outputColumnName: column + "Encoded", inputColumnName: column)); + } + } +} diff --git a/AutoBet.Learn/HorseOddsResult.cs b/AutoBet.Learn/HorseOddsResult.cs new file mode 100644 index 0000000..bf72908 --- /dev/null +++ b/AutoBet.Learn/HorseOddsResult.cs @@ -0,0 +1,10 @@ +using Microsoft.ML.Data; + +namespace AutoBet.Learn +{ + public class HorseOddsResult + { + [ColumnName("Score")] + public float Odds; + } +} diff --git a/AutoBet.Learn/HorseOddsTrainingData.cs b/AutoBet.Learn/HorseOddsTrainingData.cs new file mode 100644 index 0000000..6147410 --- /dev/null +++ b/AutoBet.Learn/HorseOddsTrainingData.cs @@ -0,0 +1,43 @@ +using Microsoft.ML.Data; +using System; + +namespace AutoBet.Learn +{ + public class HorseOddsTrainingData + { + public string CourseName; + public int FixtureType; + public string RaceCriteriaRaceType; + public float DistanceValue; + public float RaceClass; + public float PrizeAmount; + public string HeadGearWearingCode; + public int HeadGearWearingSheepSkin; + public string CourseWinner; + public string DistanceWinner; + public string RacehorseName; + public string TrainerName; + public string OwnerName; + public string JockeyName; + public float WeightsJockeyClaiming; + public float DecimalOdds; + public float DivisionSequence; + public float AgeYears; + public float DrawnStall; + public float BhaRating; + public string WeightValue; + public float PenaltyValue; + public int SexType; + public float FinishTimeInMilliseconds; + public DateTime RaceDateTime; + public float RaceYear; + public float RaceMonth; + public float RaceDay; + public float WeightInGrams; + } + public class HorseOddsTrainingPrediction + { + [ColumnName("Score")] + public float FinishTimeInMilliseconds; + } +} diff --git a/AutoBet.Learn/Program.cs b/AutoBet.Learn/Program.cs new file mode 100644 index 0000000..2fca4ec --- /dev/null +++ b/AutoBet.Learn/Program.cs @@ -0,0 +1,236 @@ +using Microsoft.ML; +using Microsoft.ML.Data; +using System; +using System.Data.SqlClient; +using System.Linq; +using AutoBet.Learn.Extensions; +using Microsoft.ML.Trainers; +using System.Collections.Generic; + +namespace AutoBet.Learn +{ + public class Program + { + static void Main(string[] args) + { + Learn(); + Console.WriteLine("Hello World!"); + } + public static DateTime DateToPredict = DateTime.Now.Date.AddDays(-3); + private static void Learn() + { + var daysAgo = DateToPredict.AddMonths(-3); + daysAgo = new DateTime(daysAgo.Year, daysAgo.Month, 1); + while (DateToPredict != daysAgo) + { + var mlContext = new MLContext(); + var model = Train(mlContext); + Evaluate(mlContext, model); + UpdatePredictions(mlContext, model); + DateToPredict = DateToPredict.AddDays(-1); + } + } + + private static void UpdatePredictions(MLContext mlContext, ITransformer model) + { + using (var db = new Db.HorseRacingDataContext()) + { + var races = db.Races.Where(e => e.RaceDate == DateToPredict.Date).ToList(); + foreach (var race in races) + { + var runners = db.Runners.Where(e => e.RaceId == race.RaceId && e.DecimalOdds != null).ToList(); + foreach (var runner in runners) + { + var fixture = db.Fixtures.FirstOrDefault(e => e.FixtureId == race.FixtureId); + if (fixture == null) + continue; + var prediction = TestSinglePrediction(mlContext, model, new HorseOddsTrainingData() + { + AgeYears = runner.AgeYears, + CourseName = fixture.CourseName, + FixtureType = (int)fixture.FixtureType, + BhaRating = String.IsNullOrWhiteSpace(runner.BhaRating) ? 0 : int.Parse(runner.BhaRating), + CourseWinner = runner.CourseWinner, + DecimalOdds = (float)runner.DecimalOdds.Value, + DistanceValue = race.DistanceValue, + DistanceWinner = runner.DistanceWinner, + DivisionSequence = race.DivisionSequence, + DrawnStall = runner.DrawnStall ?? 0, + FinishTimeInMilliseconds = 0, + HeadGearWearingCode = runner.HeadGearWearingCode ?? "Unknown", + HeadGearWearingSheepSkin = runner.HeadGearWearingSheepSkin, + JockeyName = runner.JockeyName, + OwnerName = runner.OwnerName, + PenaltyValue = runner.PenaltyValue, + PrizeAmount = race.PrizeAmount, + RaceClass = race.RaceClass, + RaceCriteriaRaceType = race.RaceCriteriaRaceType, + RaceDateTime = race.RaceDate + race.RaceTime, + RacehorseName = runner.RaceHorseNameWithoutCountry, + SexType = (int)runner.SexType, + TrainerName = runner.TrainerName, + WeightInGrams = (float)runner.WeightInGrams, + WeightsJockeyClaiming = runner.WeightsJockeyClaiming, + WeightValue = runner.WeightValue, + RaceDay = (float)race.RaceDate.Day, + RaceMonth = (float)race.RaceDate.Month, + RaceYear = (float)race.RaceDate.Year + }); + runner.Prediction = prediction; + } + } + db.SaveChanges(); + } + } + + private static IDataView LoadData(MLContext mlContext, string filter = "") + { + var loader = mlContext.Data.CreateDatabaseLoader(); + + var sqlCommand = @"SELECT + [CourseName] + ,[FixtureType] + ,[RaceCriteriaRaceType] + ,[DistanceValue] + ,[RaceClass] + ,[PrizeAmount] + ,[HeadGearWearingCode] + ,[HeadGearWearingSheepSkin] + ,[CourseWinner] + ,[DistanceWinner] + ,[RacehorseName] + ,[TrainerName] + ,[OwnerName] + ,[JockeyName] + ,[WeightsJockeyClaiming] + ,[DecimalOdds] + ,[DivisionSequence] + ,[AgeYears] + ,[DrawnStall] + ,[BhaRating] + ,[WeightValue] + ,[PenaltyValue] + ,[SexType] + ,ISNULL([FinishTimeInMilliseconds],0) as FinishTimeInMilliseconds + ,[RaceDateTime] + ,[RaceMonth] + ,[RaceYear] + ,[RaceDay] + ,[WeightInGrams] + FROM [dbo].[ResultsView] WHERE DecimalOdds IS NOT NULL " + filter; + + var dbSource = new DatabaseSource(SqlClientFactory.Instance, Db.HorseRacingDataContext.ConnectionString, sqlCommand); + var data = loader.Load(dbSource); + return data; + } + + public static ITransformer Train(MLContext mlContext) + { + var data = LoadData(mlContext, $"AND FinishTimeInMilliseconds IS NOT NULL AND RaceDate < '{DateToPredict.AddDays(-1).ToString("yyyy/MM/dd", null)}'"); + //var trainers = new Dictionary, object>>() + //{ + // { "FastForest", mlContext.Regression.Trainers.FastForest() }, + // { "FastTree", mlContext.Regression.Trainers.FastTree() }, + // { "FastTreeTweedie", mlContext.Regression.Trainers.FastTreeTweedie() }, + // { "LbfgsPoissonRegression", mlContext.Regression.Trainers.LbfgsPoissonRegression() }, + // { "Scda", mlContext.Regression.Trainers.Sdca() } + //}; + + //foreach (var trainer in trainers) + //{ + // var modelPipeline = DataTransform(mlContext); + // var pipelineWithTrainer = modelPipeline.Append(trainer.Value); + + // var model = pipelineWithTrainer.Fit(data); + // Console.WriteLine($">>>>>>> Evaluating algorithm: {trainer.Key} <<<<<<<"); + // Evaluate(mlContext, model); + //} + + + Console.WriteLine($"Loading data"); + var pipeline = DataTransform(mlContext); + + //var pipelineWithTrainer = pipeline.Append(mlContext.Regression.Trainers.LbfgsPoissonRegression()); + + var selectedPipelineWithTrainer = pipeline.Append(pipeline.Append(mlContext.Regression.Trainers.LbfgsPoissonRegression())); + var finalModel = selectedPipelineWithTrainer.Fit(data); + + return finalModel; + } + + private static EstimatorChain DataTransform(MLContext mlContext) + { + var pipeline = mlContext.Transforms + .CopyColumns(outputColumnName: "Label", inputColumnName: "FinishTimeInMilliseconds") + .EncodeColumn(mlContext, "CourseName") + .EncodeColumn(mlContext, "FixtureType") + .EncodeColumn(mlContext, "RaceCriteriaRaceType") + .EncodeColumn(mlContext, "HeadGearWearingCode") + .EncodeColumn(mlContext, "RacehorseName") + .EncodeColumn(mlContext, "TrainerName") + .EncodeColumn(mlContext, "OwnerName") + .EncodeColumn(mlContext, "JockeyName") + .EncodeColumn(mlContext, "HeadGearWearingSheepSkin") + .EncodeColumn(mlContext, "CourseWinner") + .EncodeColumn(mlContext, "DistanceWinner") + .EncodeColumn(mlContext, "WeightValue") + .EncodeColumn(mlContext, "SexType") + .Append(mlContext.Transforms.Concatenate("Features", + "CourseNameEncoded", + "FixtureTypeEncoded", + "RaceCriteriaRaceTypeEncoded", + "DistanceValue", + "RaceClass", + "PrizeAmount", + "HeadGearWearingCodeEncoded", + "HeadGearWearingSheepSkinEncoded", + "CourseWinnerEncoded", + "DistanceWinnerEncoded", + "RacehorseNameEncoded", + "TrainerNameEncoded", + "OwnerNameEncoded", + "JockeyNameEncoded", + "WeightsJockeyClaiming", + "DecimalOdds", + "DivisionSequence", + "AgeYears", + "DrawnStall", + "WeightValueEncoded", + "PenaltyValue", + "SexTypeEncoded", + "RaceMonth", + "RaceYear", + "RaceDay")); + + return pipeline; + } + + private static RegressionMetrics Evaluate(MLContext mlContext, ITransformer model) + { + var dataView = LoadData(mlContext, $"AND FinishTimeInMilliseconds IS NOT NULL AND RaceDate = '{DateToPredict.AddDays(-1).ToString("yyyy/MM/dd", null)}'"); + var predictions = model.Transform(dataView); + var metrics = mlContext.Regression.Evaluate(predictions, "Label", "Score"); + Console.WriteLine(); + + + var result = $"* Model quality metrics evaluation R2: {metrics.RSquared:0.####} Root Mean Squared Error: {metrics.RootMeanSquaredError:#.####} *"; + var stars = String.Concat(Enumerable.Range(0, result.Length).Select(e => "*")); + + Console.WriteLine(stars); + Console.WriteLine(result); + Console.WriteLine(stars); + + Console.WriteLine(); + return metrics; + } + + private static float TestSinglePrediction(MLContext mlContext, ITransformer model, HorseOddsTrainingData values) + { + var predictionFunction = mlContext.Model.CreatePredictionEngine(model); + var prediction = predictionFunction.Predict(values); + Console.WriteLine($"Predicted time for {values.RacehorseName}: {prediction.FinishTimeInMilliseconds}"); + return prediction.FinishTimeInMilliseconds; + } + + } +} diff --git a/AutoBet.sln b/AutoBet.sln new file mode 100644 index 0000000..7bfd1ae --- /dev/null +++ b/AutoBet.sln @@ -0,0 +1,60 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29424.173 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AutoBet.Core", "AutoBet.Core\AutoBet.Core.csproj", "{42403004-C636-46BF-B337-166A8EA583F8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AutoBet.Core.Tests", "AutoBet.Core.Tests\AutoBet.Core.Tests.csproj", "{48657C18-836A-4556-84A9-8C521B58993B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AutoBet.ApiGenerator", "AutoBet.ApiGenerator\AutoBet.ApiGenerator.csproj", "{0AFF4C6B-F6F7-4B70-BA5F-5D68FB89AE7A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AutoBet.DataRecorded", "AutoBet.DataRecorded\AutoBet.DataRecorded.csproj", "{3CFBBC04-ED1D-4A82-8479-83CD7E49954E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{A43D1F10-EDE6-4123-A20B-55CACFA2070F}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutoBet.Db", "AutoBet.Db\AutoBet.Db.csproj", "{250314C9-8EDD-4C37-9E07-96005A2D8B24}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutoBet.Learn", "AutoBet.Learn\AutoBet.Learn.csproj", "{F8FAB0EB-6A35-4413-9961-317C52141924}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {42403004-C636-46BF-B337-166A8EA583F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {42403004-C636-46BF-B337-166A8EA583F8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {42403004-C636-46BF-B337-166A8EA583F8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {42403004-C636-46BF-B337-166A8EA583F8}.Release|Any CPU.Build.0 = Release|Any CPU + {48657C18-836A-4556-84A9-8C521B58993B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {48657C18-836A-4556-84A9-8C521B58993B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {48657C18-836A-4556-84A9-8C521B58993B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {48657C18-836A-4556-84A9-8C521B58993B}.Release|Any CPU.Build.0 = Release|Any CPU + {0AFF4C6B-F6F7-4B70-BA5F-5D68FB89AE7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0AFF4C6B-F6F7-4B70-BA5F-5D68FB89AE7A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0AFF4C6B-F6F7-4B70-BA5F-5D68FB89AE7A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0AFF4C6B-F6F7-4B70-BA5F-5D68FB89AE7A}.Release|Any CPU.Build.0 = Release|Any CPU + {3CFBBC04-ED1D-4A82-8479-83CD7E49954E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3CFBBC04-ED1D-4A82-8479-83CD7E49954E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3CFBBC04-ED1D-4A82-8479-83CD7E49954E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3CFBBC04-ED1D-4A82-8479-83CD7E49954E}.Release|Any CPU.Build.0 = Release|Any CPU + {250314C9-8EDD-4C37-9E07-96005A2D8B24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {250314C9-8EDD-4C37-9E07-96005A2D8B24}.Debug|Any CPU.Build.0 = Debug|Any CPU + {250314C9-8EDD-4C37-9E07-96005A2D8B24}.Release|Any CPU.ActiveCfg = Release|Any CPU + {250314C9-8EDD-4C37-9E07-96005A2D8B24}.Release|Any CPU.Build.0 = Release|Any CPU + {F8FAB0EB-6A35-4413-9961-317C52141924}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F8FAB0EB-6A35-4413-9961-317C52141924}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F8FAB0EB-6A35-4413-9961-317C52141924}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F8FAB0EB-6A35-4413-9961-317C52141924}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {3346276E-6029-44D9-A4C5-7432137B0348} + EndGlobalSection +EndGlobal

    z;G$>`ckjKrEn)WxBWfdRt56%(T*Fk0=^Y=swSdjJhUSVQDkCbZQ2C7@qe}Nr_F)+% zv-VYg&ly=NUu8sZL~j*(_vReE`KqFei2ja|ujy8k-T)2l>u@2k-S}?YooZey;xApk zy8NS$e)H8Q|N1W*p8yvz`#45i^pTpR%jjBu_b|Sn-{otJ=nOye5OePLP^m2)$UGmB zpFRJF6w+DCb%3Kdd8q7@%oqJ6K5+_XWt?^&Ke-e74qlUN()-lAkMTNtKDnyToV+KW z+`v3S?z70+@y*P;zpg&X^FF~R4{?SU(HZ$1D$5s8fiAzDIr%OB+8G?h-bw!B8adTU z);LBCnKgwEQKSB;llOm4y-y#Q`(*L^7Ve+F9pS3n4L~Tujv+bYd(|h>m7P6#hxd0% z<%UTKR?fc&ir-2upi1*{@>$UHa&i$>$gkk{>-c>IuiwD?mvO{R{I|b)Ciyb%ng4h{ zd`hQqX1!ik-Se)bLr-V6^wGbdj+Q+QgfDo1n~19O39}z}2W#XxK7)0!?nAD!ras4G z^W5}euHN)3c%Qwz<75?gz%GG(+}{>{7XKa{zrKxYKE&EDC>~qIlOUZ|6{oG^3_JLp zbURWU#p}zYXvtFhomIW-u~V-;s(hYImaiMfsAM+M#*;d7irzKThJBVdfZp{vK7QqG6hEazSVejebA zhd86A!^d#{f~bFRQbH=Y?RL|p@It#H(Y;e^?hT!Vp_+Ho4E2NU`K8a|4o_!A6 z$F$voG^Jd7{RCUQ|8-nZx_h!+`9cwmI+2;0B0QdwV^gh?Qxt`6Hkw?{ti#k+OKLr| z#x6M4q3Nip_#b;oMRJ_huw7FwtD}q5;ylzcsWA(l>zY2&MWFfTZ+l3Qk&-yn##(z* zs&!4LTj1g18jAe%*S)0PIC%prryk}$#r)ni?QW|TNM1!&P^8>{?wE4sE^i}9eQL=E zN~>_s^=jEqZ8(YSx2-h%Y*$uvHL#6j@R}t?J{kfwU1)=DlRGsBdaL#=AZPMH&eYa9Spl^mbX&= zTMwwj=f@qI_F(7p`vyD-`Xk!sm)#L(h2~3^)h%0A=ZoyWnH!3i@hGEk`Irg$*zT9v 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⩔j9ihv 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 U;Yky(+I)h|R9R%uC#!z{KjgrAMgRZ+ literal 0 HcmV?d00001 diff --git a/AutoBet.ApiGenerator/ApiClassessGenerator.cs b/AutoBet.ApiGenerator/ApiClassessGenerator.cs new file mode 100644 index 0000000..b67b6e6 --- /dev/null +++ b/AutoBet.ApiGenerator/ApiClassessGenerator.cs @@ -0,0 +1,72 @@ +using AutoBet.ApiGenerator.Extensions; +using System; +using System.IO; +using System.Text; +using System.Xml.Linq; + +namespace AutoBet.ApiGenerator +{ + internal class ApiClassessGenerator + { + public string _inputXmlFile { get; } + public string _outputFilesDirectory { get; } + + public ApiClassessGenerator(string inputXmlFile, string outputFilesDirectory) + { + _inputXmlFile = inputXmlFile; + _outputFilesDirectory = outputFilesDirectory; + } + + internal void Process(string namespaceValue, string modelFolder) + { + var doc = XDocument.Load(_inputXmlFile); + var nodes = doc.Root.Elements("dataType"); + namespaceValue += "." + modelFolder; + var modelsDirectory = Path.Combine(_outputFilesDirectory, modelFolder); + Directory.CreateDirectory(modelsDirectory); + + foreach (var node in nodes) + { + var sb = new StringBuilder(); + + CSharpClassBuilder.UsingHeader(sb, namespaceValue, namespaceValue + ".Enums"); + var descriptionNode = node.Element("description"); + if (descriptionNode != null && !String.IsNullOrWhiteSpace(descriptionNode.Value)) + { + CSharpClassBuilder.Summary(sb, descriptionNode.Value, isClassSummary: true); + } + + var name = node.Attribute("name").Value; + CSharpClassBuilder.ClassHeader(sb, name); + var parameters = node.Elements("parameter"); + foreach(var parameter in parameters) + { + sb.AppendWithIndent(8, "public "); + var parameterReturnType = CSharpClassBuilder.GetDataType(parameter.Attribute("type").Value); + sb.Append(parameterReturnType); + sb.Append(" "); + var parameterName = parameter.Attribute("name").Value; + for(var i = 0; i < parameterName.Length; i++) + { + if(i == 0) + { + sb.Append(Char.ToUpper(parameterName[i])); + continue; + } + + sb.Append(parameterName[i]); + } + sb.Append(" { get; set; }"); + sb.AppendLine(); + } + + CSharpClassBuilder.ClassFooter(sb); + CSharpClassBuilder.UsingFooter(sb); + + File.WriteAllText(Path.Combine(modelsDirectory, $"{name}.cs"), sb.ToString()); + } + } + + + } +} \ No newline at end of file diff --git a/AutoBet.ApiGenerator/ApiClientGenetaor.cs b/AutoBet.ApiGenerator/ApiClientGenetaor.cs new file mode 100644 index 0000000..22537c0 --- /dev/null +++ b/AutoBet.ApiGenerator/ApiClientGenetaor.cs @@ -0,0 +1,153 @@ +using AutoBet.ApiGenerator.Extensions; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml.Linq; + +namespace AutoBet.ApiGenerator +{ + internal class ApiClientGenetaor + { + private string _inputXmlFile { get; } + private string _outputFilesDirectory { get; } + + public ApiClientGenetaor(string inputXmlFile, string outputFilesDirectory) + { + _inputXmlFile = inputXmlFile; + _outputFilesDirectory = outputFilesDirectory; + } + + public void Process(string apiClientName, string namespaceValue) + { + var doc = XDocument.Load(_inputXmlFile); + var sb = new StringBuilder(); + sb.AppendLine("using System;"); + sb.AppendLine("using System.Collections.Generic;"); + sb.AppendLine("using System.Net.Http;"); + sb.AppendLine("using System.Net.Http.Headers;"); + sb.AppendLine("using System.Text;"); + sb.AppendLine("using System.Threading.Tasks;"); + sb.AppendFormat("using {0}.{1}{2};", namespaceValue, apiClientName, "Models"); + sb.AppendLine(); + sb.AppendFormat("using {0}.{1}{2};", namespaceValue, apiClientName, "Models.Enums"); + sb.AppendLine(); + sb.AppendLine(); + sb.Append("namespace "); + sb.Append(namespaceValue); + sb.AppendLine(); + sb.AppendLine("{"); + sb.AppendWithIndent(4, "public class "); + sb.Append(apiClientName); + sb.Append("ApiClient"); + sb.AppendLine(); + sb.AppendWithIndent(4, "{\r\n"); + + var nodes = doc.Root.Elements("operation"); + foreach(var node in nodes) + { + AppendDescription(sb, node); + + sb.AppendWithIndent(8, "public "); + var paramaeters = node.Element("parameters"); + var response = paramaeters.Element("simpleResponse"); + sb.Append("async Task<"); + var returnType = CSharpClassBuilder.GetDataType(response.Attribute("type").Value); + sb.Append(returnType); + sb.Append("> "); + var camelcaseMethodName = node.Attribute("name").Value; + var methodName = GetMethodName(camelcaseMethodName); + sb.Append(methodName); + var parametersAppended = AppendParameters(sb, paramaeters.Element("request")); + sb.AppendWithIndent(8, "{\r\n"); + AppendMethodBody(sb, returnType, camelcaseMethodName + "/", parametersAppended); + sb.AppendWithIndent(8, "}\r\n\r\n"); + } + sb.Remove(sb.Length - 2, 2); + sb.AppendWithIndent(4, "}\r\n"); + sb.Append("}"); + File.WriteAllText(Path.Combine(_outputFilesDirectory, $"{apiClientName}ApiClient.cs"), sb.ToString()); + } + + private void AppendMethodBody(StringBuilder sb, string returnType, string endpoint, string[] paramaters) + { + var request = ""; + if(paramaters.Length > 0) + { + sb.AppendWithIndent(12, "var request = new\r\n"); + sb.AppendWithIndent(12, "{\r\n"); + foreach (var parameter in paramaters) + { + sb.AppendWithIndent(16, parameter); + sb.Append(",\r\n"); + } + sb.Remove(sb.Length - 3, 3); + sb.Append("\r\n"); + sb.AppendWithIndent(12, "};\r\n"); + request = ", request"; + } + sb.AppendWithIndent(12, "var result = await ExecuteRequest<"); + sb.Append(returnType); + sb.Append(">(_endpoint + \""); + sb.Append(endpoint); + sb.Append("\""); + sb.Append(request); + sb.Append(");\r\n"); + sb.AppendWithIndent(12, "return result;\r\n"); + } + + private string[] AppendParameters(StringBuilder sb, XElement request) + { + var paramatersAppended = new List(); + sb.Append("("); + var parameters = request.Elements("parameter"); + foreach (var parameter in parameters) + { + var name = parameter.Attribute("name").Value; + var type = CSharpClassBuilder.GetDataType(parameter.Attribute("type").Value); + sb.Append(type); + + var mandatory = parameter.Attribute("mandatory"); + var isRequired = mandatory != null && mandatory.Value != null && mandatory.Value == "true"; + if (!isRequired && (type == "int" || type == "long" || type == "bool")) + { + sb.Append("?"); + } + + sb.Append(" "); + + sb.Append(name); + + if (!isRequired) + { + sb.Append(" = null"); + } + + paramatersAppended.Add(name); + sb.Append(", "); + } + if(parameters.Any()) + { + sb.Remove(sb.Length - 2, 2); + } + + sb.Append(")\r\n"); + return paramatersAppended.ToArray(); + } + + private void AppendDescription(StringBuilder sb, XElement node) + { + var description = node.Element("description").Value; + if (!String.IsNullOrWhiteSpace(description)) + { + CSharpClassBuilder.Summary(sb, description); + } + } + + private static string GetMethodName(string methodName) + { + return Char.ToUpper(methodName[0]).ToString() + methodName.Substring(1, methodName.Length - 1); + } + } +} \ No newline at end of file diff --git a/AutoBet.ApiGenerator/ApiEnumsGenerator.cs b/AutoBet.ApiGenerator/ApiEnumsGenerator.cs new file mode 100644 index 0000000..6e00b81 --- /dev/null +++ b/AutoBet.ApiGenerator/ApiEnumsGenerator.cs @@ -0,0 +1,89 @@ +using AutoBet.ApiGenerator.Extensions; +using System; +using System.IO; +using System.Text; +using System.Xml.Linq; + +namespace AutoBet.ApiGenerator +{ + internal class ApiEnumsGenerator + { + public string _inputXmlFile { get; } + public string _outputFilesDirectory { get; } + + public ApiEnumsGenerator(string inputXmlFile, string outputFilesDirectory) + { + _inputXmlFile = inputXmlFile; + _outputFilesDirectory = outputFilesDirectory; + } + + internal void Process(string namespaceValue, string modelFolder, string enumFolder) + { + var doc = XDocument.Load(_inputXmlFile); + var nodes = doc.Root.Elements("simpleType"); + namespaceValue += $".{modelFolder}.{enumFolder}"; + var enumsDirectory = Path.Combine(_outputFilesDirectory, modelFolder, enumFolder); + Directory.CreateDirectory(enumsDirectory); + + foreach (var node in nodes) + { + var sb = new StringBuilder(); + + CSharpClassBuilder.UsingHeader(sb, namespaceValue, "System.Runtime.Serialization"); + var descriptionNode = node.Element("description"); + if (descriptionNode != null && !String.IsNullOrWhiteSpace(descriptionNode.Value)) + { + CSharpClassBuilder.Summary(sb, descriptionNode.Value, isClassSummary: true); + } + + var name = node.Attribute("name").Value; + CSharpClassBuilder.EnumHeader(sb, name); + var validValues = node.Element("validValues"); + if (validValues == null) + { + continue; + } + + var enumValues = validValues.Elements("value"); + foreach(var enumValue in enumValues) + { + var parameterName = enumValue.Attribute("name").Value; + sb.AppendWithIndent(8, ""); + sb.AppendFormat("[EnumMember(Value = \"{0}\")]", parameterName); + sb.AppendLine(); + sb.AppendWithIndent(8, ""); + + var upperCaseNextLetter = true; + for (var i = 0; i < parameterName.Length; i++) + { + if (upperCaseNextLetter) + { + upperCaseNextLetter = false; + sb.Append(Char.ToUpper(parameterName[i])); + continue; + } + + if(parameterName[i] == '_') + { + upperCaseNextLetter = true; + continue; + } + + sb.Append(Char.ToLower(parameterName[i])); + } + sb.Append(','); + sb.AppendLine(); + } + + sb.Remove(sb.Length - 3, 3); + sb.AppendLine(); + CSharpClassBuilder.ClassFooter(sb); + CSharpClassBuilder.UsingFooter(sb); + + File.WriteAllText(Path.Combine(enumsDirectory, $"{name}.cs"), sb.ToString()); + } + } + + + } +} \ No newline at end of file diff --git a/AutoBet.ApiGenerator/AutoBet.ApiGenerator.csproj b/AutoBet.ApiGenerator/AutoBet.ApiGenerator.csproj new file mode 100644 index 0000000..a0c2e68 --- /dev/null +++ b/AutoBet.ApiGenerator/AutoBet.ApiGenerator.csproj @@ -0,0 +1,13 @@ + + + + Exe + netcoreapp2.1 + + + + + + + + diff --git a/AutoBet.ApiGenerator/CSharpClassBuilder.cs b/AutoBet.ApiGenerator/CSharpClassBuilder.cs new file mode 100644 index 0000000..ce1a41e --- /dev/null +++ b/AutoBet.ApiGenerator/CSharpClassBuilder.cs @@ -0,0 +1,103 @@ +using AutoBet.ApiGenerator.Extensions; +using System; +using System.Collections.Generic; +using System.Text; + +namespace AutoBet.ApiGenerator +{ + public static class CSharpClassBuilder + { + public static void Summary(StringBuilder sb, string summary, bool isClassSummary = false) + { + var indentSpaces = isClassSummary ? 4 : 8; + if (!String.IsNullOrWhiteSpace(summary)) + { + sb.AppendWithIndent(indentSpaces, "///