diff --git a/TrackerLibrary/DataAccess/IDataConnection.cs b/TrackerLibrary/DataAccess/IDataConnection.cs index a3c0058..8b2420a 100644 --- a/TrackerLibrary/DataAccess/IDataConnection.cs +++ b/TrackerLibrary/DataAccess/IDataConnection.cs @@ -10,6 +10,7 @@ namespace TrackerLibrary.DataAccess PrizeModel CreatePrize(PrizeModel model); PersonModel CreatePerson(PersonModel model); TeamModel CreateTeam(TeamModel model); + TournamentModel CreateTournament(TournamentModel model); List GetTeam_All(); List GetPerson_All(); } diff --git a/TrackerLibrary/DataAccess/SqlConnector.cs b/TrackerLibrary/DataAccess/SqlConnector.cs index 06bcb95..9e2f9ce 100644 --- a/TrackerLibrary/DataAccess/SqlConnector.cs +++ b/TrackerLibrary/DataAccess/SqlConnector.cs @@ -74,7 +74,7 @@ namespace TrackerLibrary.DataAccess model.Id = p.Get("@Id"); - foreach(PersonModel tm in model.TeamMembers) + foreach (PersonModel tm in model.TeamMembers) { p = new DynamicParameters(); p.Add("@TeamId", model.Id); @@ -89,6 +89,65 @@ namespace TrackerLibrary.DataAccess } + public TournamentModel CreateTournament(TournamentModel model) + { + using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(GlobalConfig.CnnString(db))) + { + DynamicParameters p = SaveTournament(model, connection); + + p = SaveTournamentPrizes(model, connection, p); + + p = SaveTournamentEntries(model, connection, p); + + return model; + } + } + + private static DynamicParameters SaveTournament(TournamentModel model, IDbConnection connection) + { + var p = new DynamicParameters(); + p.Add("@TournamentName", model.TournamentName); + p.Add("@EntryFee", model.EntryFee); + p.Add("@Id", 0, dbType: DbType.Int32, direction: ParameterDirection.Output); + + connection.Execute("dbo.spTournaments_Insert", p, commandType: CommandType.StoredProcedure); + + model.Id = p.Get("@Id"); + return p; + } + + private static DynamicParameters SaveTournamentEntries(TournamentModel model, IDbConnection connection, DynamicParameters p) + { + foreach (TeamModel tm in model.EnteredTeams) + { + p = new DynamicParameters(); + p.Add("@TournamentId", model.Id); + p.Add("@TeamId", tm.Id); + p.Add("@Id", 0, dbType: DbType.Int32, direction: ParameterDirection.Output); + + connection.Execute("dbo.spTournamentEntries_Insert", p, commandType: CommandType.StoredProcedure); + + } + + return p; + } + + private static DynamicParameters SaveTournamentPrizes(TournamentModel model, IDbConnection connection, DynamicParameters p) + { + foreach (PrizeModel pz in model.Prizes) + { + p = new DynamicParameters(); + p.Add("@TournamentId", model.Id); + p.Add("@PrizeId", pz.Id); + p.Add("@Id", 0, dbType: DbType.Int32, direction: ParameterDirection.Output); + + connection.Execute("dbo.spTournamentPrizes_Insert", p, commandType: CommandType.StoredProcedure); + + } + + return p; + } + public List GetPerson_All() { @@ -107,11 +166,11 @@ namespace TrackerLibrary.DataAccess { output = connection.Query("dbo.spTeam_GetAll").ToList(); - foreach(TeamModel team in output) + foreach (TeamModel team in output) { var p = new DynamicParameters(); p.Add("@TeamId", team.Id); - team.TeamMembers = connection.Query("dbo.spTeamMembers_GetByTeam",p, commandType: CommandType.StoredProcedure).ToList(); + team.TeamMembers = connection.Query("dbo.spTeamMembers_GetByTeam", p, commandType: CommandType.StoredProcedure).ToList(); } } return output; diff --git a/TrackerLibrary/DataAccess/TextConnector.cs b/TrackerLibrary/DataAccess/TextConnector.cs index ebc10e7..7269878 100644 --- a/TrackerLibrary/DataAccess/TextConnector.cs +++ b/TrackerLibrary/DataAccess/TextConnector.cs @@ -12,6 +12,8 @@ namespace TrackerLibrary.DataAccess private const string PrizesFile = "PrizeModels.csv"; private const string PeopleFile = "PersonModels.csv"; private const string TeamFile = "TeamModels.csv"; + private const string TournamentFile = "TournamentModels.csv"; + public PersonModel CreatePerson(PersonModel model) { @@ -98,5 +100,10 @@ namespace TrackerLibrary.DataAccess { return TeamFile.FullFilePath().LoadFile().ConvertToTeamModels(PeopleFile); } + public TournamentModel CreateTournament(TournamentModel model) + { + List tournaments = TournamentFile.FullFilePath().LoadFile().ConvertToTournamentModels(); + } + } } diff --git a/TrackerLibrary/DataAccess/TextConnectorProcessor.cs b/TrackerLibrary/DataAccess/TextConnectorProcessor.cs index b2f2726..9554809 100644 --- a/TrackerLibrary/DataAccess/TextConnectorProcessor.cs +++ b/TrackerLibrary/DataAccess/TextConnectorProcessor.cs @@ -90,9 +90,12 @@ namespace TrackerLibrary.DataAccess.TextHelpers return output; } + public static List ConvertToTournamentModels(this List lines) + { + // id, TournamentName, EntryFee, (id|id|id - entered teams), (id|id|id - entered prizes), (rounds - id^id^id|id^id^id|id^id^id) + } - - public static void SaveToPrizeFile(this List models, string fileName) + public static void SaveToPrizeFile(this List models, string fileName) { List lines = new List(); diff --git a/TrackerLibrary/Models/TournamentModel.cs b/TrackerLibrary/Models/TournamentModel.cs index 4d76675..4fdacde 100644 --- a/TrackerLibrary/Models/TournamentModel.cs +++ b/TrackerLibrary/Models/TournamentModel.cs @@ -6,10 +6,29 @@ namespace TrackerLibrary.Models { public class TournamentModel { + /// + /// The unique identifier for this tournament + /// + public int Id { get; set; } + /// + /// The name given to this tournament + /// public string TournamentName { get; set; } + /// + /// The amount of money each team needs to put up to enter + /// public decimal EntryFee { get; set; } + /// + /// The set of teams that have entered + /// public List EnteredTeams { get; set; } = new List(); + /// + /// The list of prizes for various places + /// public List Prizes { get; set; } = new List(); - public List> MyProperty { get; set; } = new List>(); + /// + /// The matchups per round + /// + public List> Rounds { get; set; } = new List>(); } } diff --git a/TrackerUI/CreateTournamentForm.cs b/TrackerUI/CreateTournamentForm.cs index bfd5ec4..cba1296 100644 --- a/TrackerUI/CreateTournamentForm.cs +++ b/TrackerUI/CreateTournamentForm.cs @@ -41,7 +41,7 @@ namespace TrackerUI private void addTeamButton_Click(object sender, EventArgs e) { TeamModel t = (TeamModel)selectTeamDropDown.SelectedItem; - if(t != null) + if (t != null) { availableTeams.Remove(t); selectedTeams.Add(t); @@ -104,6 +104,32 @@ namespace TrackerUI private void createTournamentButton_Click(object sender, EventArgs e) { + //Validate data + decimal fee = 0; + bool feeAcceptable = decimal.TryParse(entryFeeValue.Text, out fee); + if (!feeAcceptable) + { + MessageBox.Show("You need to enter a valid Entry Fee.", + "Invalid Fee", + MessageBoxButtons.OK, + MessageBoxIcon.Error); + return; + } + + // Create our tournament model + TournamentModel tm = new TournamentModel(); + + tm.TournamentName = tournamentNameValue.Text; + tm.EntryFee = fee; + tm.Prizes = selectedPrizes; + tm.EnteredTeams = selectedTeams; + + // Wireup our matchups + + // Finally create the tournament entry + // Create all of the prizes entries + // Create all of team entries + GlobalConfig.Connection.CreateTournament(tm); } } diff --git a/TrackerUI/Program.cs b/TrackerUI/Program.cs index 85b18f2..473bdd0 100644 --- a/TrackerUI/Program.cs +++ b/TrackerUI/Program.cs @@ -19,7 +19,7 @@ namespace TrackerUI Application.SetCompatibleTextRenderingDefault(false); // Initialize the database connections - GlobalConfig.InitializeConnections(DatabaseType.TextFile); + GlobalConfig.InitializeConnections(DatabaseType.Sql); Application.Run(new CreateTournamentForm()); //Application.Run(new TournamentDashboardForm());