I don't want anyone, know me or not

See me at my lowest, you don't have to drop
(still gotta work to do. need to find some components for a use and then place it on my forms.)
This commit is contained in:
Никита Волков 2024-10-16 19:32:47 +04:00
parent 3ba5fd8046
commit 0bf36059e1
39 changed files with 1652 additions and 1 deletions

View File

@ -0,0 +1,7 @@
namespace InternetShopOrdersDataModels
{
public interface IId
{
int Id { get; }
}
}

View File

@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace InternetShopOrdersDataModels.Models
{
public interface IOrderModel : IId
{
string Fullname { get; }
public string OrderImage { get; }
public int SelectedItemId { get; }
string Email { get; }
}
}

View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace InternetShopOrdersDataModels.Models
{
public interface ISelectedItemModel : IId
{
string Name { get; }
}
}

View File

@ -0,0 +1,39 @@
namespace InternetShopOrdersApp
{
partial class FormMain
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Text = "FormMain";
}
#endregion
}
}

View File

@ -0,0 +1,42 @@
using InternetShopOrdersBusinessLogic.BusinessLogics;
using InternetShopOrdersContracts.BusinessLogicContracts;
using InternetShopOrdersContracts.ViewModels;
using InternetShopOrdersContracts.BindingModels;
using InternetShopOrdersContracts.SearchModels;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace InternetShopOrdersApp
{
public partial class FormMain : Form
{
private int? _id;
private readonly IOrderLogic _logic;
private readonly ISelectedItemLogic _selectedItemLogic;
private List<SelectedItemViewModel> _selectedItems;
private string? orderImage = null;
public int Id { set { Id = value; } }
public FormMain(IOrderLogic logic, ISelectedItemLogic selectedItemLogic)
{
InitializeComponent();
_logic = logic;
_selectedItemLogic = selectedItemLogic;
_selectedItems = new List<SelectedItemViewModel>();
}
private void FormOrder_Load(object sender, EventArgs e)
{
_selectedItems = _selectedItemLogic.ReadList(null);
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,39 @@
namespace InternetShopOrdersApp
{
partial class FormOrder
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Text = "FormOrder";
}
#endregion
}
}

View File

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace InternetShopOrdersApp
{
public partial class FormOrder : Form
{
public FormOrder()
{
InitializeComponent();
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,39 @@
namespace InternetShopOrdersApp
{
partial class FormSelectedItems
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Text = "FormSelectedItems";
}
#endregion
}
}

View File

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace InternetShopOrdersApp
{
public partial class FormSelectedItems : Form
{
public FormSelectedItems()
{
InitializeComponent();
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,25 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
<OutputType>WinExe</OutputType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.10">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\InternetShopOrdersBusinessLogic\InternetShopOrdersBusinessLogic.csproj" />
<ProjectReference Include="..\InternetShopOrdersContracts\InternetShopOrdersContracts.csproj" />
<ProjectReference Include="..\InternetShopOrdersDatabaseImplement\InternetShopOrdersDatabaseImplement.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,41 @@
using InternetShopOrdersBusinessLogic.BusinessLogics;
using InternetShopOrdersContracts.BusinessLogicContracts;
using InternetShopOrdersContracts.StorageContracts;
using InternetShopOrdersDatabaseImplement.Implements;
using Microsoft.Extensions.DependencyInjection;
using System;
namespace InternetShopOrdersApp
{
internal static class Program
{
private static ServiceProvider? _serviceProvider;
public static ServiceProvider? ServiceProvider => _serviceProvider;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
var services = new ServiceCollection();
ConfigureServices(services);
_serviceProvider = services.BuildServiceProvider();
Application.Run(_serviceProvider.GetRequiredService<FormMain>());
}
private static void ConfigureServices(ServiceCollection services)
{
services.AddTransient<ISelectedItemStorage, SelectedItemStorage>();
services.AddTransient<IOrderStorage, OrderStorage>();
services.AddTransient<ISelectedItemLogic, SelectedItemLogic>();
services.AddTransient<IOrderLogic, OrderLogic>();
services.AddTransient<FormMain>();
services.AddTransient<FormOrder>();
services.AddTransient<FormSelectedItems>();
}
}
}

View File

@ -0,0 +1,92 @@
using InternetShopOrdersContracts.BindingModels;
using InternetShopOrdersContracts.BusinessLogicContracts;
using InternetShopOrdersContracts.SearchModels;
using InternetShopOrdersContracts.StorageContracts;
using InternetShopOrdersContracts.ViewModels;
namespace InternetShopOrdersBusinessLogic.BusinessLogics
{
public class OrderLogic : IOrderLogic
{
private readonly IOrderStorage _orderStorage;
public OrderLogic(IOrderStorage orderStorage)
{
_orderStorage = orderStorage;
}
public List<OrderViewModel>? ReadList(OrderSearchModel? model)
{
var list = model == null ? _orderStorage.GetFullList() : _orderStorage.GetFilteredList(model);
if (list == null)
{
return null;
}
return list;
}
public OrderViewModel? ReadElement(OrderSearchModel? model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
var element = _orderStorage.GetElement(model);
if (element == null)
{
return null;
}
return element;
}
public bool Create(OrderBindingModel model)
{
CheckModel(model);
if (_orderStorage.Insert(model) == null)
{
return false;
}
return true;
}
public bool Update(OrderBindingModel model)
{
CheckModel(model);
if (_orderStorage.Update(model) == null)
{
return false;
}
return true;
}
public bool Delete(OrderBindingModel model)
{
CheckModel(model, false);
if (_orderStorage.Delete(model) == null)
{
return false;
}
return true;
}
private void CheckModel(OrderBindingModel model, bool withParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
if (!withParams)
{
return;
}
if (string.IsNullOrEmpty(model.Fullname))
{
throw new ArgumentNullException("Нет ФИО заказчика", nameof(model.Fullname));
}
if (string.IsNullOrEmpty(model.Email))
{
throw new ArgumentNullException("Нет электронной почты заказчика", nameof(model.Email));
}
}
}
}

View File

@ -0,0 +1,87 @@
using InternetShopOrdersContracts.BindingModels;
using InternetShopOrdersContracts.BusinessLogicContracts;
using InternetShopOrdersContracts.SearchModels;
using InternetShopOrdersContracts.StorageContracts;
using InternetShopOrdersContracts.ViewModels;
namespace InternetShopOrdersBusinessLogic.BusinessLogics
{
public class SelectedItemLogic : ISelectedItemLogic
{
private readonly ISelectedItemStorage _selectedItemStorage;
public SelectedItemLogic(ISelectedItemStorage selectedItemStorage)
{
_selectedItemStorage = selectedItemStorage;
}
public List<SelectedItemViewModel>? ReadList(SelectedItemSearchModel? model)
{
var list = model == null ? _selectedItemStorage.GetFullList() : _selectedItemStorage.GetFilteredList(model);
if (list == null)
{
return null;
}
return list;
}
public SelectedItemViewModel? ReadElement(SelectedItemSearchModel model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
var element = _selectedItemStorage.GetElement(model);
if (element == null)
{
return null;
}
return element;
}
public bool Create(SelectedItemBindingModel model)
{
CheckModel(model);
if (_selectedItemStorage.Insert(model) == null)
{
return false;
}
return true;
}
public bool Update(SelectedItemBindingModel model)
{
CheckModel(model);
if (_selectedItemStorage.Update(model) == null)
{
return false;
}
return true;
}
public bool Delete(SelectedItemBindingModel model)
{
CheckModel(model, false);
if (_selectedItemStorage.Delete(model) == null)
{
return false;
}
return true;
}
private void CheckModel(SelectedItemBindingModel model, bool withParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
if (!withParams)
{
return;
}
if (string.IsNullOrEmpty(model.Name))
{
throw new ArgumentNullException("Нет названия выбранного товара", nameof(model.Name));
}
}
}
}

View File

@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\InternetShopOrdersContracts\InternetShopOrdersContracts.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,13 @@
using InternetShopOrdersDataModels.Models;
namespace InternetShopOrdersContracts.BindingModels
{
public class OrderBindingModel : IOrderModel
{
public int Id { get; set; }
public string Fullname { get; set; } = string.Empty;
public string OrderImage { get; set; }
public int SelectedItemId { get; set; }
public string Email { get; set; } = string.Empty;
}
}

View File

@ -0,0 +1,15 @@
using InternetShopOrdersDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace InternetShopOrdersContracts.BindingModels
{
public class SelectedItemBindingModel : ISelectedItemModel
{
public int Id { get; set; }
public string Name { get; set; } = String.Empty;
}
}

View File

@ -0,0 +1,20 @@
using InternetShopOrdersContracts.BindingModels;
using InternetShopOrdersContracts.SearchModels;
using InternetShopOrdersContracts.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace InternetShopOrdersContracts.BusinessLogicContracts
{
public interface IOrderLogic
{
List<OrderViewModel>? ReadList(OrderSearchModel? model);
OrderViewModel? ReadElement(OrderSearchModel model);
bool Create(OrderBindingModel model);
bool Update(OrderBindingModel model);
bool Delete(OrderBindingModel model);
}
}

View File

@ -0,0 +1,20 @@
using InternetShopOrdersContracts.BindingModels;
using InternetShopOrdersContracts.SearchModels;
using InternetShopOrdersContracts.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace InternetShopOrdersContracts.BusinessLogicContracts
{
public interface ISelectedItemLogic
{
List<SelectedItemViewModel>? ReadList(SelectedItemSearchModel? model);
SelectedItemViewModel? ReadElement(SelectedItemSearchModel model);
bool Create(SelectedItemBindingModel model);
bool Update(SelectedItemBindingModel model);
bool Delete(SelectedItemBindingModel model);
}
}

View File

@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\InternetShopDataModels\InternetShopDataModels.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace InternetShopOrdersContracts.SearchModels
{
public class OrderSearchModel
{
public int? Id { get; set; }
}
}

View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace InternetShopOrdersContracts.SearchModels
{
public class SelectedItemSearchModel
{
public int? Id { get; set; }
}
}

View File

@ -0,0 +1,21 @@
using InternetShopOrdersContracts.BindingModels;
using InternetShopOrdersContracts.SearchModels;
using InternetShopOrdersContracts.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace InternetShopOrdersContracts.StorageContracts
{
public interface IOrderStorage
{
List<OrderViewModel> GetFullList();
List<OrderViewModel> GetFilteredList(OrderSearchModel model);
OrderViewModel? GetElement(OrderSearchModel model);
OrderViewModel? Insert(OrderBindingModel model);
OrderViewModel? Update(OrderBindingModel model);
OrderViewModel? Delete(OrderBindingModel model);
}
}

View File

@ -0,0 +1,21 @@
using InternetShopOrdersContracts.BindingModels;
using InternetShopOrdersContracts.SearchModels;
using InternetShopOrdersContracts.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace InternetShopOrdersContracts.StorageContracts
{
public interface ISelectedItemStorage
{
List<SelectedItemViewModel> GetFullList();
List<SelectedItemViewModel> GetFilteredList(SelectedItemSearchModel model);
SelectedItemViewModel? GetElement(SelectedItemSearchModel model);
SelectedItemViewModel? Insert(SelectedItemBindingModel model);
SelectedItemViewModel? Update(SelectedItemBindingModel model);
SelectedItemViewModel? Delete(SelectedItemBindingModel model);
}
}

View File

@ -0,0 +1,26 @@
using InternetShopOrdersDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace InternetShopOrdersContracts.ViewModels
{
public class OrderViewModel : IOrderModel
{
public int Id { get; set; }
[DisplayName("ФИО заказчика")]
public string Fullname { get; set; } = string.Empty;
public string OrderImage { get; set; } = string.Empty;
public int SelectedItemId { get; set; }
public string SelectedItemName { get; set; } = string.Empty;
[DisplayName("Электронная почта")]
public string Email { get; set; } = string.Empty;
}
}

View File

@ -0,0 +1,17 @@
using InternetShopOrdersDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace InternetShopOrdersContracts.ViewModels
{
public class SelectedItemViewModel : ISelectedItemModel
{
public int Id { get; set; }
[DisplayName("Название")]
public string Name { get; set; } = string.Empty;
}
}

View File

@ -0,0 +1,87 @@
using InternetShopOrdersContracts.BindingModels;
using InternetShopOrdersContracts.SearchModels;
using InternetShopOrdersContracts.StorageContracts;
using InternetShopOrdersContracts.ViewModels;
using InternetShopOrdersDatabaseImplement.Models;
using Microsoft.EntityFrameworkCore;
using System.Security.Principal;
namespace InternetShopOrdersDatabaseImplement.Implements
{
public class OrderStorage : IOrderStorage
{
public List<OrderViewModel> GetFullList()
{
using var context = new OrdersDatabase();
return context.Orders
.Include(x => x.SelectedItem)
.Select(x => x.GetViewModel)
.ToList();
}
public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
{
if (!model.Id.HasValue)
{
return new();
}
using var context = new OrdersDatabase();
return context.Orders
.Include(x => x.SelectedItem)
.Where(x => x.Id == model.Id)
.Select(x => x.GetViewModel)
.ToList();
}
public OrderViewModel? GetElement(OrderSearchModel model)
{
if (!model.Id.HasValue)
{
return null;
}
using var context = new OrdersDatabase();
return context.Orders
.Include(x => x.SelectedItem)
.FirstOrDefault(x => x.Id == model.Id)
?.GetViewModel;
}
public OrderViewModel? Insert(OrderBindingModel model)
{
using var context = new OrdersDatabase();
var newOrder = Orders.Create(context, model);
if (newOrder == null)
{
return null;
}
context.Orders.Add(newOrder);
context.SaveChanges();
return newOrder.GetViewModel;
}
public OrderViewModel? Update(OrderBindingModel model)
{
using var context = new OrdersDatabase();
var Order = context.Orders.FirstOrDefault(x => x.Id == model.Id);
if (Order == null)
{
return null;
}
Order.Update(model, context);
context.SaveChanges();
return Order.GetViewModel;
}
public OrderViewModel? Delete(OrderBindingModel model)
{
using var context = new OrdersDatabase();
var element = context.Orders
.Include(x => x.SelectedItem)
.FirstOrDefault(rec => rec.Id == model.Id);
if (element != null)
{
context.Orders.Remove(element);
context.SaveChanges();
return element.GetViewModel;
}
return null;
}
}
}

View File

@ -0,0 +1,79 @@
using InternetShopOrdersContracts.BindingModels;
using InternetShopOrdersContracts.SearchModels;
using InternetShopOrdersContracts.StorageContracts;
using InternetShopOrdersContracts.ViewModels;
using InternetShopOrdersDatabaseImplement.Models;
using Microsoft.EntityFrameworkCore;
namespace InternetShopOrdersDatabaseImplement.Implements
{
public class SelectedItemStorage : ISelectedItemStorage
{
public List<SelectedItemViewModel> GetFullList()
{
using var context = new OrdersDatabase();
return context.SelectedItems
.Select(x => x.GetViewModel)
.ToList();
}
public List<SelectedItemViewModel> GetFilteredList(SelectedItemSearchModel model)
{
if (!model.Id.HasValue)
{
return new();
}
using var context = new OrdersDatabase();
return context.SelectedItems
.Where(x => x.Id == model.Id)
.Select(x => x.GetViewModel)
.ToList();
}
public SelectedItemViewModel? GetElement(SelectedItemSearchModel model)
{
if (!model.Id.HasValue)
{
return null;
}
using var context = new OrdersDatabase();
return context.SelectedItems
.FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id)
?.GetViewModel;
}
public SelectedItemViewModel? Insert(SelectedItemBindingModel model)
{
var newSelectedItem = SelectedItem.Create(model);
if (newSelectedItem == null)
{
return null;
}
using var context = new OrdersDatabase();
context.SelectedItems.Add(newSelectedItem);
context.SaveChanges();
return newSelectedItem.GetViewModel;
}
public SelectedItemViewModel? Update(SelectedItemBindingModel model)
{
using var context = new OrdersDatabase();
var component = context.SelectedItems.FirstOrDefault(x => x.Id == model.Id);
if (component == null)
{
return null;
}
component.Update(model);
context.SaveChanges();
return component.GetViewModel;
}
public SelectedItemViewModel? Delete(SelectedItemBindingModel model)
{
using var context = new OrdersDatabase();
var element = context.SelectedItems.FirstOrDefault(rec => rec.Id == model.Id);
if (element != null)
{
context.SelectedItems.Remove(element);
context.SaveChanges();
return element.GetViewModel;
}
return null;
}
}
}

View File

@ -0,0 +1,22 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.10">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.8" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\InternetShopOrdersContracts\InternetShopOrdersContracts.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,87 @@
// <auto-generated />
using InternetShopOrdersDatabaseImplement;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace InternetShopOrdersDatabaseImplement.Migrations
{
[DbContext(typeof(OrdersDatabase))]
[Migration("20241016152345_InitialMig")]
partial class InitialMig
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "8.0.10")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("InternetShopOrdersDatabaseImplement.Models.Orders", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Email")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Fullname")
.IsRequired()
.HasColumnType("text");
b.Property<string>("OrderImage")
.IsRequired()
.HasColumnType("text");
b.Property<int>("SelectedItemId")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("SelectedItemId");
b.ToTable("Orders");
});
modelBuilder.Entity("InternetShopOrdersDatabaseImplement.Models.SelectedItem", 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("SelectedItems");
});
modelBuilder.Entity("InternetShopOrdersDatabaseImplement.Models.Orders", b =>
{
b.HasOne("InternetShopOrdersDatabaseImplement.Models.SelectedItem", "SelectedItem")
.WithMany()
.HasForeignKey("SelectedItemId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("SelectedItem");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,65 @@
using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace InternetShopOrdersDatabaseImplement.Migrations
{
/// <inheritdoc />
public partial class InitialMig : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "SelectedItems",
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_SelectedItems", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Orders",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
Fullname = table.Column<string>(type: "text", nullable: false),
Email = table.Column<string>(type: "text", nullable: false),
SelectedItemId = table.Column<int>(type: "integer", nullable: false),
OrderImage = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Orders", x => x.Id);
table.ForeignKey(
name: "FK_Orders_SelectedItems_SelectedItemId",
column: x => x.SelectedItemId,
principalTable: "SelectedItems",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_Orders_SelectedItemId",
table: "Orders",
column: "SelectedItemId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Orders");
migrationBuilder.DropTable(
name: "SelectedItems");
}
}
}

View File

@ -0,0 +1,84 @@
// <auto-generated />
using InternetShopOrdersDatabaseImplement;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace InternetShopOrdersDatabaseImplement.Migrations
{
[DbContext(typeof(OrdersDatabase))]
partial class OrdersDatabaseModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "8.0.10")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("InternetShopOrdersDatabaseImplement.Models.Orders", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Email")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Fullname")
.IsRequired()
.HasColumnType("text");
b.Property<string>("OrderImage")
.IsRequired()
.HasColumnType("text");
b.Property<int>("SelectedItemId")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("SelectedItemId");
b.ToTable("Orders");
});
modelBuilder.Entity("InternetShopOrdersDatabaseImplement.Models.SelectedItem", 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("SelectedItems");
});
modelBuilder.Entity("InternetShopOrdersDatabaseImplement.Models.Orders", b =>
{
b.HasOne("InternetShopOrdersDatabaseImplement.Models.SelectedItem", "SelectedItem")
.WithMany()
.HasForeignKey("SelectedItemId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("SelectedItem");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,69 @@
using InternetShopOrdersContracts.BindingModels;
using InternetShopOrdersContracts.ViewModels;
using InternetShopOrdersDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace InternetShopOrdersDatabaseImplement.Models
{
public class Orders : IOrderModel
{
[Required]
public string Fullname { get; set; } = string.Empty;
[Required]
public string Email { get; set; } = string.Empty;
public int Id { get; private set; }
public int SelectedItemId { get; set; }
public virtual SelectedItem SelectedItem { get; set; } = new();
[Required]
public string OrderImage { get; set; } = string.Empty;
public static Orders? Create(OrdersDatabase context, OrderBindingModel? model)
{
if (model == null)
{
return null;
}
return new Orders()
{
Id = model.Id,
Fullname = model.Fullname,
Email = model.Email,
SelectedItemId = model.SelectedItemId,
SelectedItem = context.SelectedItems.First(x => x.Id == model.SelectedItemId),
OrderImage = model.OrderImage,
};
}
public void Update(OrderBindingModel? model, OrdersDatabase context)
{
if (model == null)
{
return;
}
Fullname = model.Fullname;
SelectedItemId = model.SelectedItemId;
SelectedItem = context.SelectedItems.First(x => x.Id == model.SelectedItemId);
OrderImage = model.OrderImage;
}
public OrderViewModel GetViewModel => new()
{
Id = Id,
Fullname = Fullname,
Email = Email,
SelectedItemId = SelectedItemId,
SelectedItemName = SelectedItem.Name,
OrderImage = OrderImage,
};
}
}

View File

@ -0,0 +1,54 @@
using InternetShopOrdersContracts.BindingModels;
using InternetShopOrdersContracts.ViewModels;
using InternetShopOrdersDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace InternetShopOrdersDatabaseImplement.Models
{
public class SelectedItem : ISelectedItemModel
{
public int Id { get; private set; }
[Required]
public string Name { get; private set; } = string.Empty;
public static SelectedItem? Create(SelectedItemBindingModel? model)
{
if (model == null)
{
return null;
}
return new SelectedItem()
{
Id = model.Id,
Name = model.Name,
};
}
public static SelectedItem? Create(SelectedItemViewModel? model)
{
return new SelectedItem()
{
Id = model.Id,
Name = model.Name,
};
}
public void Update(SelectedItemBindingModel? model)
{
if (model == null)
{
return;
}
Name = model.Name;
}
public SelectedItemViewModel GetViewModel => new()
{
Id = Id,
Name = Name,
};
}
}

View File

@ -0,0 +1,20 @@
using InternetShopOrdersDatabaseImplement.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;
namespace InternetShopOrdersDatabaseImplement
{
public class OrdersDatabase : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseNpgsql("Host=localhost;Database=InternetShopOrdersDB;Username=postgres;Password=postgres");
public virtual DbSet<Orders> Orders { set; get; }
public virtual DbSet<SelectedItem> SelectedItems { set; get; }
}
}

View File

@ -5,7 +5,17 @@ VisualStudioVersion = 17.9.34723.18
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WinFormsLibraryVolkov", "WinFormsLibraryVolkov\WinFormsLibraryVolkov.csproj", "{80044A4D-FF3B-4CA9-AA16-4E4E2520B60C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinFormsTestApp", "WinFormsTestApp\WinFormsTestApp.csproj", "{10C4BDA8-E7E7-4B43-8F9E-6549C5C40646}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WinFormsTestApp", "WinFormsTestApp\WinFormsTestApp.csproj", "{10C4BDA8-E7E7-4B43-8F9E-6549C5C40646}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InternetShopOrdersBusinessLogic", "InternetShopOrdersBusinessLogic\InternetShopOrdersBusinessLogic.csproj", "{30B57BEC-D1B0-411A-87B2-3E138A20DC8E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InternetShopOrdersContracts", "InternetShopOrdersContracts\InternetShopOrdersContracts.csproj", "{8883886C-DDAC-43DC-885F-4A9B2FBE007E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InternetShopOrdersDatabaseImplement", "InternetShopOrdersDatabaseImplement\InternetShopOrdersDatabaseImplement.csproj", "{3F616681-9757-4B12-9931-CC7B6872FD5F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InternetShopDataModels", "InternetShopDataModels\InternetShopDataModels.csproj", "{1CEB87FB-BA72-491C-9125-0B3527EF612E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InternetShopOrdersApp", "InternetShopOrdersApp\InternetShopOrdersApp.csproj", "{13A6EC26-C739-4891-964C-4A0E5E8D43C3}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -21,6 +31,26 @@ Global
{10C4BDA8-E7E7-4B43-8F9E-6549C5C40646}.Debug|Any CPU.Build.0 = Debug|Any CPU
{10C4BDA8-E7E7-4B43-8F9E-6549C5C40646}.Release|Any CPU.ActiveCfg = Release|Any CPU
{10C4BDA8-E7E7-4B43-8F9E-6549C5C40646}.Release|Any CPU.Build.0 = Release|Any CPU
{30B57BEC-D1B0-411A-87B2-3E138A20DC8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{30B57BEC-D1B0-411A-87B2-3E138A20DC8E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{30B57BEC-D1B0-411A-87B2-3E138A20DC8E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{30B57BEC-D1B0-411A-87B2-3E138A20DC8E}.Release|Any CPU.Build.0 = Release|Any CPU
{8883886C-DDAC-43DC-885F-4A9B2FBE007E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8883886C-DDAC-43DC-885F-4A9B2FBE007E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8883886C-DDAC-43DC-885F-4A9B2FBE007E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8883886C-DDAC-43DC-885F-4A9B2FBE007E}.Release|Any CPU.Build.0 = Release|Any CPU
{3F616681-9757-4B12-9931-CC7B6872FD5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3F616681-9757-4B12-9931-CC7B6872FD5F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3F616681-9757-4B12-9931-CC7B6872FD5F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3F616681-9757-4B12-9931-CC7B6872FD5F}.Release|Any CPU.Build.0 = Release|Any CPU
{1CEB87FB-BA72-491C-9125-0B3527EF612E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1CEB87FB-BA72-491C-9125-0B3527EF612E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1CEB87FB-BA72-491C-9125-0B3527EF612E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1CEB87FB-BA72-491C-9125-0B3527EF612E}.Release|Any CPU.Build.0 = Release|Any CPU
{13A6EC26-C739-4891-964C-4A0E5E8D43C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{13A6EC26-C739-4891-964C-4A0E5E8D43C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{13A6EC26-C739-4891-964C-4A0E5E8D43C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{13A6EC26-C739-4891-964C-4A0E5E8D43C3}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE