diff --git a/TrackerLibrary/DataAccess/IDataConnection.cs b/TrackerLibrary/DataAccess/IDataConnection.cs index bf12a67..f11d331 100644 --- a/TrackerLibrary/DataAccess/IDataConnection.cs +++ b/TrackerLibrary/DataAccess/IDataConnection.cs @@ -9,6 +9,7 @@ namespace TrackerLibrary.DataAccess { PrizeModel CreatePrize(PrizeModel model); PersonModel CreatePerson(PersonModel model); + TeamModel CreateTeam(TeamModel model); List GetPerson_All(); } } diff --git a/TrackerLibrary/DataAccess/SqlConnector.cs b/TrackerLibrary/DataAccess/SqlConnector.cs index c6ee4ee..710a017 100644 --- a/TrackerLibrary/DataAccess/SqlConnector.cs +++ b/TrackerLibrary/DataAccess/SqlConnector.cs @@ -20,7 +20,8 @@ namespace TrackerLibrary.DataAccess private const string db = "Tournaments"; public PersonModel CreatePerson(PersonModel model) { - using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(GlobalConfig.CnnString(db))) { + using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(GlobalConfig.CnnString(db))) + { var p = new DynamicParameters(); p.Add("@FirstName", model.FirstName); p.Add("@LastName", model.LastName); @@ -61,6 +62,33 @@ namespace TrackerLibrary.DataAccess } } + public TeamModel CreateTeam(TeamModel model) + { + using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(GlobalConfig.CnnString(db))) + { + var p = new DynamicParameters(); + p.Add("@TeamName", model.TeamName); + p.Add("@Id", 0, dbType: DbType.Int32, direction: ParameterDirection.Output); + + connection.Execute("dbo.spTeams_Insert", p, commandType: CommandType.StoredProcedure); + + model.Id = p.Get("@Id"); + + foreach(PersonModel tm in model.TeamMembers) + { + p = new DynamicParameters(); + p.Add("@TeamId", model.Id); + p.Add("@PersonId", tm.Id); + + connection.Execute("dbo.spTeamMembers_Insert", p, commandType: CommandType.StoredProcedure); + + } + + return model; + } + + } + public List GetPerson_All() { diff --git a/TrackerLibrary/DataAccess/TextConnector.cs b/TrackerLibrary/DataAccess/TextConnector.cs index 7996374..e909355 100644 --- a/TrackerLibrary/DataAccess/TextConnector.cs +++ b/TrackerLibrary/DataAccess/TextConnector.cs @@ -11,6 +11,7 @@ namespace TrackerLibrary.DataAccess { private const string PrizesFile = "PrizeModels.csv"; private const string PeopleFile = "PersonModels.csv"; + private const string TeamFile = "TeamModels.csv"; public PersonModel CreatePerson(PersonModel model) { @@ -59,6 +60,35 @@ namespace TrackerLibrary.DataAccess return model; } + public TeamModel CreateTeam(TeamModel model) + { + // Load the text file + // Convert the text to a List>PrizeModel> + List teams = TeamFile.FullFilePath().LoadFile().ConvertToTeamModels(PeopleFile); + + // Find the max Id + + int currentId = 1; + + if (teams.Count > 0) + { + currentId = teams.OrderByDescending(x => x.Id).First().Id + 1; + } + + model.Id = currentId; + + // Add the new record with the new ID (max +1) + teams.Add(model); + + + + // Convert the prizes to a List + // Save the list to the text file + teams.SaveToTeamFile(TeamFile); + + return model; + } + public List GetPerson_All() { return PeopleFile.FullFilePath().LoadFile().ConvertToPersonModels(); diff --git a/TrackerLibrary/DataAccess/TextConnectorProcessor.cs b/TrackerLibrary/DataAccess/TextConnectorProcessor.cs index 20610b7..b2f2726 100644 --- a/TrackerLibrary/DataAccess/TextConnectorProcessor.cs +++ b/TrackerLibrary/DataAccess/TextConnectorProcessor.cs @@ -61,7 +61,38 @@ namespace TrackerLibrary.DataAccess.TextHelpers return output; } - public static void SaveToPrizeFile(this List models, string fileName) + public static List ConvertToTeamModels(this List lines, string peopleFileName) + { + // id, team name,list of ids separated by pipe + // 3,Start Team, 1|4 + List output = new List(); + List people = peopleFileName.FullFilePath().LoadFile().ConvertToPersonModels(); + + foreach (string line in lines) + { + string[] cols = line.Split(','); + + TeamModel t = new TeamModel(); + t.Id = int.Parse(cols[0]); + t.TeamName = cols[1]; + + string[] personIds = cols[2].Split('|'); + + foreach(string id in personIds) + { + t.TeamMembers.Add(people.Where(x => x.Id == int.Parse(id)).First()); + } + + output.Add(t); + + } + + return output; + } + + + + public static void SaveToPrizeFile(this List models, string fileName) { List lines = new List(); @@ -83,5 +114,32 @@ namespace TrackerLibrary.DataAccess.TextHelpers File.WriteAllLines(fileName.FullFilePath(), lines); } + + public static void SaveToTeamFile(this List models, string fileName) + { + List lines = new List(); + foreach(TeamModel t in models) + { + lines.Add($"{t.Id},{t.TeamName},{ConvertPeopleListToString(t.TeamMembers)}"); + } + + File.WriteAllLines(fileName.FullFilePath(), lines); + } + + private static string ConvertPeopleListToString(List people) + { + string output = ""; + if (people.Count==0) + { + return ""; + } + foreach(PersonModel p in people) + { + output += $"{p.Id}|"; + } + + output = output.Substring(0, output.Length - 1); + return output; + } } } diff --git a/TrackerLibrary/Models/TeamModel.cs b/TrackerLibrary/Models/TeamModel.cs index fd67889..1557888 100644 --- a/TrackerLibrary/Models/TeamModel.cs +++ b/TrackerLibrary/Models/TeamModel.cs @@ -6,6 +6,7 @@ namespace TrackerLibrary.Models { public class TeamModel { + public int Id { get; set; } public List TeamMembers { get; set; } = new List(); public string TeamName { get; set; } } diff --git a/TrackerUI/CreateTeamForm.Designer.cs b/TrackerUI/CreateTeamForm.Designer.cs index 1de0800..400b663 100644 --- a/TrackerUI/CreateTeamForm.Designer.cs +++ b/TrackerUI/CreateTeamForm.Designer.cs @@ -265,6 +265,7 @@ this.createTeamButton.TabIndex = 23; this.createTeamButton.Text = "Create Team"; this.createTeamButton.UseVisualStyleBackColor = true; + this.createTeamButton.Click += new System.EventHandler(this.createTeamButton_Click); // // CreateTeamForm // diff --git a/TrackerUI/CreateTeamForm.cs b/TrackerUI/CreateTeamForm.cs index 4c6dcc7..ae55463 100644 --- a/TrackerUI/CreateTeamForm.cs +++ b/TrackerUI/CreateTeamForm.cs @@ -121,5 +121,16 @@ namespace TrackerUI } } + + private void createTeamButton_Click(object sender, EventArgs e) + { + TeamModel t = new TeamModel(); + t.TeamName = createdTeamNameValue.Text; + t.TeamMembers = selectedTeamMembers; + + t = GlobalConfig.Connection.CreateTeam(t); + + // TODO - if we arent closing the form after insertion , reset the form + } } }