diff --git a/.vs/ProjectEvaluation/sportcompetitions.metadata.v7.bin b/.vs/ProjectEvaluation/sportcompetitions.metadata.v7.bin new file mode 100644 index 0000000..e023f61 Binary files /dev/null and b/.vs/ProjectEvaluation/sportcompetitions.metadata.v7.bin differ diff --git a/.vs/ProjectEvaluation/sportcompetitions.projects.v7.bin b/.vs/ProjectEvaluation/sportcompetitions.projects.v7.bin new file mode 100644 index 0000000..0d01198 Binary files /dev/null and b/.vs/ProjectEvaluation/sportcompetitions.projects.v7.bin differ diff --git a/.vs/SportCompetitions/FileContentIndex/3af0a0b4-4bd0-42f7-948b-45f407008bff.vsidx b/.vs/SportCompetitions/FileContentIndex/3af0a0b4-4bd0-42f7-948b-45f407008bff.vsidx deleted file mode 100644 index 9d88882..0000000 Binary files a/.vs/SportCompetitions/FileContentIndex/3af0a0b4-4bd0-42f7-948b-45f407008bff.vsidx and /dev/null differ diff --git a/.vs/SportCompetitions/FileContentIndex/520bc12e-7753-41c8-8cd7-7a037521dac6.vsidx b/.vs/SportCompetitions/FileContentIndex/520bc12e-7753-41c8-8cd7-7a037521dac6.vsidx deleted file mode 100644 index 2f895e3..0000000 Binary files a/.vs/SportCompetitions/FileContentIndex/520bc12e-7753-41c8-8cd7-7a037521dac6.vsidx and /dev/null differ diff --git a/.vs/SportCompetitions/FileContentIndex/60e5c2d6-664d-4365-a13c-bd417fc4d90e.vsidx b/.vs/SportCompetitions/FileContentIndex/60e5c2d6-664d-4365-a13c-bd417fc4d90e.vsidx deleted file mode 100644 index 3c4a016..0000000 Binary files a/.vs/SportCompetitions/FileContentIndex/60e5c2d6-664d-4365-a13c-bd417fc4d90e.vsidx and /dev/null differ diff --git a/.vs/SportCompetitions/FileContentIndex/9843ad41-1d1c-4332-b55d-66e06d1cad3e.vsidx b/.vs/SportCompetitions/FileContentIndex/9843ad41-1d1c-4332-b55d-66e06d1cad3e.vsidx new file mode 100644 index 0000000..7f1b82b Binary files /dev/null and b/.vs/SportCompetitions/FileContentIndex/9843ad41-1d1c-4332-b55d-66e06d1cad3e.vsidx differ diff --git a/.vs/SportCompetitions/FileContentIndex/54ff765c-ec0f-41fe-bb5a-4d1ba1aacb6e.vsidx b/.vs/SportCompetitions/FileContentIndex/b9270757-d793-4281-8e10-802f65eccec5.vsidx similarity index 86% rename from .vs/SportCompetitions/FileContentIndex/54ff765c-ec0f-41fe-bb5a-4d1ba1aacb6e.vsidx rename to .vs/SportCompetitions/FileContentIndex/b9270757-d793-4281-8e10-802f65eccec5.vsidx index cf7b909..5da6bcd 100644 Binary files a/.vs/SportCompetitions/FileContentIndex/54ff765c-ec0f-41fe-bb5a-4d1ba1aacb6e.vsidx and b/.vs/SportCompetitions/FileContentIndex/b9270757-d793-4281-8e10-802f65eccec5.vsidx differ diff --git a/.vs/SportCompetitions/FileContentIndex/bc87236d-e807-40b5-ae04-903aaf91551f.vsidx b/.vs/SportCompetitions/FileContentIndex/bc87236d-e807-40b5-ae04-903aaf91551f.vsidx new file mode 100644 index 0000000..fa0a68b Binary files /dev/null and b/.vs/SportCompetitions/FileContentIndex/bc87236d-e807-40b5-ae04-903aaf91551f.vsidx differ diff --git a/.vs/SportCompetitions/FileContentIndex/cb3afc0c-f4c8-45f0-984b-b9d9e4b7e958.vsidx b/.vs/SportCompetitions/FileContentIndex/cb3afc0c-f4c8-45f0-984b-b9d9e4b7e958.vsidx new file mode 100644 index 0000000..0b0aca0 Binary files /dev/null and b/.vs/SportCompetitions/FileContentIndex/cb3afc0c-f4c8-45f0-984b-b9d9e4b7e958.vsidx differ diff --git a/.vs/SportCompetitions/FileContentIndex/f1678bc3-e777-45da-9ff5-8e8c20d6e8f7.vsidx b/.vs/SportCompetitions/FileContentIndex/f1678bc3-e777-45da-9ff5-8e8c20d6e8f7.vsidx deleted file mode 100644 index 2454c9c..0000000 Binary files a/.vs/SportCompetitions/FileContentIndex/f1678bc3-e777-45da-9ff5-8e8c20d6e8f7.vsidx and /dev/null differ diff --git a/.vs/SportCompetitions/v17/.suo b/.vs/SportCompetitions/v17/.suo index 139aefb..7fa3e2d 100644 Binary files a/.vs/SportCompetitions/v17/.suo and b/.vs/SportCompetitions/v17/.suo differ diff --git a/SportCompetitionsBusinessLogic/obj/Debug/net7.0/SportCompetitionsBusinessLogic.csproj.AssemblyReference.cache b/SportCompetitionsBusinessLogic/obj/Debug/net7.0/SportCompetitionsBusinessLogic.csproj.AssemblyReference.cache index 6fcc3b7..7abf54f 100644 Binary files a/SportCompetitionsBusinessLogic/obj/Debug/net7.0/SportCompetitionsBusinessLogic.csproj.AssemblyReference.cache and b/SportCompetitionsBusinessLogic/obj/Debug/net7.0/SportCompetitionsBusinessLogic.csproj.AssemblyReference.cache differ diff --git a/SportCompetitionsContracts/BindingModels/ResultBindingModel.cs b/SportCompetitionsContracts/BindingModels/ResultBindingModel.cs index 80dc5fa..12a7a78 100644 --- a/SportCompetitionsContracts/BindingModels/ResultBindingModel.cs +++ b/SportCompetitionsContracts/BindingModels/ResultBindingModel.cs @@ -10,6 +10,7 @@ namespace SportCompetitionsContracts.BindingModels public class ResultBindingModel : IResultModel { public int Id { get; set; } + public string? ResultName { get; set; } public int CompetitionId { get; set; } public int TeamId { get; set; } public int ResultPosition { get; set; } diff --git a/SportCompetitionsContracts/SearchModels/ResultSearchModel.cs b/SportCompetitionsContracts/SearchModels/ResultSearchModel.cs index faea1e3..d41de87 100644 --- a/SportCompetitionsContracts/SearchModels/ResultSearchModel.cs +++ b/SportCompetitionsContracts/SearchModels/ResultSearchModel.cs @@ -9,5 +9,6 @@ namespace SportCompetitionsContracts.SearchModels public class ResultSearchModel { public int? Id { get; set; } + public string ResultName { get; set; } } } diff --git a/SportCompetitionsContracts/ViewModels/ResultViewModel.cs b/SportCompetitionsContracts/ViewModels/ResultViewModel.cs index fc51975..03fd623 100644 --- a/SportCompetitionsContracts/ViewModels/ResultViewModel.cs +++ b/SportCompetitionsContracts/ViewModels/ResultViewModel.cs @@ -11,6 +11,8 @@ namespace SportCompetitionsContracts.ViewModels public class ResultViewModel : IResultModel { public int Id { get; set; } + [DisplayName("Название результата")] + public string? ResultName { get; set; } [DisplayName("Соревнование")] public int CompetitionId { get; set; } [DisplayName("Команда")] diff --git a/SportCompetitionsContracts/obj/Debug/net7.0/SportCompetitionsContracts.csproj.AssemblyReference.cache b/SportCompetitionsContracts/obj/Debug/net7.0/SportCompetitionsContracts.csproj.AssemblyReference.cache index 26cd936..f26c7ec 100644 Binary files a/SportCompetitionsContracts/obj/Debug/net7.0/SportCompetitionsContracts.csproj.AssemblyReference.cache and b/SportCompetitionsContracts/obj/Debug/net7.0/SportCompetitionsContracts.csproj.AssemblyReference.cache differ diff --git a/SportCompetitionsDataModels/Models/IResultModel.cs b/SportCompetitionsDataModels/Models/IResultModel.cs index 33719f3..2efd27f 100644 --- a/SportCompetitionsDataModels/Models/IResultModel.cs +++ b/SportCompetitionsDataModels/Models/IResultModel.cs @@ -8,6 +8,7 @@ namespace SportCompetitionsDataModels.Models { public interface IResultModel : IId { + string ResultName { get; set; } int CompetitionId { get; set; } int TeamId { get; set; } int ResultPosition { get; set; } diff --git a/SportCompetitionsDatabaseImplement/Implements/CompetitionStorage.cs b/SportCompetitionsDatabaseImplement/Implements/CompetitionStorage.cs new file mode 100644 index 0000000..f817b04 --- /dev/null +++ b/SportCompetitionsDatabaseImplement/Implements/CompetitionStorage.cs @@ -0,0 +1,77 @@ +using SportCompetitionsContracts.BindingModels; +using SportCompetitionsContracts.SearchModels; +using SportCompetitionsContracts.StoragesContracts; +using SportCompetitionsContracts.ViewModels; +using SportCompetitionsDatabaseImplement.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SportCompetitionsDatabaseImplement.Implements +{ + public class CompetitionStorage : ICompetitionStorage + { + public List GetFilteredList(CompetitionSearchModel model) + { + if (string.IsNullOrEmpty(model.CompetitionName)) + { + return new(); + } + using var context = new SportCompetitionsDatabase(); + return context.Competitions.Where(x => x.CompetitionName.Contains(model.CompetitionName)).Select(x => x.GetViewModel).ToList(); + } + + public List GetFullList() + { + using var context = new SportCompetitionsDatabase(); + return context.Competitions.Select(x => x.GetViewModel).ToList(); + } + + public CompetitionViewModel? Delete(CompetitionBindingModel model) + { + using var context = new SportCompetitionsDatabase(); + var element = context.Competitions.FirstOrDefault(x => x.Id == model.Id); + if (element != null) + { + context.Competitions.Remove(element); + context.SaveChanges(); + return element.GetViewModel; + } + return null; + } + + public CompetitionViewModel? GetElement(CompetitionSearchModel model) + { + using var context = new SportCompetitionsDatabase(); + return context.Competitions.FirstOrDefault(x => (!string.IsNullOrEmpty(model.CompetitionName)) && x.CompetitionName == model.CompetitionName || model.Id.HasValue && x.Id == model.Id)?.GetViewModel; + } + + public CompetitionViewModel? Insert(CompetitionBindingModel model) + { + var newCompetition = Competition.Create(model); + if (newCompetition == null) + { + return null; + } + using var context = new SportCompetitionsDatabase(); + context.Competitions.Add(newCompetition); + context.SaveChanges(); + return newCompetition.GetViewModel; + } + + public CompetitionViewModel? Update(CompetitionBindingModel model) + { + using var context = new SportCompetitionsDatabase(); + var component = context.Competitions.FirstOrDefault(x => x.Id == model.Id); + if (component == null) + { + return null; + } + component.Update(model); + context.SaveChanges(); + return component.GetViewModel; + } + } +} diff --git a/SportCompetitionsDatabaseImplement/Implements/MemberStorage.cs b/SportCompetitionsDatabaseImplement/Implements/MemberStorage.cs new file mode 100644 index 0000000..d41aec7 --- /dev/null +++ b/SportCompetitionsDatabaseImplement/Implements/MemberStorage.cs @@ -0,0 +1,77 @@ +using SportCompetitionsContracts.BindingModels; +using SportCompetitionsContracts.SearchModels; +using SportCompetitionsContracts.StoragesContracts; +using SportCompetitionsContracts.ViewModels; +using SportCompetitionsDatabaseImplement.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SportCompetitionsDatabaseImplement.Implements +{ + public class MemberStorage : IMemberStorage + { + public List GetFilteredList(MemberSearchModel model) + { + if (string.IsNullOrEmpty(model.MemberFCs)) + { + return new(); + } + using var context = new SportCompetitionsDatabase(); + return context.Members.Where(x => x.MemberFCs.Contains(model.MemberFCs)).Select(x => x.GetViewModel).ToList(); + } + + public List GetFullList() + { + using var context = new SportCompetitionsDatabase(); + return context.Members.Select(x => x.GetViewModel).ToList(); + } + + public MemberViewModel? Delete(MemberBindingModel model) + { + using var context = new SportCompetitionsDatabase(); + var element = context.Members.FirstOrDefault(x => x.Id == model.Id); + if (element != null) + { + context.Members.Remove(element); + context.SaveChanges(); + return element.GetViewModel; + } + return null; + } + + public MemberViewModel? GetElement(MemberSearchModel model) + { + using var context = new SportCompetitionsDatabase(); + return context.Members.FirstOrDefault(x => (!string.IsNullOrEmpty(model.MemberFCs)) && x.MemberFCs == model.MemberFCs || model.Id.HasValue && x.Id == model.Id)?.GetViewModel; + } + + public MemberViewModel? Insert(MemberBindingModel model) + { + var newMember = Member.Create(model); + if (newMember == null) + { + return null; + } + using var context = new SportCompetitionsDatabase(); + context.Members.Add(newMember); + context.SaveChanges(); + return newMember.GetViewModel; + } + + public MemberViewModel? Update(MemberBindingModel model) + { + using var context = new SportCompetitionsDatabase(); + var component = context.Members.FirstOrDefault(x => x.Id == model.Id); + if (component == null) + { + return null; + } + component.Update(model); + context.SaveChanges(); + return component.GetViewModel; + } + } +} diff --git a/SportCompetitionsDatabaseImplement/Implements/RecordStorage.cs b/SportCompetitionsDatabaseImplement/Implements/RecordStorage.cs new file mode 100644 index 0000000..e1824cb --- /dev/null +++ b/SportCompetitionsDatabaseImplement/Implements/RecordStorage.cs @@ -0,0 +1,77 @@ +using SportCompetitionsContracts.BindingModels; +using SportCompetitionsContracts.SearchModels; +using SportCompetitionsContracts.StoragesContracts; +using SportCompetitionsContracts.ViewModels; +using SportCompetitionsDatabaseImplement.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SportCompetitionsDatabaseImplement.Implements +{ + public class RecordStorage : IRecordStorage + { + public RecordViewModel? Delete(RecordBindingModel model) + { + using var context = new SportCompetitionsDatabase(); + var element = context.Records.FirstOrDefault(x => x.Id == model.Id); + if (element != null) + { + context.Records.Remove(element); + context.SaveChanges(); + return element.GetViewModel; + } + return null; + } + + public RecordViewModel? GetElement(RecordSearchModel model) + { + using var context = new SportCompetitionsDatabase(); + return context.Records.FirstOrDefault(x => (!string.IsNullOrEmpty(model.RecordName.ToString())) && x.RecordName.ToString() == model.RecordName.ToString() || model.Id.HasValue && x.Id == model.Id)?.GetViewModel; + } + + public List GetFilteredList(RecordSearchModel model) + { + if (string.IsNullOrEmpty(model.RecordName.ToString())) + { + return new(); + } + using var context = new SportCompetitionsDatabase(); + return context.Records.Where(x => x.RecordName.ToString().Contains(model.RecordName.ToString())).Select(x => x.GetViewModel).ToList(); + } + + public List GetFullList() + { + using var context = new SportCompetitionsDatabase(); + return context.Records.Select(x => x.GetViewModel).ToList(); + } + + public RecordViewModel? Insert(RecordBindingModel model) + { + var newRecord = Record.Create(model); + if (newRecord == null) + { + return null; + } + using var context = new SportCompetitionsDatabase(); + context.Records.Add(newRecord); + context.SaveChanges(); + return newRecord.GetViewModel; + } + + public RecordViewModel? Update(RecordBindingModel model) + { + using var context = new SportCompetitionsDatabase(); + var component = context.Records.FirstOrDefault(x => x.Id == model.Id); + if (component == null) + { + return null; + } + component.Update(model); + context.SaveChanges(); + return component.GetViewModel; + } + } +} diff --git a/SportCompetitionsDatabaseImplement/Implements/ResultStorage.cs b/SportCompetitionsDatabaseImplement/Implements/ResultStorage.cs new file mode 100644 index 0000000..092c5e7 --- /dev/null +++ b/SportCompetitionsDatabaseImplement/Implements/ResultStorage.cs @@ -0,0 +1,77 @@ +using SportCompetitionsContracts.BindingModels; +using SportCompetitionsContracts.SearchModels; +using SportCompetitionsContracts.StoragesContracts; +using SportCompetitionsContracts.ViewModels; +using SportCompetitionsDatabaseImplement.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SportCompetitionsDatabaseImplement.Implements +{ + public class ResultStorage : IResultStorage + { + public ResultViewModel? Delete(ResultBindingModel model) + { + using var context = new SportCompetitionsDatabase(); + var element = context.Results.FirstOrDefault(x => x.Id == model.Id); + if (element != null) + { + context.Results.Remove(element); + context.SaveChanges(); + return element.GetViewModel; + } + return null; + } + + public ResultViewModel? GetElement(ResultSearchModel model) + { + using var context = new SportCompetitionsDatabase(); + return context.Results.FirstOrDefault(x => (!string.IsNullOrEmpty(model.ResultName)) && x.ResultName == model.ResultName || model.Id.HasValue && x.Id == model.Id)?.GetViewModel; + } + + public List GetFilteredList(ResultSearchModel model) + { + if (string.IsNullOrEmpty(model.ResultName)) + { + return new(); + } + using var context = new SportCompetitionsDatabase(); + return context.Results.Where(x => x.ResultName.Contains(model.ResultName)).Select(x => x.GetViewModel).ToList(); + } + + public List GetFullList() + { + using var context = new SportCompetitionsDatabase(); + return context.Results.Select(x => x.GetViewModel).ToList(); + } + + public ResultViewModel? Insert(ResultBindingModel model) + { + var newResult = Result.Create(model); + if (newResult == null) + { + return null; + } + using var context = new SportCompetitionsDatabase(); + context.Results.Add(newResult); + context.SaveChanges(); + return newResult.GetViewModel; + } + + public ResultViewModel? Update(ResultBindingModel model) + { + using var context = new SportCompetitionsDatabase(); + var component = context.Results.FirstOrDefault(x => x.Id == model.Id); + if (component == null) + { + return null; + } + component.Update(model); + context.SaveChanges(); + return component.GetViewModel; + } + } +} diff --git a/SportCompetitionsDatabaseImplement/Implements/TeamStorage.cs b/SportCompetitionsDatabaseImplement/Implements/TeamStorage.cs new file mode 100644 index 0000000..d51693e --- /dev/null +++ b/SportCompetitionsDatabaseImplement/Implements/TeamStorage.cs @@ -0,0 +1,77 @@ +using SportCompetitionsContracts.BindingModels; +using SportCompetitionsContracts.SearchModels; +using SportCompetitionsContracts.StoragesContracts; +using SportCompetitionsContracts.ViewModels; +using SportCompetitionsDatabaseImplement.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SportCompetitionsDatabaseImplement.Implements +{ + public class TeamStorage : ITeamStorage + { + public List GetFilteredList(TeamSearchModel model) + { + if (string.IsNullOrEmpty(model.TeamName)) + { + return new(); + } + using var context = new SportCompetitionsDatabase(); + return context.Teams.Where(x => x.TeamName.Contains(model.TeamName)).Select(x => x.GetViewModel).ToList(); + } + + public List GetFullList() + { + using var context = new SportCompetitionsDatabase(); + return context.Teams.Select(x => x.GetViewModel).ToList(); + } + + public TeamViewModel? Delete(TeamBindingModel model) + { + using var context = new SportCompetitionsDatabase(); + var element = context.Teams.FirstOrDefault(x => x.Id == model.Id); + if (element != null) + { + context.Teams.Remove(element); + context.SaveChanges(); + return element.GetViewModel; + } + return null; + } + + public TeamViewModel? GetElement(TeamSearchModel model) + { + using var context = new SportCompetitionsDatabase(); + return context.Teams.FirstOrDefault(x => (!string.IsNullOrEmpty(model.TeamName)) && x.TeamName == model.TeamName || model.Id.HasValue && x.Id == model.Id)?.GetViewModel; + } + + public TeamViewModel? Insert(TeamBindingModel model) + { + var newTeam = Team.Create(model); + if (newTeam == null) + { + return null; + } + using var context = new SportCompetitionsDatabase(); + context.Teams.Add(newTeam); + context.SaveChanges(); + return newTeam.GetViewModel; + } + + public TeamViewModel? Update(TeamBindingModel model) + { + using var context = new SportCompetitionsDatabase(); + var component = context.Teams.FirstOrDefault(x => x.Id == model.Id); + if (component == null) + { + return null; + } + component.Update(model); + context.SaveChanges(); + return component.GetViewModel; + } + } +} diff --git a/SportCompetitionsDatabaseImplement/Models/Result.cs b/SportCompetitionsDatabaseImplement/Models/Result.cs index c1191ac..d85ea8f 100644 --- a/SportCompetitionsDatabaseImplement/Models/Result.cs +++ b/SportCompetitionsDatabaseImplement/Models/Result.cs @@ -14,6 +14,8 @@ namespace SportCompetitionsDatabaseImplement.Models { public int Id { get; set; } [Required] + public string? ResultName { get; set; } + [Required] public int CompetitionId { get; set; } [Required] public int TeamId { get; set; } @@ -26,6 +28,7 @@ namespace SportCompetitionsDatabaseImplement.Models return new Result() { Id = model.Id, + ResultName = model.ResultName, CompetitionId = model.CompetitionId, TeamId = model.TeamId, ResultPosition = model.ResultPosition, @@ -35,6 +38,7 @@ namespace SportCompetitionsDatabaseImplement.Models public void Update(ResultBindingModel model) { if (model == null) return; + ResultName = model.ResultName; CompetitionId = model.CompetitionId; TeamId = model.TeamId; ResultPosition = model.ResultPosition; @@ -43,6 +47,7 @@ namespace SportCompetitionsDatabaseImplement.Models public ResultViewModel GetViewModel => new() { Id = Id, + ResultName = ResultName, CompetitionId = CompetitionId, TeamId = TeamId, ResultPosition = ResultPosition diff --git a/SportCompetitionsDatabaseImplement/obj/Debug/net7.0/SportCompetitionsDatabaseImplement.csproj.AssemblyReference.cache b/SportCompetitionsDatabaseImplement/obj/Debug/net7.0/SportCompetitionsDatabaseImplement.csproj.AssemblyReference.cache index 5aa082c..46822d4 100644 Binary files a/SportCompetitionsDatabaseImplement/obj/Debug/net7.0/SportCompetitionsDatabaseImplement.csproj.AssemblyReference.cache and b/SportCompetitionsDatabaseImplement/obj/Debug/net7.0/SportCompetitionsDatabaseImplement.csproj.AssemblyReference.cache differ diff --git a/SportCompetitionsView/obj/Debug/net7.0-windows/SportCompetitionsView.csproj.AssemblyReference.cache b/SportCompetitionsView/obj/Debug/net7.0-windows/SportCompetitionsView.csproj.AssemblyReference.cache index d9f1d6b..e237cae 100644 Binary files a/SportCompetitionsView/obj/Debug/net7.0-windows/SportCompetitionsView.csproj.AssemblyReference.cache and b/SportCompetitionsView/obj/Debug/net7.0-windows/SportCompetitionsView.csproj.AssemblyReference.cache differ