Слои логики, котрактов и хранения
This commit is contained in:
parent
ea707ec754
commit
21b0c10895
18
COP/COP.sln
18
COP/COP.sln
@ -7,6 +7,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WinForms", "WinForms\WinFor
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VisualCompLib", "VisualCompLib\VisualCompLib.csproj", "{FC1CFC63-5739-4519-B689-E8B614A9D106}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClientsContracts", "ClientsContracts\ClientsContracts.csproj", "{849DCBC2-7B2D-43A5-87BD-CFE9BC4F0B6C}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClientBusinessLogic", "ClientBusinessLogic\ClientBusinessLogic.csproj", "{6A4A31E6-F956-4312-B63D-807ABF5CD63E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClientsDatabaseImplement", "ClientsDatabaseImplement\ClientsDatabaseImplement.csproj", "{662252C6-5C66-43CD-8D94-5360E2761EB6}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@ -21,6 +27,18 @@ Global
|
||||
{FC1CFC63-5739-4519-B689-E8B614A9D106}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FC1CFC63-5739-4519-B689-E8B614A9D106}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{FC1CFC63-5739-4519-B689-E8B614A9D106}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{849DCBC2-7B2D-43A5-87BD-CFE9BC4F0B6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{849DCBC2-7B2D-43A5-87BD-CFE9BC4F0B6C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{849DCBC2-7B2D-43A5-87BD-CFE9BC4F0B6C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{849DCBC2-7B2D-43A5-87BD-CFE9BC4F0B6C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6A4A31E6-F956-4312-B63D-807ABF5CD63E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6A4A31E6-F956-4312-B63D-807ABF5CD63E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6A4A31E6-F956-4312-B63D-807ABF5CD63E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6A4A31E6-F956-4312-B63D-807ABF5CD63E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{662252C6-5C66-43CD-8D94-5360E2761EB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{662252C6-5C66-43CD-8D94-5360E2761EB6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{662252C6-5C66-43CD-8D94-5360E2761EB6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{662252C6-5C66-43CD-8D94-5360E2761EB6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
62
COP/ClientBusinessLogic/BusinessLogics/ClientLogic.cs
Normal file
62
COP/ClientBusinessLogic/BusinessLogics/ClientLogic.cs
Normal file
@ -0,0 +1,62 @@
|
||||
using ClientsContracts.BindingModels;
|
||||
using ClientsContracts.BusinessLogicContracts;
|
||||
using ClientsContracts.StorageContracts;
|
||||
using ClientsContracts.ViewModels;
|
||||
|
||||
namespace ClientBusinessLogic.BusinessLogics
|
||||
{
|
||||
public class ClientLogic : IClientLogic
|
||||
{
|
||||
private readonly IClientStorage _clientStorage;
|
||||
public ClientLogic(IClientStorage clientStorage)
|
||||
{
|
||||
_clientStorage = clientStorage;
|
||||
}
|
||||
public void CreateOrUpdate(ClientBindingModel model)
|
||||
{
|
||||
var element = _clientStorage.GetElement(
|
||||
new ClientBindingModel
|
||||
{
|
||||
Reviews = model.Reviews,
|
||||
Name = model.Name,
|
||||
Status = model.Status,
|
||||
Amount = model.Amount
|
||||
});
|
||||
if (element != null && element.Id != model.Id)
|
||||
{
|
||||
throw new Exception("Клиент с таким именем уже существует");
|
||||
}
|
||||
if (model.Id.HasValue)
|
||||
{
|
||||
_clientStorage.Update(model);
|
||||
}
|
||||
else
|
||||
{
|
||||
_clientStorage.Insert(model);
|
||||
}
|
||||
}
|
||||
|
||||
public void Delete(ClientBindingModel model)
|
||||
{
|
||||
var element = _clientStorage.GetElement(new ClientBindingModel { Id = model.Id });
|
||||
if (element == null)
|
||||
{
|
||||
throw new Exception("Клиент не найден");
|
||||
}
|
||||
_clientStorage.Delete(model);
|
||||
}
|
||||
|
||||
public List<ClientViewModel> Read(ClientBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return _clientStorage.GetFullList();
|
||||
}
|
||||
if (model.Id.HasValue)
|
||||
{
|
||||
return new List<ClientViewModel> { _clientStorage.GetElement(model) };
|
||||
}
|
||||
return _clientStorage.GetFilteredList(model);
|
||||
}
|
||||
}
|
||||
}
|
60
COP/ClientBusinessLogic/BusinessLogics/StatusLogic.cs
Normal file
60
COP/ClientBusinessLogic/BusinessLogics/StatusLogic.cs
Normal file
@ -0,0 +1,60 @@
|
||||
using ClientsContracts.BindingModels;
|
||||
using ClientsContracts.BusinessLogicContracts;
|
||||
using ClientsContracts.StorageContracts;
|
||||
using ClientsContracts.ViewModels;
|
||||
|
||||
namespace ClientBusinessLogic.BusinessLogics
|
||||
{
|
||||
public class StatusLogic : IStatusLogic
|
||||
{
|
||||
private readonly IStatusStorage _statusStorage;
|
||||
public StatusLogic(IStatusStorage statusStorage)
|
||||
{
|
||||
_statusStorage = statusStorage;
|
||||
}
|
||||
|
||||
public void CreateOrUpdate(StatusBindingModel model)
|
||||
{
|
||||
var element = _statusStorage.GetElement(
|
||||
new StatusBindingModel
|
||||
{
|
||||
Name = model.Name
|
||||
});
|
||||
if (element != null && element.Id != model.Id)
|
||||
{
|
||||
throw new Exception("Такой статус уже существует");
|
||||
}
|
||||
if (model.Id.HasValue)
|
||||
{
|
||||
_statusStorage.Update(model);
|
||||
}
|
||||
else
|
||||
{
|
||||
_statusStorage.Insert(model);
|
||||
}
|
||||
}
|
||||
|
||||
public void Delete(StatusBindingModel model)
|
||||
{
|
||||
var element = _statusStorage.GetElement(new StatusBindingModel { Id = model.Id });
|
||||
if (element == null)
|
||||
{
|
||||
throw new Exception("Статус не найден");
|
||||
}
|
||||
_statusStorage.Delete(model);
|
||||
}
|
||||
|
||||
public List<StatusViewModel> Read(StatusBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return _statusStorage.GetFullList();
|
||||
}
|
||||
if (model.Id.HasValue)
|
||||
{
|
||||
return new List<StatusViewModel> { _statusStorage.GetElement(model) };
|
||||
}
|
||||
return _statusStorage.GetFilteredList(model);
|
||||
}
|
||||
}
|
||||
}
|
14
COP/ClientBusinessLogic/ClientBusinessLogic.csproj
Normal file
14
COP/ClientBusinessLogic/ClientBusinessLogic.csproj
Normal file
@ -0,0 +1,14 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0-windows</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ClientsContracts\ClientsContracts.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
15
COP/ClientsContracts/BindingModels/ClientBindingModel.cs
Normal file
15
COP/ClientsContracts/BindingModels/ClientBindingModel.cs
Normal file
@ -0,0 +1,15 @@
|
||||
namespace ClientsContracts.BindingModels
|
||||
{
|
||||
public class ClientBindingModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
|
||||
public string Name { get; set; }
|
||||
|
||||
public string Reviews { get; set; }
|
||||
|
||||
public string Status { get; set; }
|
||||
|
||||
public int? Amount { get; set; }
|
||||
}
|
||||
}
|
9
COP/ClientsContracts/BindingModels/StatusBindingModel.cs
Normal file
9
COP/ClientsContracts/BindingModels/StatusBindingModel.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace ClientsContracts.BindingModels
|
||||
{
|
||||
public class StatusBindingModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
12
COP/ClientsContracts/BusinessLogicContracts/IClientLogic.cs
Normal file
12
COP/ClientsContracts/BusinessLogicContracts/IClientLogic.cs
Normal file
@ -0,0 +1,12 @@
|
||||
using ClientsContracts.BindingModels;
|
||||
using ClientsContracts.ViewModels;
|
||||
|
||||
namespace ClientsContracts.BusinessLogicContracts
|
||||
{
|
||||
public interface IClientLogic
|
||||
{
|
||||
List<ClientViewModel> Read(ClientBindingModel model);
|
||||
void CreateOrUpdate(ClientBindingModel model);
|
||||
void Delete(ClientBindingModel model);
|
||||
}
|
||||
}
|
12
COP/ClientsContracts/BusinessLogicContracts/IStatusLogic.cs
Normal file
12
COP/ClientsContracts/BusinessLogicContracts/IStatusLogic.cs
Normal file
@ -0,0 +1,12 @@
|
||||
using ClientsContracts.BindingModels;
|
||||
using ClientsContracts.ViewModels;
|
||||
|
||||
namespace ClientsContracts.BusinessLogicContracts
|
||||
{
|
||||
public interface IStatusLogic
|
||||
{
|
||||
List<StatusViewModel> Read(StatusBindingModel model);
|
||||
void CreateOrUpdate(StatusBindingModel model);
|
||||
void Delete(StatusBindingModel model);
|
||||
}
|
||||
}
|
10
COP/ClientsContracts/ClientsContracts.csproj
Normal file
10
COP/ClientsContracts/ClientsContracts.csproj
Normal file
@ -0,0 +1,10 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0-windows</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
16
COP/ClientsContracts/StorageContracts/IClientStorage.cs
Normal file
16
COP/ClientsContracts/StorageContracts/IClientStorage.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using ClientsContracts.BindingModels;
|
||||
using ClientsContracts.ViewModels;
|
||||
|
||||
namespace ClientsContracts.StorageContracts
|
||||
{
|
||||
public interface IClientStorage
|
||||
{
|
||||
List<ClientViewModel> GetFullList();
|
||||
List<ClientViewModel> GetFilteredList(ClientBindingModel model);
|
||||
ClientViewModel GetElement(ClientBindingModel model);
|
||||
|
||||
void Insert(ClientBindingModel model);
|
||||
void Update(ClientBindingModel model);
|
||||
void Delete(ClientBindingModel model);
|
||||
}
|
||||
}
|
16
COP/ClientsContracts/StorageContracts/IStatusStorage.cs
Normal file
16
COP/ClientsContracts/StorageContracts/IStatusStorage.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using ClientsContracts.BindingModels;
|
||||
using ClientsContracts.ViewModels;
|
||||
|
||||
namespace ClientsContracts.StorageContracts
|
||||
{
|
||||
public interface IStatusStorage
|
||||
{
|
||||
List<StatusViewModel> GetFullList();
|
||||
List<StatusViewModel> GetFilteredList(StatusBindingModel model);
|
||||
StatusViewModel GetElement(StatusBindingModel model);
|
||||
|
||||
void Insert(StatusBindingModel model);
|
||||
void Update(StatusBindingModel model);
|
||||
void Delete(StatusBindingModel model);
|
||||
}
|
||||
}
|
19
COP/ClientsContracts/ViewModels/ClientViewModel.cs
Normal file
19
COP/ClientsContracts/ViewModels/ClientViewModel.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace ClientsContracts.ViewModels
|
||||
{
|
||||
public class ClientViewModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
|
||||
[DisplayName("ФИО")]
|
||||
public string Name { get; set; }
|
||||
|
||||
[DisplayName("Отзывы")]
|
||||
public string Reviews { get; set; }
|
||||
[DisplayName("Статус")]
|
||||
public string Status { get; set; }
|
||||
[DisplayName("Сумма покупок")]
|
||||
public int? Amount { get; set; }
|
||||
}
|
||||
}
|
9
COP/ClientsContracts/ViewModels/StatusViewModel.cs
Normal file
9
COP/ClientsContracts/ViewModels/StatusViewModel.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace ClientsContracts.ViewModels
|
||||
{
|
||||
public class StatusViewModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
19
COP/ClientsDatabaseImplement/ClientsDatabase.cs
Normal file
19
COP/ClientsDatabaseImplement/ClientsDatabase.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using ClientsDatabaseImplement.Models;
|
||||
|
||||
namespace ClientsDatabaseImplement
|
||||
{
|
||||
public class ClientsDatabase : DbContext
|
||||
{
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||
{
|
||||
if (optionsBuilder.IsConfigured == false)
|
||||
{
|
||||
optionsBuilder.UseNpgsql(@"Host=localhost;Port=5432;Database=ClientsDatabase;Username=postgres;Password=186qazwsx");
|
||||
}
|
||||
base.OnConfiguring(optionsBuilder);
|
||||
}
|
||||
public virtual DbSet<Client> Clients { set; get; }
|
||||
public virtual DbSet<Status> Statuses { set; get; }
|
||||
}
|
||||
}
|
23
COP/ClientsDatabaseImplement/ClientsDatabaseImplement.csproj
Normal file
23
COP/ClientsDatabaseImplement/ClientsDatabaseImplement.csproj
Normal file
@ -0,0 +1,23 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0-windows</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.11" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.11">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.11" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\ClientsContracts\ClientsContracts.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
120
COP/ClientsDatabaseImplement/Implements/ClientStorage.cs
Normal file
120
COP/ClientsDatabaseImplement/Implements/ClientStorage.cs
Normal file
@ -0,0 +1,120 @@
|
||||
using ClientsContracts.StorageContracts;
|
||||
using ClientsContracts.BindingModels;
|
||||
using ClientsContracts.ViewModels;
|
||||
using ClientsDatabaseImplement.Models;
|
||||
|
||||
namespace ClientsDatabaseImplement.Implements
|
||||
{
|
||||
public class ClientStorage : IClientStorage
|
||||
{
|
||||
public void Delete(ClientBindingModel model)
|
||||
{
|
||||
var context = new ClientsDatabase();
|
||||
var client = context.Clients.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (client != null)
|
||||
{
|
||||
context.Clients.Remove(client);
|
||||
context.SaveChanges();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Клиент не найден");
|
||||
}
|
||||
}
|
||||
|
||||
public ClientViewModel GetElement(ClientBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new ClientsDatabase();
|
||||
var client = context.Clients
|
||||
.ToList()
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
return client != null ? CreateModel(client) : null;
|
||||
}
|
||||
|
||||
public List<ClientViewModel> GetFilteredList(ClientBindingModel model)
|
||||
{
|
||||
var context = new ClientsDatabase();
|
||||
return context.Clients
|
||||
.Where(client => client.Name.Contains(model.Name) && client.Status.Contains(model.Status))
|
||||
.ToList()
|
||||
.Select(CreateModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<ClientViewModel> GetFullList()
|
||||
{
|
||||
using (var context = new ClientsDatabase())
|
||||
{
|
||||
return context.Clients
|
||||
.ToList()
|
||||
.Select(CreateModel)
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public void Insert(ClientBindingModel model)
|
||||
{
|
||||
var context = new ClientsDatabase();
|
||||
var transaction = context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
context.Clients.Add(CreateModel(model, new Client()));
|
||||
context.SaveChanges();
|
||||
transaction.Commit();
|
||||
}
|
||||
catch
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public void Update(ClientBindingModel model)
|
||||
{
|
||||
var context = new ClientsDatabase();
|
||||
var transaction = context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
var client = context.Clients.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (client == null)
|
||||
{
|
||||
throw new Exception("Клиент не найден");
|
||||
}
|
||||
CreateModel(model, client);
|
||||
context.SaveChanges();
|
||||
transaction.Commit();
|
||||
}
|
||||
catch
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
private static Client CreateModel(ClientBindingModel model, Client client)
|
||||
{
|
||||
client.Amount = model.Amount;
|
||||
client.Name = model.Name;
|
||||
client.Status = model.Status;
|
||||
client.Reviews = model.Reviews;
|
||||
|
||||
return client;
|
||||
}
|
||||
|
||||
private ClientViewModel CreateModel(Client client)
|
||||
{
|
||||
return new ClientViewModel
|
||||
{
|
||||
Id = client.Id,
|
||||
Amount = client.Amount,
|
||||
Name = client.Name,
|
||||
Status = client.Status,
|
||||
Reviews = client.Reviews
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
115
COP/ClientsDatabaseImplement/Implements/StatusStorage.cs
Normal file
115
COP/ClientsDatabaseImplement/Implements/StatusStorage.cs
Normal file
@ -0,0 +1,115 @@
|
||||
using ClientsContracts.StorageContracts;
|
||||
using ClientsContracts.BindingModels;
|
||||
using ClientsContracts.ViewModels;
|
||||
using ClientsDatabaseImplement.Models;
|
||||
|
||||
namespace ClientsDatabaseImplement.Implements
|
||||
{
|
||||
public class StatusStorage : IStatusStorage
|
||||
{
|
||||
public void Delete(StatusBindingModel model)
|
||||
{
|
||||
var context = new ClientsDatabase();
|
||||
var status = context.Statuses.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (status != null)
|
||||
{
|
||||
context.Statuses.Remove(status);
|
||||
context.SaveChanges();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Статус не найден");
|
||||
}
|
||||
}
|
||||
|
||||
public StatusViewModel GetElement(StatusBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new ClientsDatabase();
|
||||
|
||||
var status = context.Statuses
|
||||
.ToList()
|
||||
.FirstOrDefault(rec => rec.Id == model.Id || rec.Name == model.Name);
|
||||
return status != null ? CreateModel(status) : null;
|
||||
}
|
||||
|
||||
|
||||
public List<StatusViewModel> GetFilteredList(StatusBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new ClientsDatabase();
|
||||
return context.Statuses
|
||||
.Where(rec => rec.Name.Contains(model.Name))
|
||||
.Select(CreateModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<StatusViewModel> GetFullList()
|
||||
{
|
||||
using var context = new ClientsDatabase();
|
||||
return context.Statuses
|
||||
.Select(CreateModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public void Insert(StatusBindingModel model)
|
||||
{
|
||||
var context = new ClientsDatabase();
|
||||
var transaction = context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
context.Statuses.Add(CreateModel(model, new Status()));
|
||||
context.SaveChanges();
|
||||
transaction.Commit();
|
||||
}
|
||||
catch
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public void Update(StatusBindingModel model)
|
||||
{
|
||||
var context = new ClientsDatabase();
|
||||
var transaction = context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
var status = context.Statuses.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (status == null)
|
||||
{
|
||||
throw new Exception("Статус не найден");
|
||||
}
|
||||
CreateModel(model, status);
|
||||
context.SaveChanges();
|
||||
transaction.Commit();
|
||||
}
|
||||
catch
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
private static Status CreateModel(StatusBindingModel model, Status status)
|
||||
{
|
||||
status.Name = model.Name;
|
||||
return status;
|
||||
}
|
||||
|
||||
private static StatusViewModel CreateModel(Status status)
|
||||
{
|
||||
return new StatusViewModel
|
||||
{
|
||||
Id = status.Id,
|
||||
Name = status.Name
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
75
COP/ClientsDatabaseImplement/Migrations/20231024184241_InitMigration.Designer.cs
generated
Normal file
75
COP/ClientsDatabaseImplement/Migrations/20231024184241_InitMigration.Designer.cs
generated
Normal file
@ -0,0 +1,75 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using ClientsDatabaseImplement;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace ClientsDatabaseImplement.Migrations
|
||||
{
|
||||
[DbContext(typeof(ClientsDatabase))]
|
||||
[Migration("20231024184241_InitMigration")]
|
||||
partial class InitMigration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "7.0.11")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
||||
|
||||
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("ClientsDatabaseImplement.Models.Client", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("integer");
|
||||
|
||||
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<int?>("Amount")
|
||||
.HasColumnType("integer");
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasColumnType("text");
|
||||
|
||||
b.Property<string>("Reviews")
|
||||
.IsRequired()
|
||||
.HasColumnType("text");
|
||||
|
||||
b.Property<string>("Status")
|
||||
.IsRequired()
|
||||
.HasColumnType("text");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("Clients");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("ClientsDatabaseImplement.Models.Status", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("integer");
|
||||
|
||||
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasColumnType("text");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("Statuses");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace ClientsDatabaseImplement.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class InitMigration : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Clients",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(type: "integer", nullable: false)
|
||||
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||
Name = table.Column<string>(type: "text", nullable: false),
|
||||
Reviews = table.Column<string>(type: "text", nullable: false),
|
||||
Status = table.Column<string>(type: "text", nullable: false),
|
||||
Amount = table.Column<int>(type: "integer", nullable: true)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_Clients", x => x.Id);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "Statuses",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(type: "integer", nullable: false)
|
||||
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
||||
Name = table.Column<string>(type: "text", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_Statuses", x => x.Id);
|
||||
});
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "Clients");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "Statuses");
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using ClientsDatabaseImplement;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace ClientsDatabaseImplement.Migrations
|
||||
{
|
||||
[DbContext(typeof(ClientsDatabase))]
|
||||
partial class ClientsDatabaseModelSnapshot : ModelSnapshot
|
||||
{
|
||||
protected override void BuildModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "7.0.11")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
||||
|
||||
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("ClientsDatabaseImplement.Models.Client", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("integer");
|
||||
|
||||
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<int?>("Amount")
|
||||
.HasColumnType("integer");
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasColumnType("text");
|
||||
|
||||
b.Property<string>("Reviews")
|
||||
.IsRequired()
|
||||
.HasColumnType("text");
|
||||
|
||||
b.Property<string>("Status")
|
||||
.IsRequired()
|
||||
.HasColumnType("text");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("Clients");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("ClientsDatabaseImplement.Models.Status", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("integer");
|
||||
|
||||
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<string>("Name")
|
||||
.IsRequired()
|
||||
.HasColumnType("text");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("Statuses");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
19
COP/ClientsDatabaseImplement/Models/Client.cs
Normal file
19
COP/ClientsDatabaseImplement/Models/Client.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace ClientsDatabaseImplement.Models
|
||||
{
|
||||
public class Client
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public string Name { get; set; }
|
||||
|
||||
[Required]
|
||||
public string Reviews { get; set; }
|
||||
[Required]
|
||||
public string Status { get; set; }
|
||||
|
||||
public int? Amount { get; set; }
|
||||
}
|
||||
}
|
12
COP/ClientsDatabaseImplement/Models/Status.cs
Normal file
12
COP/ClientsDatabaseImplement/Models/Status.cs
Normal file
@ -0,0 +1,12 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace ClientsDatabaseImplement.Models
|
||||
{
|
||||
public class Status
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
@ -5,6 +5,7 @@
|
||||
<Nullable>enable</Nullable>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -9,11 +9,19 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Aspose.Words" Version="23.10.0" />
|
||||
<PackageReference Include="ComponentsLibraryNet60" Version="1.0.0" />
|
||||
<PackageReference Include="ControlsLibraryNet60" Version="1.0.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.11">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="UnvisableComponents" Version="1.0.0" />
|
||||
<PackageReference Include="VisableComponents" Version="1.0.0" />
|
||||
<PackageReference Include="VisualCompLib" Version="1.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\VisualCompLib\VisualCompLib.csproj" />
|
||||
<ProjectReference Include="..\ClientsDatabaseImplement\ClientsDatabaseImplement.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
Loading…
Reference in New Issue
Block a user