diff --git a/.gitignore b/.gitignore
index 259148f..28edb7f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,3 +30,307 @@
*.exe
*.out
*.app
+
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Mono auto generated files
+mono_crash.*
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Ww][Ii][Nn]32/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+[Ll]ogs/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUnit
+*.VisualState.xml
+TestResult.xml
+nunit-*.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# ASP.NET Scaffolding
+ScaffoldingReadMe.txt
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Coverlet is a free, cross platform Code Coverage Tool
+coverage*.json
+coverage*.xml
+coverage*.info
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# NuGet Symbol Packages
+*.snupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+*.appxbundle
+*.appxupload
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- [Bb]ackup.rdl
+*- [Bb]ackup ([0-9]).rdl
+*- [Bb]ackup ([0-9][0-9]).rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
diff --git a/.idea/.idea.nVideo/.idea/indexLayout.xml b/.idea/.idea.nVideo/.idea/indexLayout.xml
new file mode 100644
index 0000000..27ba142
--- /dev/null
+++ b/.idea/.idea.nVideo/.idea/indexLayout.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.nVideo/.idea/modules.xml b/.idea/.idea.nVideo/.idea/modules.xml
new file mode 100644
index 0000000..8a1b206
--- /dev/null
+++ b/.idea/.idea.nVideo/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.nVideo/.idea/projectSettingsUpdater.xml b/.idea/.idea.nVideo/.idea/projectSettingsUpdater.xml
new file mode 100644
index 0000000..4bb9f4d
--- /dev/null
+++ b/.idea/.idea.nVideo/.idea/projectSettingsUpdater.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.nVideo/.idea/vcs.xml b/.idea/.idea.nVideo/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/.idea.nVideo/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.nVideo/.idea/workspace.xml b/.idea/.idea.nVideo/.idea/workspace.xml
new file mode 100644
index 0000000..9ef455d
--- /dev/null
+++ b/.idea/.idea.nVideo/.idea/workspace.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1615712748773
+
+
+ 1615712748773
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.nVideo/riderModule.iml b/.idea/.idea.nVideo/riderModule.iml
new file mode 100644
index 0000000..1a4e0d9
--- /dev/null
+++ b/.idea/.idea.nVideo/riderModule.iml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.vs/nVideo/DesignTimeBuild/.dtbcache.v2 b/.vs/nVideo/DesignTimeBuild/.dtbcache.v2
index 79c97fc..9174464 100644
Binary files a/.vs/nVideo/DesignTimeBuild/.dtbcache.v2 and b/.vs/nVideo/DesignTimeBuild/.dtbcache.v2 differ
diff --git a/.vs/nVideo/config/applicationhost.config b/.vs/nVideo/config/applicationhost.config
new file mode 100644
index 0000000..3c48e0b
--- /dev/null
+++ b/.vs/nVideo/config/applicationhost.config
@@ -0,0 +1,988 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.vs/nVideo/v16/.suo b/.vs/nVideo/v16/.suo
index edc4bfe..c9c9e08 100644
Binary files a/.vs/nVideo/v16/.suo and b/.vs/nVideo/v16/.suo differ
diff --git a/Services/Locating/Detector.cs b/Services/Locating/Detector.cs
new file mode 100644
index 0000000..5f9826f
--- /dev/null
+++ b/Services/Locating/Detector.cs
@@ -0,0 +1,22 @@
+using IpInfo;
+using System;
+using System.Collections.Generic;
+using System.Net.Http;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Services.Locating
+{
+ public class Detector : IDetector
+ {
+ private readonly string token = "1432677e806667";
+ public async Task GetyCityAsync()
+ {
+ var client = new HttpClient();
+ var api = new IpInfoApi(token, client);
+ var response = await api.GetCurrentInformationAsync();
+
+ return response.City;
+ }
+ }
+}
diff --git a/Services/Locating/IDetector.cs b/Services/Locating/IDetector.cs
new file mode 100644
index 0000000..bd48e46
--- /dev/null
+++ b/Services/Locating/IDetector.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Services.Locating
+{
+ ///
+ /// Определение геолокации
+ ///
+ public interface IDetector
+ {
+ ///
+ /// Асинхронный метод определение геолокации
+ ///
+ /// Город
+ public Task GetyCityAsync();
+ }
+}
diff --git a/Services/Services.csproj b/Services/Services.csproj
new file mode 100644
index 0000000..937c6aa
--- /dev/null
+++ b/Services/Services.csproj
@@ -0,0 +1,11 @@
+
+
+
+ netcoreapp3.1
+
+
+
+
+
+
+
diff --git a/Technical-Requirment.jpg b/Technical-Requirment.jpg
new file mode 100644
index 0000000..5c722f9
Binary files /dev/null and b/Technical-Requirment.jpg differ
diff --git a/nVideo.sln b/nVideo.sln
index b530b0f..fa81725 100644
--- a/nVideo.sln
+++ b/nVideo.sln
@@ -3,7 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30611.23
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nVideo", "nVideo\nVideo.csproj", "{FA2770C2-5E19-4A67-82A3-93ED5CB7E69B}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nVideo", "nVideo\nVideo.csproj", "{FA2770C2-5E19-4A67-82A3-93ED5CB7E69B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services", "Services\Services.csproj", "{601DC2DB-11E4-4D87-97D5-F5561265CEFD}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -15,6 +17,10 @@ Global
{FA2770C2-5E19-4A67-82A3-93ED5CB7E69B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FA2770C2-5E19-4A67-82A3-93ED5CB7E69B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FA2770C2-5E19-4A67-82A3-93ED5CB7E69B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {601DC2DB-11E4-4D87-97D5-F5561265CEFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {601DC2DB-11E4-4D87-97D5-F5561265CEFD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {601DC2DB-11E4-4D87-97D5-F5561265CEFD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {601DC2DB-11E4-4D87-97D5-F5561265CEFD}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/nVideo/Controllers/AccountController.cs b/nVideo/Controllers/AccountController.cs
new file mode 100644
index 0000000..fa6995a
--- /dev/null
+++ b/nVideo/Controllers/AccountController.cs
@@ -0,0 +1,20 @@
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace nVideo.Controllers
+{
+ public class AccountController : Controller
+ {
+ public IActionResult PersonalPage()
+ {
+ return View();
+ }
+ public IActionResult Registration()
+ {
+ return View();
+ }
+ }
+}
diff --git a/nVideo/Controllers/CatalogController.cs b/nVideo/Controllers/CatalogController.cs
new file mode 100644
index 0000000..6196081
--- /dev/null
+++ b/nVideo/Controllers/CatalogController.cs
@@ -0,0 +1,50 @@
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using nVideo.DATA.Interfaces;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using nVideo.DATA.ViewModels;
+
+namespace nVideo.Controllers
+{
+ public class CatalogController : Controller
+ {
+
+ private readonly IAllCatalog _catalog;
+ private readonly ILogger _logger;
+
+ public CatalogController(IAllCatalog catalog, ILogger logger){
+ _catalog = catalog;
+ _logger = logger;
+ }
+
+ public ViewResult List(){
+ var model = new CatalogViewModel();
+ model.Entities = _catalog.GetAllEntnty;
+
+ return View(model);
+ }
+
+ [Route("Catalog/CategoryFilter/{category}")]
+ public IActionResult CategoryFilter(string category){
+ if (!string.IsNullOrEmpty(category)){
+ var model = new CatalogViewModel();
+
+ model.Entities = _catalog.GetCategoryMembers(category);
+
+ return View("List", model);
+ }
+ throw new ArgumentNullException("Missing parameter: string category");
+ }
+
+ [Route("Catalog/About/{id}")]
+ public ViewResult About(int? id){
+ if (id.HasValue){
+ return View(_catalog.GetItemById(id));
+ }
+ throw new ArgumentNullException("Missing parameter: int id");
+ }
+ }
+}
diff --git a/nVideo/Controllers/HomeController.cs b/nVideo/Controllers/HomeController.cs
index d8c9f61..3ddfe5f 100644
--- a/nVideo/Controllers/HomeController.cs
+++ b/nVideo/Controllers/HomeController.cs
@@ -5,32 +5,52 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
+using nVideo.DATA.Interfaces;
using nVideo.Models;
+using nVideo.DATA.ViewModels;
+using Services.Locating;
namespace nVideo.Controllers
{
public class HomeController : Controller
{
private readonly ILogger _logger;
+ private readonly IAllCatalog _catalog;
+ private readonly IDetector _detector;
- public HomeController(ILogger logger)
- {
- _logger = logger;
+ private IEnumerable GetThridRandom{
+ get{
+ var rand = new List();
+ for (int i = 0; i < 3; i++)
+ rand.Add(_catalog.GetRandomItem);
+
+ return rand;
+ }
}
- public IActionResult Index()
- {
- return View();
+ public HomeController(ILogger logger, IAllCatalog catalog, IDetector detector){
+ _logger = logger;
+ _catalog = catalog;
+ _detector = detector;
}
- public IActionResult Privacy()
- {
+ public IActionResult Index(){
+ var model = new HomeViewModel
+ {
+ ForCarousel = _catalog.GetCarouselItems,
+ ForFeaturedBlock = _catalog.GetFeaturedItems,
+ ForNewProductsBlock = _catalog.GetNewItems,
+ ForThumbnailBlock = GetThridRandom
+ };
+ return View(model);
+ }
+
+ public IActionResult Privacy(){
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
- public IActionResult Error()
- {
+ public IActionResult Error(){
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
diff --git a/nVideo/DATA/AppDBContext.cs b/nVideo/DATA/AppDBContext.cs
new file mode 100644
index 0000000..79f261d
--- /dev/null
+++ b/nVideo/DATA/AppDBContext.cs
@@ -0,0 +1,24 @@
+using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore;
+using nVideo.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace nVideo.DATA
+{
+ public class AppDBContext : IdentityDbContext
+ {
+ public AppDBContext(DbContextOptions options) : base(options){
+
+ }
+
+ public DbSet Categories { get; set; }
+ public DbSet Entities { get; set; }
+ public DbSet Attributes { get; set; }
+ public DbSet Values { get; set; }
+ public DbSet Pictures { get; set; }
+ public DbSet Comments { get; set; }
+ }
+}
diff --git a/nVideo/DATA/DBObjects.cs b/nVideo/DATA/DBObjects.cs
new file mode 100644
index 0000000..5fa14b9
--- /dev/null
+++ b/nVideo/DATA/DBObjects.cs
@@ -0,0 +1,3478 @@
+using nVideo.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace nVideo.DATA
+{
+ public class DBObjects
+ {
+ private static Dictionary _categories;
+ private static Dictionary _entities;
+
+ private static Dictionary _attrValuePairs;
+
+ private static List _images;
+
+ public static void Initial(AppDBContext content)
+ {
+ //if (!content.Cities.Any()) ---> Задел на геолокацию
+ // content.Cities.AddRange(Cities);
+
+ if (!content.Categories.Any())
+ content.Categories.AddRange(Category.Select(c => c.Value));
+
+ if (!content.Entities.Any())
+ content.Entities.AddRange(Entities.Select(v => v.Value));
+
+ if (!content.Pictures.Any())
+ content.Pictures.AddRange(Images.Select(i => i));
+
+ if (!content.Values.Any())
+ content.Values.AddRange(AttrValuePairs.Select(v => v.Value));
+
+ if (!content.Attributes.Any())
+ content.Attributes.AddRange(AttrValuePairs.Select(a => a.Key));
+
+ content.SaveChanges();
+ }
+
+ public static Dictionary Category {
+ get {
+ if(_categories == null){
+ var catesories = new List{
+ new Catalog_Category { CategoryName = "Телефоны и гаджеты" },
+ new Catalog_Category { CategoryName = "Телевизоры и аудио" },
+ new Catalog_Category { CategoryName = "Ноутбуки и компьютеры" },
+ new Catalog_Category { CategoryName = "Техника для кухни" },
+ new Catalog_Category { CategoryName = "Техника для дома" },
+ new Catalog_Category { CategoryName = "Игры и софт, равлечения" },
+ new Catalog_Category { CategoryName = "Красота и здоровье" },
+ new Catalog_Category { CategoryName = "Фото и видео" },
+ new Catalog_Category { CategoryName = "Авто электроника" },
+ new Catalog_Category { CategoryName = "Аксессуары" }
+ };
+
+ _categories = new Dictionary();
+
+ foreach (var cat in catesories)
+ _categories.Add(cat.CategoryName, cat);
+
+ return _categories;
+ }
+ return _categories;
+ }
+ }
+
+ public static Dictionary Entities {
+ get{
+ if(_entities == null){
+ var entities = new List{
+
+ #region Телефоны и гаджеты
+
+ new Catalog_Entity {
+ Name = "Apple iPhone 12 128GB Black",
+ Articul = "0001-0001",
+ Price = 84990,
+ Short_Desc = "iPhone 12. Во-первых, это быстро.",
+ Long_Desc =
+@"iPhone 12 поражает возможностями. A14 Bionic, самый быстрый процессор iPhone. Новая система двух камер. И великолепный дисплей Super Retina XDR, на котором видно каждую деталь.
+
+Великолепный яркий дисплей Super Retina XDR 6,1 дюйма.1 Передняя панель Ceramic Shield, с которой риск повреждений дисплея при падении в 4 раза ниже.2 Потрясающее качество снимков при слабом освещении благодаря Ночному режиму на всех камерах. Съёмка, монтаж и воспроизведение видео кинематографического качества в стандарте Dolby Vision. Мощный процессор A14 Bionic. И новые аксессуары MagSafe, которые мгновенно примагничиваются и обеспечивают более быструю беспроводную зарядку.3 Другими словами, вас ждут яркие открытия.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Телефоны и гаджеты"]
+ },
+
+ new Catalog_Entity {
+ Name = "Xiaomi Mi 10T 8+128GB Black",
+ Articul = "0001-0002",
+ Price = 40990,
+ Short_Desc = "Xiaomi",
+ Long_Desc =
+@"Модуль задней камеры включает в себя 3 объектива. Присутствует основная камера и две дополнительные: сверхширокоугольная камера в 13 Мп (охватывает угол обзора 123°), а также макрообъектив в 6 Мп (поддерживает автофокус на расстоянии до 2 см).
+
+Такая комбинация объективов превращает каждый снимок в произведение искусства. Видео записывается в качестве 8К. Возможна съемка в режиме длинной выдержки. Передняя камера имеет 20 Мп.
+
+Гаджеты оснащены экраном в 6,67 дюйма с самой высокой частотой обновления изображения в истории Xiaomi – 144 Гц. Это на 140 % больше, чем 60 Гц. Время отклика дисплея составляет 7 мс. Значительно улучшен игровой процесс. Поддерживаются DCI-P3, MEMC и TrueColor. Технология AdaptiveSync (умный дисплей) автоматически настраивает для того или иного приложения необходимую частоту обновления (диапазон 30-144 Гц). Это обеспечивает максимальную плавность изображения и экономит энергопотребление (до 8 % после 6 часов использования).
+ В смартфоны встроен процессор Qualcomm Snapdragon 865. Поддерживается Wi-Fi 6.
+
+Xiaomi Mi 10T имеют мощный аккумулятор с емкостью 5000 мАч. Обеспечивается быстрая проводная зарядка (33 Вт). Цикл полной зарядки до 100 % составляет 59 минут.
+
+Устройства также характеризуются линейным вибрационным двигателем Х-оси, многофункциональным NFC, двойными динамиками (более объемный звук). Поддерживается технология LiquidCool и 3D-запись. В боковой части корпуса расположен сканер отпечатков пальцев.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Телефоны и гаджеты"]
+ },
+
+ new Catalog_Entity {
+ Name = @"OnePlus 8 Pro 12/256Gb Black",
+ Articul = "0001-0003",
+ Price = 63620,
+ Short_Desc = "OnePlus",
+ Long_Desc =
+@"Смартфон OnePlus 8 Pro 8/128Gb Black (черного цвета) - совершенство, доступное каждому
+Высокопроизводительная конфигурация на основе Qualcomm, большой ресурс памяти, оптика топ-уровня, аккумулятор с увеличенным ресурсом, защита девайса и внутренних данных, сбалансированная акустика, NFC - с этим смартфоном владелец получает только лучшее.
+
+Камеры, останавливающие мгновения
+В распоряжении гаджета пять светосильных оптических матриц, разделенных на два модуля:
+
+48Мп (f/1.78), 8Мп, 48Мп (f/2.2) и 5Мп в тыльном;
+16Мп во фронтальном.
+
+Камеры отличаются высокой скоростью срабатывания, качественным распознаванием светотеневых переходов, точной детализацией, быстрой работой автофокуса. Имеющиеся достоинства подчеркиваются прогрессивным программным обеспечением, которое предоставляет множество режимов, эффектов и дополнительных инструментов.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Телефоны и гаджеты"]
+ },
+
+ new Catalog_Entity {
+ Name = "Xiaomi Redmi Note 9 4/128GB Grey",
+ Articul = "0001-0004",
+ Price = 40990,
+ Short_Desc = "Xiaomi",
+ Long_Desc =
+@"Обычный Redmi Note 9 внешне оказался очень похож на Redmi Note 9 Pro, но есть как минимум два важных отличия — корпус новинки выполнен из пластика, а под модулем камеры разместился привычный сканер отпечатков пальцев. Спереди же смартфон можно отличить по смещённому в левый угол экрана отверстию фронтальной камеры.
+
+Дисплей у Redmi Note 9 имеет IPS-матрицу с диагональю 6,53 дюйма и разрешение Full HD+. За производительность отвечает процессор MediaTek Helio G85 с 3 или 4 ГБ оперативной и 64 или 128 ГБ встроенной памяти. Слот для карт microSD присутствует.
+
+Основная камера включает в себя сенсоры на 48, 8, 2 и 2 Мп. Есть электронная стабилизация изображения, макро-режим и съёмка с широким углом захвата (118°). Фронтальная камера имеет разрешение 13 Мп.
+
+Аккумулятор обладает ёмкостью 5 020 мА·ч и поддерживает быструю зарядку на 18 Вт через порт USB-C. В комплекте идёт адаптер питания с мощностью 22,5 Вт. Среди прочего: ИК - передатчик для управления бытовой техникой и разъём 3,5 мм для проводных наушников.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Телефоны и гаджеты"]
+ },
+
+ new Catalog_Entity {
+ Name = "Apple iPhone XR 64GB Black",
+ Articul = "0001-0005",
+ Price = 40990,
+ Short_Desc = "Apple",
+ Long_Desc =
+@"Дисплей Liquid Retina HD
+ЖК‑дисплей Multi‑Touch с технологией IPS, на всю переднюю панель, диагональ 6,1 дюйма
+1792×828 пикселей, 326 пикселей на дюйм
+Контрастность 1400:1(стандартная)
+Технология True Tone
+Широкий цветовой охват(P3)
+Тактильный отклик при нажатии
+Яркость до 625 кд / м² (стандартная)
+ Олеофобное покрытие, устойчивое к появлению следов от пальцев
+Поддержка одновременного отображения нескольких языков и наборов символов",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Телефоны и гаджеты"]
+ },
+ #endregion
+
+ #region Телевизоры и аудио
+
+ new Catalog_Entity{
+ Name = "Samsung UE32T4510AUXRU",
+ Articul = "0002-0001",
+ Price = 17990,
+ Long_Desc =
+@"Общие данные:
+Габариты (без подставки): 43,8х73,74х7,41 см
+Габариты (с подставкой): 46,54х73,74х15,05 см
+Диагональ: 32`
+Разрешение: 1366x768
+Разъемы(вход): компонентный, антенный, HDMIх2, USB, Ethernet, Wi - fi
+Разъемы(выход): оптический
+
+Изображение:
+Тип подсветки: LED(Светодиодный)
+Процессор изображения: HyperReal
+Технология Motion Rate(для повышения четкости передачи движения): 50
+Расчетный показатель качества изображения PQI(Picture Quality Index): 900
+HDR - High Dynamic Range(Расширенный динамический диапазон)
+Динамическая контрастность: Поддержка технологии Mega Contrast(позволяет воспроизводить самые тонкие нюансы контрастов)
+Расширение диапазона передачи цветовых оттенков PurColor
+Функция Contrast Enhancer
+Технология Micro Dimming(локальное затемнение фрагметов экрана для улучшения контрастности)
+Режим Кино
+Поддержка режима Natural Mode(Естественная передача цвета)
+
+Системы вещания:
+Цифровое телевещание(Digital Broadcasting): DVB - T2 / C / S2
+Аналоговый тюнер
+Разъем для карточки CI(Common Interface): CI + (1.4)
+Передача данных(Data Broadcasting): HbbTV 1.5(RU)
+Поддержка TV Key
+
+Звук:
+Поддержка технологии Multiroom Link(для прослушивания звука в других помещениях)
+Поддержка технологии Dolby Digital Plus
+Выходная мощность звука: 10 Вт
+Тип динамиков: 2 канала
+
+Smart Tv:
+ ОС Tizen
+Поддержка приложения Интернет вещей(SmartThings App Support)
+Веб - браузер
+Галерея
+Отображение экрана мобильного устр - ва на экране ТВ - Зеркалирование
+Remote Access
+Wi - Fi Direct
+ Встроенная поддержка беспроводной сети(WiFi4)
+
+Особенности:
+ Технология Digital Clean View
+Технология Ultra Clean View
+Автопоиск каналов
+Автовыключение
+Поддержка титров(субтитров)
+Технология Connect Share(жесткий диск)
+ConnectShare(USB 2.0)
+Электронный гид по программам EPG
+Поддержка USB HID
+Поддержка IPv6
+Режим Игры
+Телетекст
+
+Дополнительная информация:
+ Eco датчик
+Поддержка настенного кронштейна Vesa Wall Mount
+
+Вес: 4 кг без подставки, 4,1 кг с подставкой",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Телевизоры и аудио"]
+ },
+
+ new Catalog_Entity{
+ Name = "Novex NWX-24H121WSG",
+ Articul = "0002-0002",
+ Price = 7990,
+ Long_Desc =
+@"В данном устройстве воплощены лучшие достижения и опыт разработчиков в попытке создания телевизора, идеального с точки зрения соотношения цены и качества. Стильный дизайн, специальные возможности по управлению звуком и видео, энергосберегающие технологии, USB-интерфейс с поддержкой распространенных видео-форматов – все эти особенности помогут Вам наслаждаться просмотром фильмов и телепрограмм.
+
+Жидкокристаллическая панель диагональю в 26 дюймов с точки зрения дизайна (линия Hairline) является универсальной, отличаясь лаконичностью и простотой: независимо от стиля Вашего интерьера, телевизор прекрасно его дополнит.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Телевизоры и аудио"]
+ },
+
+ new Catalog_Entity{
+ Name = "Проигрыватель виниловых дисков Sony PS-LX310BT",
+ Articul = "0002-0003",
+ Price = 22990,
+ Long_Desc =
+@"Проигрыватель Sony PS-LX310BT адресован меломанам и умело сочетает в себе современные технологии и высокие стандарты воспроизведения эпохи расцвета грампластинок. Позвольте себе насладиться особым звучанием виниловых пластинок и окунуться в мир любимых композиций в чистом и естественном исполнении!
+
+ДЛЯ ЛЮБЫХ ЖАНРОВ
+Алюминиевый тонарм со специально разработанной конструкцией плавно движется по поверхности пластинки, извлекая из неё насыщенный и чёткий звук с густыми басами. Ременной привод с лёгким и прочным металлическим литым диском обеспечивает стабильное вращение без случайных смещений.
+
+УДОБНОЕ РЕШЕНИЕ
+В девайсе есть функция автоматического воспроизведения аудио, благодаря которой система сама опускает тонарм на пластинку, а вы можете удобно устроиться в кресле рядом. Встроенный Bluetooth-модуль позволяет направить звук в наушники или колонки по беспроводному соединению и слушать музыку в любом уголке дома.
+
+КАК БОЛЬШЕ НРАВИТСЯ
+Для тех, кто ностальгирует по классике, на корпусе прибора расположен адаптер для перехода на частоту вращения 45 оборотов в минуту. Кроме того, вы сможете самостоятельно установить нужный уровень усиления звука с помощью соответствующего переключателя позиций.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Телевизоры и аудио"]
+ },
+
+#endregion
+
+ #region Ноутбуки и компьютеры
+
+ new Catalog_Entity{
+ Name = "Apple MacBook Pro 13 Mid 2020",
+ Articul = "0003-0001",
+ Price = 124990,
+ Long_Desc =
+@"Apple MacBook Pro – стильный, тонкий, лёгкий ноутбук, который удобно брать с собой в поездки. Его возможностей достаточно для плодотворной работы и разнообразных развлечений.
+
+ВЫСОКАЯ ПРОИЗВОДИТЕЛЬНОСТЬ
+Благодаря мощному процессору, солидному объёму оперативной памяти, быстрому накопителю SSD, функции ускорения Turbo Boost ноутбук эффективно справляется практически с любыми задачами, в том числе в многозадачном режиме.
+
+РЕАЛИСТИЧНОЕ ИЗОБРАЖЕНИЕ
+Ноутбук оснащён экраном, выполненным по технологии Retina: на нём нельзя рассмотреть невооружённым взглядом отдельные точки. Повышенная яркость LED-подсветки и улучшенная контрастность позволили добиться более глубоких чёрных и более ярких белых цветов.
+
+МОЩНЫЙ ЗВУК
+В этой модели используется аудиосистема с расширенным звуковым диапазоном и увеличенной громкостью динамиков. Она подключена напрямую к каналу электропитания, что дало возможность значительно усилить её мощность.
+
+УДОБНЫЙ УНИВЕРСАЛЬНЫЙ ИНТЕРФЕЙС
+Для зарядки аккумулятора и подключения внешних устройств используется интерфейс Thunderbolt. Это универсальный порт с высокой пропускной способностью.
+
+НОВЫЙ СПОСОБ УПРАВЛЕНИЯ
+Там, где у ноутбуков обычно расположены функциональные клавиши, у Apple MacBook Pro находится сенсорная панель Touch Bar. В зависимости от того, чем вы занимаетесь, на ней автоматически отображаются определённые инструменты: регуляторы громкости и яркости, функции управления фото и видео и так далее.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Ноутбуки и компьютеры"]
+ },
+
+ new Catalog_Entity{
+ Name = "Microsoft Surface Laptop 3 13.5",
+ Articul = "0003-0002",
+ Price = 105990,
+ Long_Desc =
+@"Претворите все свои идеи в жизнь с новым ноутбуком Surface Laptop 3, воплотившим в себе все последние инновации Microsoft. Новое поколение обзавелось более мощным процессором, увеличенным тачпадом и выносливым аккумулятором и при этом не потеряло в весе.
+
+Увеличенный на 20% тачбар способствует более комфортной навигации, а отзывчивая клавиатура с подсветкой обеспечит удобство и высокую скорость печати.
+
+Laptop 3 позволяет заменить встроенный SSD-накопитель на любой другой, таким образом увеличив объём памяти вплоть до 1 терабайта.
+
+Surface Laptop 3 обладает мощной батареей, обеспечивающей до 11.5 часов работы без необходимости обращаться к зарядке. Однако даже если Laptop 3 необходимо быстро подзарядить, то функция быстрой зарядки восстановит 80% аккумулятора всего за час.
+
+Ноутбук обзавёлся портом USB Type-С, благодаря которому Laptop 3 можно с лёгкостью синхронизировать с самыми современными устройствами. Помимо USB Type-С ноутбук обладает привычным USB Type-A, аудиоразъемом 3,5-мм, а также портом Surface Connect.
+
+В операционную систему Windows 10 встроена голосовая помощница Cortana, которая позволит сэкономить время и мгновенно найти ответы на все интересующие вопросы. Браузер Microsoft Edge обеспечит быструю навигацию в Интернете.
+
+Windows Hello обеспечит безопасный и быстрый вход в операционную систему за счёт технологии биометрического распознавания лица, избавив вас от запоминания длинных паролей и вероятности ошибки. Всего лишь один взгляд в камеру ноутбука — и вот вы уже внутри. А главное, никто кроме вас не получит доступ к Surface Laptop.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Ноутбуки и компьютеры"]
+ },
+
+ new Catalog_Entity{
+ Name = "Xiaomi RedmiBook Air 13.3",
+ Articul = "0003-0003",
+ Price = 68990,
+ Long_Desc =
+@"Ноутбук RedmiBook Air 13 оснащен широким 13,3-дюймовым экраном, который отображает картинку высокого качества 2,5К (2560 х 1600). Компактный корпус содержит в себе 4-ядерный процессор Intel Core 10-го поколения, жесткий диск емкостью 512 Гб, а также мощную систему охлаждения.
+
+Высокоэффективная система охлаждения
+RedmiBook Air 13 имеет мощную систему охлаждения. 1 вентилятор и 2 воздухозаборных отверстия снижают температуру нижней поверхности корпуса на 15,5 %, поэтому гаджет сохраняет необходимую прохладу для эффективного функционирования. Коэффициент теплоотдачи увеличен на 87 %.
+
+Выбор режима производительности
+3 режима производительности, которые предоставляются на выбор пользователю, позволяют использовать ноутбук в нужном режиме. Например, осуществление офисной работы, удовлетворение творческих потребностей или долгая автономная работа в бесшумном режиме. Все режимы переключаются между собой всего одним сочетанием клавиш – Fn+K.
+
+Поддержка Wi-Fi 6, Modern Standby и DTS
+Устройство работает при использовании сети Wi-Fi 6. По сравнению с предыдущим поколением скорость увеличена в 2,7 раза, что позволяет быстро скачивать большие объемы данных. Функция Modern Standby мгновенно заблокирует ноутбук в случае Вашего ухода и наоборот – разблокирует при малейшем взаимодействии. Так же поддерживается технология стереозвука DTS.
+
+11,5 ч автономной работы
+Благодаря встроенному аккумулятору (41 Вт*ч) ноутбук может проработать 11,5 часов в автономном режиме. Предусмотрена быстрая зарядка до 50 % всего за 35 минут. Мини-адаптер Type-C (100 г) отлично помещается в сумке, а также поможет зарядить смартфон.
+
+2 порта USB-C
+В боковой части корпуса расположены 2 порта UCB-C и стандартный разъем для наушников (3,5 мм). Обеспечивается быстрый доступ к другим гаджетам и гарнитуре.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Ноутбуки и компьютеры"]
+ },
+
+#endregion
+
+ #region Техника для кухни
+
+ new Catalog_Entity{
+ Name = "Кофемашина Melitta Caffeo Avanza F270-100",
+ Articul = "0004-0001",
+ Price = 445990,
+ Long_Desc =
+@"Кофемашина Melitta Cafeo Avanza F270-100 использует для заваривания зернового кофе. Имеет встроенную кофемолку с 5 степенями помола. Материал изготовления — нержавеющая сталь и пластик титанового цвета. Машина подогревает молоко и отлично готовит напитки типа капучино. Вы сможете приготовить множество напитков и даже придумать свой рецепт, а машина сохранит его в своей памяти.
+
+Кофемашина Melitta Cafeo Avanza F270-100 просто находка для корпоративных клиентов. Она быстро варит кофе, работает бесшумно, оповещает о степени готовности. Можно задать объем и крепость напитка. Надежность эксплуатации гарантирована европейскими стандартами качества. Это отличное приобретение для вашего офиса на радость всех его сотрудников.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Техника для кухни"]
+ },
+
+ new Catalog_Entity{
+ Name = "Йогуртница Redmond RYM-M5401",
+ Articul = "0004-0002",
+ Price = 2890,
+ Long_Desc =
+@"Йогурт - это не только вкусное лакомство, но и натуральный кисломолочный продукт, полезный как детям, так и взрослым. С йогуртницей ''Redmond RYM-M5401'' Вы можете легко приготовить его у себя дома. Удобное электронное управление с дисплеем позволяют точно установить время приготовления йогурта и отслеживать готовность с помощью таймера обратного отсчета. Каждая из восьми стеклянных баночек, которые входят в комплект прибора, снабжена крышкой с ручным дисковым маркером даты, с помощью которого можно указывать срок хранения йогурта.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Техника для кухни"]
+ },
+
+ new Catalog_Entity{
+ Name = "Холодильник Indesit DS 318 B",
+ Articul = "0004-0003",
+ Price = 19990,
+ Long_Desc =
+@"Двухкамерный холодильник с нижним расположением морозильной камеры.
+
+Регулируемые ножки: Да – только передние
+Уровень шума: 39 дБ
+
+Система Low Frost (специальная конструкция контура испарителя, который размещается по всему периметру морозильной камеры) в сочетании со стильными стеклянными полками эффективно предотвращают образование наледи внутри камеры.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Техника для кухни"]
+ },
+
+#endregion
+
+ #region Техника для дома
+
+ new Catalog_Entity
+ {
+ Name = "Пылесос Thomas Parkett Prestige XT",
+ Articul = "0005-0001",
+ Price = 32890,
+ Long_Desc =
+@"Подлинный немецкий паркетник-Thomas Parkett Prestige XT. Благодаря уникальным насадкам и системе Thomas AQUA-BOX процесс уборки прост и приятен. Такое ощущение будто сама природа участвует в фильтрации воздуха, обеспечивая его чистоту и свежесть. Деликатная, тщательная мойка паркета, ламината, ковров, плитки, мягкой мебели. Удобный и прочный кордовый шланг с пультом дистанционного управления, расположенным прямо на рукоятке. Насадка с автоматической светодиодной подсветкой для темных мест Thomas CleanLight. Объемная очистка воздуха во всей квартире!
+
+Насадки в комплекте:
+
+щелевая удлиненная 360 мм; распылительная для мягкой мебели с напорным шлангом; распылительная для влажной уборки ковров; паркетная со щеткой из конского волоса и войлока; для чистки полов с автоматической светодиодной подсветкой для темных мест CleanLight; для мягкой мебели с ниткоснимателем; для влажной уборки паркета и ламината Thomas Aqua Stealth; адаптер для гладких поверхностей.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Техника для дома"]
+ },
+ new Catalog_Entity
+ {
+ Name = "Швейная машина BROTHER HF 27",
+ Articul = "0005-0002",
+ Price = 14441,
+ Long_Desc =
+@"HF 27 STRONG & TOUGH * (*СИЛЬНАЯ & ПРОЧНАЯ) – лимитированная серия швейных машин с усиленной игольной пластиной и измененной конструкционной базой для более интенсивного использования. В комплект к данной модели входит набор игл для работы с тяжелыми материалами (джинс, кожа, драп и т.д.).
+С ней вы сможете шить драп, джинсу, изделия из брезентовых тканей и не волноваться на счет прочности вашего оборудования. Усиленная игольная пластина и надежная конструкция выдержат любые нагрузки.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Техника для дома"]
+ },
+ new Catalog_Entity
+ {
+ Name = "Panasonic NI-M300TVTW 1800Вт",
+ Articul = "0005-0003",
+ Price = 2224,
+ Long_Desc =
+@"Утюг Panasonic NI-M300TVTW - надежный и производительный бытовой прибор. С его помощью вам покорится гора неглаженного белья, а время на утомительную процедуру глажки значительно сократится. Устройство не оставит ни единого шанса даже самой маленькой и незаметной складочке на вашей одежде. Высокая мощность, достигающая 1800 Вт, вместе с паровым ударом, имеющим скорость 80 г/мин, обеспечивают идеальное проглаживание ткани любой фактуры. Подошва с титановым покрытием идеально скользит по любой одежде, даже очень мятой.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Техника для дома"]
+ },
+
+ #endregion
+
+ #region Игры и софт, равлечения
+
+ new Catalog_Entity
+ {
+ Name = "The Last Of Us 2",
+ Articul = "0006-0001",
+ Price = 3161,
+ Long_Desc =
+@"Пять лет спустя...
+
+После смертельно опасного путешествия по охваченной эпидемией Америке Элли и Джоэл осели в Вайоминге.
+
+Обосновавшись в процветающей общине, они обрели желанную стабильность, несмотря на постоянную угрозу нападения зараженных и теряющих смысл жизни выживших.
+
+Но однажды жестокие события разрушают это спокойствие, и Элли снова отправляется в путь, чтобы восстановить справедливость. Идя по следу тех, кто нарушил мир, она сталкивается с тяжелыми физическими и эмоциональными последствиями своих действий.
+
+• Узнайте трогательную историю, бросающую вызов вашим представлениям о добре и зле.
+• Отправляйтесь в путешествие по прекрасному и опасному миру, с прекрасными горами и заросшими лесом руинами.
+• Выживайте в напряженных рукопашных схватках, с плавным перемещением и динамическими средствами маскировки.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Игры и софт, равлечения"]
+ },
+ new Catalog_Entity
+ {
+ Name = "Little Nightmares II PS4 & PS5",
+ Articul = "0006-0002",
+ Price = 2149,
+ Long_Desc =
+@"Вернитесь в мир очаровательных ужасов Little Nightmares II — приключенческой игры с нагнетанием саспенса. Вы играете за мальчика Моно, попавшего в мир, деформированный Передачей от далекой башни.
+
+Вместе с Шестой, девочкой в желтом плаще, ставшей его проводником, Моно пытается раскрыть темные тайны Маяка. В нелегком путешествии Моно и Шестая столкнутся со множеством новых угроз со стороны ужасных жителей этого мира.
+
+Осмелитесь ли вы противостоять этим новым маленьким кошмарам?",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Игры и софт, равлечения"]
+ },
+ new Catalog_Entity
+ {
+ Name = "DARK SOULS™ III - Deluxe Edition",
+ Articul = "0006-0003",
+ Price = 3999,
+ Long_Desc =
+@"Deluxe-издание DARK SOULS™ III включает полную версию игры и сезонный пропуск, дающий доступ к дополнительным картам, боссам, противникам, новому оружию и броне.
+
+DARK SOULS™ III испытает вас на прочность в новой главе саги, определившей лицо жанра.
+
+Соберитесь с духом и погрузитесь во тьму!
+
+• Дополнение 1 — осень 2016 г.
+• Дополнение 2 — начало 2017 г.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Игры и софт, равлечения"]
+ },
+
+ #endregion
+
+ #region Красота и здоровье
+
+ new Catalog_Entity
+ {
+ Name = "Массажное кресло Gess Futuro",
+ Articul = "0007-0001",
+ Price = 156688,
+ Long_Desc =
+@"Массажное кресло с автоматическими и ручными программами массажа, L-образной массажной кареткой и встроенными колонками для прослушивания музыки с телефона подойдет как для дома, так для офиса. Кресло разработано для людей разного роста и комплекции, подставка для ног удлиняется. Стильный дизайн Futuro сделает его украшением любого интерьера. Кресло отвечает всем современным потребностям делового человека, массажные программы настроены на максимальный эффект. За 10-15 минут пребывания в кресле ваш организм расслабится, восстановит силы, такой эффект достигается за счёт комплексного воздействия на группы мышц.
+
+Особенности:
+
+6 автоматических, 5 ручных программ
+L-образная массажная каретка
+Встроенные колонки и возможность подключения через Bluetooth
+Функция сканирования тела.
+Функция Zero-G
+Z-гравитация: Да",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Красота и здоровье"]
+ },
+ new Catalog_Entity
+ {
+ Name = "Помазок для бритья Mondial, пластик, ворс барсука, рукоять",
+ Articul = "0007-0002",
+ Price = 2107,
+ Long_Desc =
+@"Помазок для бритья Mondial M6712 — аксессуар без которого не должно обходится ни одно утреннее бритье. С его помощью мужчина сможет создать пену для бритья при помощи простого мыла и равномерно нанести ее на кожу.
+
+Помазок Mondial M6712 произведен в Италии, его высокое качество и отличные характеристики подтверждаются положительными отзывами пользователей со всего мира. Удостовериться в их правдивости можно на собственном опыте.
+Кисть помазка для бритья Mondial M6712 изготовлена из барсучьего ворса — натурального и экологически чистого материала. Естественная мягкость и упругость делают его идеальным материалом для создания помазка. Барсучий волос отлично задерживает влагу, обеспечивая комфортное нанесение пены без раздражения и дискомфорта.
+
+Материал производства ручки помазка — прочный ABS-пластик с имитацией поверхности серого мрамора. Он не портится от постоянного пребывания в воде, остается всегда идеально красивым. Помазок для бритья Mondial M6712 станет отличным дополнением коллекции бритвенных принадлежностей Mondial. Его можно преподнести в качестве презента или приобрести для собственного использования.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Красота и здоровье"]
+ },
+ new Catalog_Entity
+ {
+ Name = "Мезоштамп Bradex «СИЯНИЕ МОЛОДОСТИ»",
+ Articul = "0007-0003",
+ Price = 618,
+ Long_Desc =
+@"В последние годы все больше и больше салонов красоты практикуют мезотерапию, ведь с ее помощью можно эффективно бороться с возрастными изменениями кожи, растяжками и шрамами, а также с выпадением волос. Благодаря микроотверстиям Ваша кожа значительно увеличивает выработку коллагена, эластина и иных веществ, а также повышает проникновение питательных элементов в структуру кожи, делая ее более эластичной и подтянутой.
+
+Благодаря мезоштампу «СИЯНИЕ МОЛОДОСТИ» Вам не придется проходить курс дорогостоящих процедур в салоне – Вы с легкостью добьетесь идеального эффекта дома. 36 игл 1мм
+
+Преимущества:
+• Иглы выполнены из гипоаллергенного титанового сплава
+• Подходит для воздействия на кожу головы, лица и зоны декольте
+• Может использоваться для обработки небольших чувствительных участков кожи, например, носогубной зоны, а также крыльев носа
+• Высокопрочный титановый сплав обеспечивает долговечность и длительное сохранение заточки игл",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Красота и здоровье"]
+ },
+
+ #endregion
+
+ #region Фото и видео
+
+ new Catalog_Entity
+ {
+ Name = "Видеокамера Canon Legria HF G26",
+ Articul = "0008-0001",
+ Price = 69990,
+ Long_Desc =
+@"Цифровая камера Canon Legria HF G26 подойдёт для любительских и профессиональных съёмок высококачественного видео в формате Full HD. Благодаря простому управлению и наличию авторежима в настройках с её работой смогут разобраться даже начинающие операторы.
+
+БЕЗГРАНИЧНЫЕ ВОЗМОЖНОСТИ ДЛЯ ТВОРЧЕСТВА
+Несмотря на свою компактность, аппарат оснащён рядом полезнейших функций, которые выведут ваше увлечение на новый уровень. Широкоугольный (28,8 мм) зум-объектив способен в 20 раз приближать объект съёмки без потери качества.
+
+КАЧЕСТВО ВСЕГДА
+Высокочувствительные датчики и мощная оптика позволяют проводить видеозапись не в самых благоприятных условиях, например, в вечернее и ночное время. При помощи круглой восьмилепестковой диафрагмы можно получать боке с интересным эффектом.
+
+ТРЯСКА БОЛЬШЕ НЕ ПОМЕХА
+Чтобы снимать видео в движении, теперь нет необходимости запасаться дополнительными гаджетами. Система интеллектуальной стабилизации способна устранять дрожание во время ходьбы или бега, компенсируя возможные искажения по нескольким осям. И даже удалённые объекты будут выглядеть чёткими и резкими за счёт моментальной автофокусировки.
+
+НЕ ОСТАНАВЛИВАЙТЕСЬ
+Беспрерывная съёмка – действительно важное дополнение в Canon Legria HF G26. Теперь запись можно проводить в любых экстремальных условиях благодаря использованию сразу двух карт памяти. Переключение между ними происходит без вашего участия, что позволит не прерывать процесс и в полной мере насладиться творчеством.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Фото и видео"]
+ },
+ new Catalog_Entity
+ {
+ Name = "Nikon D3500 Kit 18-140mm f/3.5-5.6 VR",
+ Articul = "0008-0002",
+ Price = 46990,
+ Long_Desc =
+@"Nikon D3500 Kit 18-140mm f/3.5-5.6 VR — цифровая зеркальная камера для самых эффектных кадров
+24.2 Мп датчик формата DX, быстрый процессор, фирменная система подавления вибраций, оптимизированная система фокусировки, высокая светочувствительность — все это гармонично сочетается в новой камере Никон, позволяя ей делать детализированные фотографии и записывать красочные FullHD видео.
+
+Для творчества в любое время суток
+Фактический диапазон светочувствительности новой камеры — от 100 до 25600 единиц ISO. Такие параметры позволяют аппарату обеспечивать четкость, качество и контрастность кадров при съемке в условиях любого освещения.
+
+Чтобы фиксировать больше с Никон Д3500
+В модели реализована возможность серийной съемки со скоростью 5 кадров в секунду, благодаря которой запечатлеть можно будет буквально каждый важный миг. При этом, даже при высокой скорости сохраняется четкость и детализация каждого снимка.
+
+Для любителей видеосъемки
+С фотоаппаратом Никон в руках можно не ограничиваться только фотосъемкой. Все потому, что модель способна вести видеозапись в формате FullHD с частотой обновления до 60 кадров в секунду. Плавность видеоряда, дополненная широким диапазоном чувствительности ISO, поможет снимать ролики даже ночью или в облачную погоду.
+
+Впечатляющая универсальность D3500
+Фотоаппарат бренда оборудован прочным металлическим байонетным креплением, способным выдержать многочисленные смены объективов. Имея универсальный размер и достаточный набор контактных пар, он позволит применять различную оптику — от телеобъективов до широкоугольных приборов с фиксированным фокусным расстоянием.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Фото и видео"]
+ },
+ new Catalog_Entity
+ {
+ Name = "Зеркальный фотоаппарат Nikon D7500 Body",
+ Articul = "0008-0003",
+ Price = 67990,
+ Long_Desc =
+@"Nikon D7500 Body — компактная камера с удобной системой управления
+Эта модель привносит профессиональные функции в сегмент любительских фотоаппаратов. Техническое оснащение фотокамеры достойно флагманской модели: мощнейший процессор и качественная матрица позволяют получить ошеломительный результат. А обратная подсветка дает возможность вести съемку даже в темноте.
+
+Качественные фото даже в плохом освещении
+Фотокамера порадует пользователя следующими характеристиками.
+
+
+- Процессор Expeed 5.
+- Эквивалент светочувствительности ISO 100 - ISO 51 200.
+- За фокусировку отвечает фазовый детектор Nikon Advanced Multi-CAM 3500 II, доступна 51 точка, включая 15 крестообразных датчиков.
+- Рабочий диапазон автофокусировки от −3 EV до +19 EV.
+- Скорость мультикадровой съемки 8 к/сек.
+- Оптический видоискатель с охватом чуть меньше 100 % поверхности.
+
+Очень достойные характеристики. Встроенные интерфейсы: USB 3.0, HDMI, Wi-Fi и Bluetooth 4.1, а также разъем для пульта ДУ и приемника GPS открывают перед пользователем еще большие возможности. Они раскрываются при дистанционном управлении и высокоскоростной передаче данных.
+
+
+Подобный набор характеристик позволяет работать даже в полной темноте, повышая светочувствительность до ISO 51200. Уникальные кадры в лунном свете станут визитной карточкой владельца этой камеры.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Фото и видео"]
+ },
+
+ #endregion
+
+ #region Авто электроника
+
+ new Catalog_Entity
+ {
+ Name = "Автомобильные чехлы Daewoo Nexia с подголовниками белый",
+ Articul = "0009-0001",
+ Price = 5062,
+ Long_Desc =
+@"В производстве автомобильных чехлов от фирмы Seintex используется экокожа «Аригон», которая изготавливается из 100-процентного хлопка без добавления токсичных компонентов. Материал внешне имитирует фактуру натуральной кожи.
+
+Экокожа прекрасно пропускает воздух и препятствует проникновению влаги. Даже в самые высокие и низкие температуры изделия сохраняют свой товарный вид.
+
+Преимущества чехлов из экокожи:
+
+- Приятный и износостойкий материал. В производстве автомобильных чехлов используется экокожа «Аригон», которая отлично пропускает воздух, отталкивает влагу и приятна на ощупь.
+- Практичность. Экокожа, которую используют для производства автомобильных чехлов, ничем не уступает настоящей коже как по внешним, так и по физическим характеристикам. Материал очень прочный: не рвется, выдерживает механические нагрузки и перепады температур.
+- Презентабельный внешний вид. Чехлы, изготовленные из экокожи, выглядят элегантно и стильно. Благодаря чехлам салон автомобиля приобретает и респектабельный внешний вид.
+- Прочность. Автомобильные чехлы, изготовленные из экокожи, обладают высокой прочностью на разрыв, износостойкостью и выдерживают даже 30-градусные морозы.
+- Экологичность. Делая выбор в пользу чехлов из экокожи, вы бережете планету и выступаете за гуманный подход.
+- Простота в уходе. Для того, чтобы почистить чехлы, достаточно просто протереть их влажной тряпочкой.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Авто электроника"]
+ },
+ new Catalog_Entity
+ {
+ Name = "Канистра AUTOPROFI KAN-100, 20 л",
+ Articul = "0009-0002",
+ Price = 1850,
+ Long_Desc =
+@"Универсальная 20-литровая канистра 'Autoprofi' отличается облегченной конструкцией, выполненной в классическом вертикальном стиле. Канистра оснащена тремя ручками для переноски, а также стандартной горловиной, закрывающейся резьбовой крышкой.
+Канистра изготовлена из штампованной стали с антикоррозийным покрытием, благодаря чему внутренняя поверхность емкости не ржавеет, даже если топливо содержит в себе влагу. С внешней стороны канистра покрыта двумя слоями краски, защищающими как от коррозии, так и механических повреждений.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Авто электроника"]
+ },
+ new Catalog_Entity
+ {
+ Name = "Автомагнитола Pioneer MVH-S120UBG 1DIN 4x50Вт",
+ Articul = "0009-0003",
+ Price = 3467,
+ Long_Desc =
+@"Модель MVH-S120UBG создана специально для цифровой музыки и современных носителей информации. К ней можно подключить смартфон на Android, а также другие устройства через USB порт или дополнительный Aux-вход на фронтальной панели. При этом Вы можете одновременно слушать любимую музыку и заряжать аккумулятор телефона.
+
+Вы также можете настроится на одну из 24 предустановленных FM радиостанций, чтобы получать ещё больше музыкального контента.
+
+Встроенный усилитель MOSFET с выходной мощностью 4х50 Вт позволяет воспроизводить музыку в высоком качестве . Для того, чтобы увеличить мощность, можно воспользоваться RCA выходом на тыловой панели устройства для подключения дополнительного сабвуфера или усилителя.
+Эта модель имеет короткое шасси ( корпус на 41% короче обычного), что существенно упрощает ее установку в автомобиле.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Авто электроника"]
+ },
+
+ #endregion
+
+ #region Аксессуары
+
+ new Catalog_Entity
+ {
+ Name = "Гарнитура Xiaomi Mi Millet Bluetooth Headset mini",
+ Articul = "0010-0001",
+ Price = 950,
+ Long_Desc =
+@"Преимущества и особенности Bluetooth-гарнитура Xiaomi Mi Bluetooth Headset mini:
+
+- Компактное и практичное устройство. Гаджет, состоящий из одной единицы, и включает в себя: наушник, микрофон и пульт управления. Особенность данной модели в том, что, в отличие от обычной беспроводной гарнитуры, вам не нужно будет постоянно искать второй наушник. Вес изделия всего 4,5 гр, а размер не больше обычного наушника. Свободные руки и никаких ограничений в движении.
+- Отлично подойдут для повседневного пользования. Незаменимы во время занятий спортом и активных прогулок. Вы можете вести разговор по телефону, находясь за рулем автомобиля или разговаривать с деловым партнером, не отрываясь от домашних дел.
+- Качественный звук. Широкий диапазон частот (от 20 до 20000 Гц), обеспечивает чистое звучание без помех даже на самой максимальной громкости.
+- Водонепроницаемый корпус. Плохая погода не повод отказываться от хорошего настроения и любимого трека. Вы легко можете носить наушник даже в дождливый и морозный день. Гарнитура устойчиво переносит перепады температур.
+- Стабильное соединение. Сигнал передается по каналу Bluetooth. Быстрая синхронизация, позволяет использовать наушник с любым плеером, смартфоном или планшетом, поддерживающим данную функцию.
+- Сверхчувствительный микрофон. В аксессуаре имеется функция, которая позволяет подавлять внешние шумы. Разговаривая по телефону на оживленной улице или в торговом центре, ваш собеседник не будет слышать посторонние звуки.
+- Долго держит заряд. Производитель гарантирует до трех часов беспрерывной работы гаджета без подзарядки. Для пополнения заряда аккумулятора используется кабель USB, который поставляется в комплекте с аксессуаром.
+- Голосовой помощник. Вы можете использовать голосовые команды, которые еще более упростят эксплуатацию гарнитуры. Остановить трек, перемещаться по меню и отвечать на входящие звонки можно также с помощью кнопки, находящейся на основании устройства. Вы можете делать это прямо на ходу, не вынимая наушник из уха.
+
+Bluetooth-гарнитура Millet Bluetooth Headset mini, это свобода движений, современный стиль и любимая музыка, которая всегда способна зарядить положительными эмоциями и повысить работоспособность.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Аксессуары"]
+ },
+ new Catalog_Entity
+ {
+ Name = "Защитное стекло для Apple iPhone 8 (Full Screen)",
+ Articul = "0010-0002",
+ Price = 350,
+ Long_Desc =
+@"Red Line для iPhone 8 (4.7') Full Screen – защитное стекло, которое покрывает весь экран, включая скосы по бокам.
+
+Стекло для iPhone 8 с закругленными краями не уменьшит чувствительности сенсора, при этом достаточно прочное и устойчиво к появлению царапин.
+
+Наклеить защитное стекло для iPhone 8 легко – все необходимое уже есть в комплекте. Для начала экран протирается влажной салфеткой, затем сухой салфеткой из микрофибры и после этого стекло накладывается на экран.
+
+Края стекла окрашены в цвет корпуса телефона.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Аксессуары"]
+ },
+ new Catalog_Entity
+ {
+ Name = "Протектор Cute Animal Bite для проводов, выдра",
+ Articul = "0010-0003",
+ Price = 618,
+ Long_Desc =
+@"Очаровательная и милая выдра защитит ваш кабель. Она позаботится о наружной части вашей кабели, которая обычно легко ломается при отсоединении. Можно сделать симпатичную комбинацию из разных животных.
+
+Подходит для кабелей для зарядки телефона или аналогичного кабеля.
+
+Особенности:
+- Материал: пластик;
+- Размер элемента: 5 * 1,8 * 1,8 см / 2,0 * 0,7 * 0,7 дюйма;
+- Вес изделия: 17 г / 0,6 унции;
+- Размер упаковки: 5 * 2 * 2 см / 2,0 * 0,8 * 0,8 дюйма;
+- Вес упаковки: 20 г / 0,7 унции.
+
+Комплектация:
+- 1 протектор кабеля.",
+ Awailable = true,
+ InStock = 10,
+ Category = _categories["Аксессуары"]
+ },
+
+ #endregion
+
+ };
+
+ _entities = new Dictionary();
+
+ foreach (var ent in entities)
+ _entities.Add(ent.Articul, ent);
+
+ return _entities;
+ }
+ return _entities;
+ }
+ }
+
+ public static List Images {
+ get {
+ if(_images == null){
+ var images = new List{
+
+ #region Phones
+
+ new Picture
+ {
+ Patch = @"\IMG\Phones&Gadgets\iPhone\12\1.jpg",
+ Entity = _entities["0001-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Phones&Gadgets\iPhone\12\2.jpg",
+ Entity = _entities["0001-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Phones&Gadgets\iPhone\12\3.jpg",
+ Entity = _entities["0001-0001"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Phones&Gadgets\iPhone\XR\1.jpg",
+ Entity = _entities["0001-0005"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Phones&Gadgets\iPhone\XR\2.jpg",
+ Entity = _entities["0001-0005"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Phones&Gadgets\iPhone\XR\3.jpg",
+ Entity = _entities["0001-0005"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Phones&Gadgets\OnePlus\8Pro\1.jpg",
+ Entity = _entities[@"0001-0003"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Phones&Gadgets\OnePlus\8Pro\2.jpg",
+ Entity = _entities[@"0001-0003"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Phones&Gadgets\OnePlus\8Pro\3.jpg",
+ Entity = _entities[@"0001-0003"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Phones&Gadgets\Xiaomi\Mi10T\1.jpg",
+ Entity = _entities[@"0001-0002"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Phones&Gadgets\Xiaomi\Mi10T\2.png",
+ Entity = _entities[@"0001-0002"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Phones&Gadgets\Xiaomi\RedmiNote9\1.jpg",
+ Entity = _entities[@"0001-0004"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Phones&Gadgets\Xiaomi\RedmiNote9\2.jpg",
+ Entity = _entities[@"0001-0004"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Phones&Gadgets\Xiaomi\RedmiNote9\3.jpg",
+ Entity = _entities[@"0001-0004"]
+ },
+ #endregion
+
+ #region TV&Audio
+
+ new Picture
+ {
+ Patch = @"\IMG\TV&Audio\Samsumg\UE5\1.jpg",
+ Entity = _entities["0002-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\TV&Audio\Samsumg\UE5\2.jpg",
+ Entity = _entities["0002-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\TV&Audio\Samsumg\UE5\3.jpg",
+ Entity = _entities["0002-0001"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\TV&Audio\Novex\1.jpg",
+ Entity = _entities["0002-0002"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\TV&Audio\Novex\2.jpg",
+ Entity = _entities["0002-0002"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\TV&Audio\Novex\3.jpg",
+ Entity = _entities["0002-0002"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\TV&Audio\Sony\1.jpg",
+ Entity = _entities[@"0002-0003"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\TV&Audio\Sony\2.jpg",
+ Entity = _entities[@"0002-0003"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\TV&Audio\Sony\3.jpg",
+ Entity = _entities[@"0002-0003"]
+ },
+
+ #endregion
+
+ #region Notebook&Desk
+
+ new Picture
+ {
+ Patch = @"\IMG\Nodebook&Desck\Apple\1.jpg",
+ Entity = _entities["0003-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Nodebook&Desck\Apple\2.jpg",
+ Entity = _entities["0003-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Nodebook&Desck\Apple\3.jpg",
+ Entity = _entities["0003-0001"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\TV&Audio\Microsoft\1.png",
+ Entity = _entities["0003-0002"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\TV&Audio\Microsoft\2.png",
+ Entity = _entities["0003-0002"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\TV&Audio\Microsoft\3.png",
+ Entity = _entities["0003-0002"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\TV&Audio\Xiaomi\1.png",
+ Entity = _entities[@"0003-0003"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\TV&Audio\Xiaomi\2.png",
+ Entity = _entities[@"0003-0003"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\TV&Audio\Xiaomi\3.png",
+ Entity = _entities[@"0003-0003"]
+ },
+
+ #endregion
+
+ #region Kitchen
+
+ new Picture
+ {
+ Patch = @"\IMG\Kitchen\CoffeeMachine\1.jpg",
+ Entity = _entities["0004-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Kitchen\CoffeeMachine\2.jpg",
+ Entity = _entities["0004-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Kitchen\CoffeeMachine\3.jpg",
+ Entity = _entities["0004-0001"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Kitchen\YogurtMaker\1.png",
+ Entity = _entities["0004-0002"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Kitchen\YogurtMaker\2.png",
+ Entity = _entities["0004-0002"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Kitchen\YogurtMaker\3.png",
+ Entity = _entities["0004-0002"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Kitchen\Indesit\1.jpg",
+ Entity = _entities[@"0004-0003"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Kitchen\Indesit\2.jpg",
+ Entity = _entities[@"0004-0003"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Kitchen\Indesit\3.jpg",
+ Entity = _entities[@"0004-0003"]
+ },
+
+ #endregion
+
+ #region Home
+
+ new Picture
+ {
+ Patch = @"\IMG\Home\VacuumCL\1.png",
+ Entity = _entities["0005-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Home\VacuumCL\2.png",
+ Entity = _entities["0005-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Home\VacuumCL\3.png",
+ Entity = _entities["0005-0001"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Home\SewingMachine\1.png",
+ Entity = _entities["0005-0002"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Home\SewingMachine\2.png",
+ Entity = _entities["0005-0002"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Home\Iron\1.png",
+ Entity = _entities[@"0005-0003"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Home\Iron\2.png",
+ Entity = _entities[@"0005-0003"]
+ },
+
+ #endregion
+
+ #region Games&Fun
+
+ new Picture
+ {
+ Patch = @"\IMG\Games&Soft\LOU\cover.jpg",
+ Entity = _entities["0006-0001"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Games&Soft\Nigthmares2\cover.jpg",
+ Entity = _entities["0006-0002"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Games&Soft\DS\cover.jpg",
+ Entity = _entities[@"0006-0003"]
+ },
+
+ #endregion
+
+ #region Beauty&Health
+
+ new Picture
+ {
+ Patch = @"\IMG\Beauty&Health\Massage\1.jpg",
+ Entity = _entities["0007-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Beauty&Health\Massage\2.jpg",
+ Entity = _entities["0007-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Beauty&Health\Massage\3.jpg",
+ Entity = _entities["0007-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Beauty&Health\Massage\4.jpg",
+ Entity = _entities["0007-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Beauty&Health\Massage\5.jpg",
+ Entity = _entities["0007-0001"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Beauty&Health\Pomazok\1.png",
+ Entity = _entities["0007-0002"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Beauty&Health\Pomazok\2.png",
+ Entity = _entities["0007-0002"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Beauty&Health\NewLife\1.jpeg",
+ Entity = _entities[@"0007-0003"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Beauty&Health\NewLife\2.jpeg",
+ Entity = _entities[@"0007-0003"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Beauty&Health\NewLife\3.jpeg",
+ Entity = _entities[@"0007-0003"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Beauty&Health\NewLife\4.jpeg",
+ Entity = _entities[@"0007-0003"]
+ },
+
+ #endregion
+
+ #region Photo&Video
+
+ new Picture
+ {
+ Patch = @"\IMG\Photo&Video\Cannon\Legria\1.png",
+ Entity = _entities["0008-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Photo&Video\Cannon\Legria\2.png",
+ Entity = _entities["0008-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Photo&Video\Cannon\Legria\3.png",
+ Entity = _entities["0008-0001"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Photo&Video\Nicon\D3500\1.jpg",
+ Entity = _entities["0008-0002"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Photo&Video\Nicon\D3500\2.jpg",
+ Entity = _entities["0008-0002"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Photo&Video\Nicon\D3500\3.jpg",
+ Entity = _entities["0008-0002"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Photo&Video\Nicon\D7500\1.png",
+ Entity = _entities["0008-0003"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Photo&Video\Nicon\D7500\2.png",
+ Entity = _entities["0008-0003"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Photo&Video\Nicon\D7500\3.png",
+ Entity = _entities["0008-0003"]
+ },
+
+ #endregion
+
+ #region Auto Electronic
+
+ new Picture
+ {
+ Patch = @"\IMG\Auto\Nexia\1.jpeg",
+ Entity = _entities["0009-0001"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Auto\AUTOPROFI\1.jpg",
+ Entity = _entities["0009-0002"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Auto\Pioneer\1.jpg",
+ Entity = _entities["0009-0003"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Auto\Pioneer\2.jpg",
+ Entity = _entities["0009-0003"]
+ },
+
+ #endregion
+
+ #region Accessories
+
+ new Picture
+ {
+ Patch = @"\IMG\Accessories\Headphones\Xiaomi\1.jpg",
+ Entity = _entities["0010-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Accessories\Headphones\Xiaomi\2.jpg",
+ Entity = _entities["0010-0001"]
+ },
+ new Picture
+ {
+ Patch = @"\IMG\Accessories\Headphones\Xiaomi\3.jpg",
+ Entity = _entities["0010-0001"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Accessories\SaveGlass\1.jpg",
+ Entity = _entities["0010-0002"]
+ },
+
+ new Picture
+ {
+ Patch = @"\IMG\Accessories\Otter\Otter.jpg",
+ Entity = _entities["0010-0003"]
+ },
+
+ #endregion
+
+ };
+
+ _images = new List();
+
+ foreach (var img in images)
+ _images.Add(img);
+
+ return _images;
+ }
+ return _images;
+ }
+ }
+
+ public static Dictionary AttrValuePairs{
+ get{
+ if(_attrValuePairs == null){
+ var _attrValuePairs = new Dictionary();
+
+ #region iPhone 12
+ var values = new Catalog_Value[] {
+ new Catalog_Value{
+ IntegerValue = 64
+ },
+ new Catalog_Value{
+ StringValue = "2G, 3G, LTE"
+ },
+ new Catalog_Value{
+ IntegerValue = 1
+ },
+ new Catalog_Value{
+ StringValue = "6.1`"
+ },
+ new Catalog_Value{
+ StringValue = "2532x1170"
+ },
+ new Catalog_Value{
+ IntegerValue = 12
+ },
+ new Catalog_Value{
+ IntegerValue = 12
+ },
+ new Catalog_Value{
+ StringValue = "Apple A14 Bionic"
+ }
+ };
+
+ var attr = new List {
+ new Catalog_Attribute {
+ Entity = _entities["0001-0001"],
+ AttributeName = "Встроенная память, Гб",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0001"],
+ AttributeName = "Стандарты связи",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0001"],
+ AttributeName = "Количество SIM-карт",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0001"],
+ AttributeName = "Диагональ экрана, дюймов",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0001"],
+ AttributeName = "Разрешение экрана",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0001"],
+ AttributeName = "Разрешение основной камеры, Мп",
+ Value = values[5]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0001"],
+ AttributeName = "Разрешение фронтальной камеры, Мп",
+ Value = values[6]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0001"],
+ AttributeName = "Процессор",
+ Value = values[7]
+ }
+
+
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region iPhone XR
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ IntegerValue = 64
+ },
+ new Catalog_Value{
+ StringValue = "2G, 3G, LTE"
+ },
+ new Catalog_Value{
+ IntegerValue = 1
+ },
+ new Catalog_Value{
+ StringValue = "6.7`"
+ },
+ new Catalog_Value{
+ StringValue = "2532x1170"
+ },
+ new Catalog_Value{
+ IntegerValue = 12
+ },
+ new Catalog_Value{
+ IntegerValue = 12
+ },
+ new Catalog_Value{
+ StringValue = "Apple A14 Bionic"
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0001-0005"],
+ AttributeName = "Встроенная память, Гб",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0005"],
+ AttributeName = "Стандарты связи",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0005"],
+ AttributeName = "Количество SIM-карт",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0005"],
+ AttributeName = "Диагональ экрана, дюймов",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0005"],
+ AttributeName = "Разрешение экрана",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0005"],
+ AttributeName = "Разрешение основной камеры, Мп",
+ Value = values[5]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0005"],
+ AttributeName = "Разрешение фронтальной камеры, Мп",
+ Value = values[6]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0005"],
+ AttributeName = "Процессор",
+ Value = values[7]
+ }
+
+
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region Mi 10 T
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ IntegerValue = 8
+ },
+ new Catalog_Value{
+ IntegerValue = 128
+ },
+ new Catalog_Value{
+ IntegerValue = 1
+ },
+ new Catalog_Value{
+ StringValue = "6.67`"
+ },
+ new Catalog_Value{
+ StringValue = "2400x1080"
+ },
+ new Catalog_Value{
+ IntegerValue = 64
+ },
+ new Catalog_Value{
+ IntegerValue = 20
+ },
+ new Catalog_Value{
+ StringValue = "Qualcomm Snapdragon 865"
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0001-0002"],
+ AttributeName = "Оперативная память, Гб",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0002"],
+ AttributeName = "Встроенная память",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0002"],
+ AttributeName = "Количество SIM-карт",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0002"],
+ AttributeName = "Диагональ экрана, дюймов",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0002"],
+ AttributeName = "Разрешение экрана",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0002"],
+ AttributeName = "Разрешение основной камеры, Мп",
+ Value = values[5]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0002"],
+ AttributeName = "Разрешение фронтальной камеры, Мп",
+ Value = values[6]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0002"],
+ AttributeName = "Процессор",
+ Value = values[7]
+ }
+
+
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region OnePlus 8 Pro
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ IntegerValue = 12
+ },
+ new Catalog_Value{
+ IntegerValue = 256
+ },
+ new Catalog_Value{
+ IntegerValue = 2
+ },
+ new Catalog_Value{
+ StringValue = "6.78`"
+ },
+ new Catalog_Value{
+ StringValue = "3168x1440"
+ },
+ new Catalog_Value{
+ IntegerValue = 48
+ },
+ new Catalog_Value{
+ IntegerValue = 16
+ },
+ new Catalog_Value{
+ StringValue = "Qualcomm Snapdragon 685"
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0001-0003"],
+ AttributeName = "Оперативная память, Гб",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0003"],
+ AttributeName = "Встроенная память",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0003"],
+ AttributeName = "Количество SIM-карт",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0003"],
+ AttributeName = "Диагональ экрана, дюймов",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0003"],
+ AttributeName = "Разрешение экрана",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0003"],
+ AttributeName = "Разрешение основной камеры, Мп",
+ Value = values[5]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0003"],
+ AttributeName = "Разрешение фронтальной камеры, Мп",
+ Value = values[6]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0003"],
+ AttributeName = "Процессор",
+ Value = values[7]
+ }
+
+
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ # region Redmi Note 9
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ IntegerValue = 4
+ },
+ new Catalog_Value{
+ IntegerValue = 128
+ },
+ new Catalog_Value{
+ IntegerValue = 2
+ },
+ new Catalog_Value{
+ StringValue = "6.53`"
+ },
+ new Catalog_Value{
+ StringValue = "2340x1080"
+ },
+ new Catalog_Value{
+ IntegerValue = 48
+ },
+ new Catalog_Value{
+ IntegerValue = 13
+ },
+ new Catalog_Value{
+ StringValue = "MediaTek Helio G85"
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0001-0004"],
+ AttributeName = "Оперативная память, Гб",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0004"],
+ AttributeName = "Встроенная память",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0004"],
+ AttributeName = "Количество SIM-карт",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0004"],
+ AttributeName = "Диагональ экрана, дюймов",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0004"],
+ AttributeName = "Разрешение экрана",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0004"],
+ AttributeName = "Разрешение основной камеры, Мп",
+ Value = values[5]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0004"],
+ AttributeName = "Разрешение фронтальной камеры, Мп",
+ Value = values[6]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0001-0004"],
+ AttributeName = "Процессор",
+ Value = values[7]
+ }
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region Samsung UE50TU7170U
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "50`"
+ },
+ new Catalog_Value{
+ StringValue = "127"
+ },
+ new Catalog_Value{
+ StringValue = "60 Гц"
+ },
+ new Catalog_Value{
+ StringValue = "Тёмно-Серый"
+ },
+ new Catalog_Value{
+ StringValue = "24.9 см"
+ },
+ new Catalog_Value{
+ StringValue = "75.3 см"
+ },
+ new Catalog_Value{
+ StringValue = "111.6 см"
+ },
+ new Catalog_Value{
+ StringValue = "11.6 кг"
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0002-0001"],
+ AttributeName = "Диагональ",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0001"],
+ AttributeName = "Диагональ экрана",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0001"],
+ AttributeName = "Частота обновления",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0001"],
+ AttributeName = "Цвет",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0001"],
+ AttributeName = "Глубина",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0001"],
+ AttributeName = "Высота",
+ Value = values[5]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0001"],
+ AttributeName = "Ширина",
+ Value = values[6]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0001"],
+ AttributeName = "Вес",
+ Value = values[7]
+ }
+
+
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+ #endregion
+
+ #region Novex NWX-24H121WSG
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "24`"
+ },
+ new Catalog_Value{
+ StringValue = "61"
+ },
+ new Catalog_Value{
+ StringValue = "50 Гц"
+ },
+ new Catalog_Value{
+ StringValue = "Королевский-белый"
+ },
+ new Catalog_Value{
+ StringValue = "15.1 см"
+ },
+ new Catalog_Value{
+ StringValue = "36.6 см"
+ },
+ new Catalog_Value{
+ StringValue = "55.2 см"
+ },
+ new Catalog_Value{
+ StringValue = "2.5 кг"
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0002-0002"],
+ AttributeName = "Диагональ",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0002"],
+ AttributeName = "Диагональ экрана",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0002"],
+ AttributeName = "Частота обновления",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0002"],
+ AttributeName = "Цвет",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0002"],
+ AttributeName = "Глубина",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0002"],
+ AttributeName = "Высота",
+ Value = values[5]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0002"],
+ AttributeName = "Ширина",
+ Value = values[6]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0002"],
+ AttributeName = "Вес",
+ Value = values[7]
+ }
+
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region Sony PS-LX310BT
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "В комплекте"
+ },
+ new Catalog_Value{
+ StringValue = "Алмазная"
+ },
+ new Catalog_Value{
+ StringValue = "3.5 г"
+ },
+ new Catalog_Value{
+ StringValue = "Пластик"
+ },
+ new Catalog_Value{
+ StringValue = "Аллюминий"
+ },
+ new Catalog_Value{
+ StringValue = "1.8 Вт"
+ },
+ new Catalog_Value{
+ StringValue = "110*430*370 мм"
+ },
+ new Catalog_Value{
+ StringValue = "3.5 кг"
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0002-0003"],
+ AttributeName = "Звукосниматель",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0003"],
+ AttributeName = "Материал иглы звукоснимателя",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0003"],
+ AttributeName = "Макс. давление иглы",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0003"],
+ AttributeName = "Материал корпуса",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0003"],
+ AttributeName = "Материал диска",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0003"],
+ AttributeName = "Потребляемая мощность",
+ Value = values[5]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0003"],
+ AttributeName = "Габаритные размеры (В*Ш*Г)",
+ Value = values[6]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0002-0003"],
+ AttributeName = "Вес",
+ Value = values[7]
+ }
+
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region Apple MakBook Pro
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "13.3`"
+ },
+ new Catalog_Value{
+ StringValue = "Intel"
+ },
+ new Catalog_Value{
+ IntegerValue = 8
+ },
+ new Catalog_Value{
+ StringValue = "DDR3"
+ },
+ new Catalog_Value{
+ StringValue = "Встроенный"
+ },
+ new Catalog_Value{
+ StringValue = "SSD"
+ },
+ new Catalog_Value{
+ StringValue = "SSD 512Гб"
+ },
+ new Catalog_Value{
+ StringValue = "1.4 кг"
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0003-0001"],
+ AttributeName = "Диагональ экрана",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0001"],
+ AttributeName = "Производитель процессора",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0001"],
+ AttributeName = "Объем оперативной памяти, Гб",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0001"],
+ AttributeName = "Тип оперативной памяти",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0001"],
+ AttributeName = "Графический контроллер",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0001"],
+ AttributeName = "Тип накопителя",
+ Value = values[5]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0001"],
+ AttributeName = "Объем памяти",
+ Value = values[6]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0001"],
+ AttributeName = "Вес",
+ Value = values[7]
+ }
+
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region Microsoft Surface
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "13.5`"
+ },
+ new Catalog_Value{
+ StringValue = "Intel"
+ },
+ new Catalog_Value{
+ IntegerValue = 8
+ },
+ new Catalog_Value{
+ StringValue = "DDR4"
+ },
+ new Catalog_Value{
+ StringValue = "Встроенный"
+ },
+ new Catalog_Value{
+ StringValue = "SSD"
+ },
+ new Catalog_Value{
+ StringValue = "SSD 256Гб"
+ },
+ new Catalog_Value{
+ StringValue = "1.29 кг"
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0003-0002"],
+ AttributeName = "Диагональ экрана",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0002"],
+ AttributeName = "Производитель процессора",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0002"],
+ AttributeName = "Объем оперативной памяти, Гб",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0002"],
+ AttributeName = "Тип оперативной памяти",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0002"],
+ AttributeName = "Графический контроллер",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0002"],
+ AttributeName = "Тип накопителя",
+ Value = values[5]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0002"],
+ AttributeName = "Объем памяти",
+ Value = values[6]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0002"],
+ AttributeName = "Вес",
+ Value = values[7]
+ }
+
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region Xiaomi RedmiBook Air 13.3
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "13.3`"
+ },
+ new Catalog_Value{
+ StringValue = "Intel"
+ },
+ new Catalog_Value{
+ IntegerValue = 16
+ },
+ new Catalog_Value{
+ StringValue = "LPDDR3"
+ },
+ new Catalog_Value{
+ StringValue = "Встроенный"
+ },
+ new Catalog_Value{
+ StringValue = "SSD"
+ },
+ new Catalog_Value{
+ StringValue = "SSD 512Гб"
+ },
+ new Catalog_Value{
+ StringValue = "1.05 кг"
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0003-0003"],
+ AttributeName = "Диагональ экрана",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0003"],
+ AttributeName = "Производитель процессора",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0003"],
+ AttributeName = "Объем оперативной памяти, Гб",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0003"],
+ AttributeName = "Тип оперативной памяти",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0003"],
+ AttributeName = "Графический контроллер",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0003"],
+ AttributeName = "Тип накопителя",
+ Value = values[5]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0003"],
+ AttributeName = "Объем памяти",
+ Value = values[6]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0003-0003"],
+ AttributeName = "Вес",
+ Value = values[7]
+ }
+
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region Кофемашина Melitta Caffeo Avanza
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "эспрессо"
+ },
+ new Catalog_Value{
+ StringValue = "зерновой"
+ },
+ new Catalog_Value{
+ IntegerValue = 1450
+ },
+ new Catalog_Value{
+ StringValue = "1.5"
+ },
+ new Catalog_Value{
+ StringValue = "Да"
+ },
+ new Catalog_Value{
+ StringValue = "Да"
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0004-0001"],
+ AttributeName = "Эспрессо",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0004-0001"],
+ AttributeName = "Тип используемого кофе",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0004-0001"],
+ AttributeName = "Мощность, Вт",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0004-0001"],
+ AttributeName = "Объем, л",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0004-0001"],
+ AttributeName = "Встроенная кофемолка",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0004-0001"],
+ AttributeName = "Противокапельная система",
+ Value = values[5]
+ },
+
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region Йогуртница Redmond RYM-M5401
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ IntegerValue = 50
+ },
+ new Catalog_Value{
+ StringValue = "электронный"
+ },
+ new Catalog_Value{
+ IntegerValue = 8
+ },
+ new Catalog_Value{
+ IntegerValue = 180
+ },
+ new Catalog_Value{
+ StringValue = "Да"
+ },
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0004-0002"],
+ AttributeName = "Мощность, Вт",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0004-0002"],
+ AttributeName = "Таймер",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0004-0002"],
+ AttributeName = "Количество баночек",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0004-0002"],
+ AttributeName = "Объём одной баночки, гр",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0004-0002"],
+ AttributeName = "Автоматическое отключение",
+ Value = values[4]
+ },
+
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region Холодильник Indesit DS 318 B
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "стандартный"
+ },
+ new Catalog_Value{
+ StringValue = "185*60*66.5 см"
+ },
+ new Catalog_Value{
+ StringValue = "ручное"
+ },
+ new Catalog_Value{
+ StringValue = "автомат.(капельное)"
+ },
+ new Catalog_Value{
+ StringValue = "механический"
+ },
+ new Catalog_Value{
+ StringValue = "металл"
+ },
+ new Catalog_Value{
+ StringValue = "лампа накаливания"
+ },
+ new Catalog_Value{
+ StringValue = "223 л"
+ },
+ new Catalog_Value{
+ StringValue = "87 л"
+ }
+
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0004-0003"],
+ AttributeName = "Тип компрессора",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0004-0003"],
+ AttributeName = "Габаритные размеры (В*Ш*Г)",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0004-0003"],
+ AttributeName = "Разм. мороз. камеры",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0004-0003"],
+ AttributeName = "Разм. холод. камеры, гр",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0004-0003"],
+ AttributeName = "Тип управления",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0004-0003"],
+ AttributeName = "Материал двери",
+ Value = values[5]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0004-0003"],
+ AttributeName = "Тип освещения",
+ Value = values[6]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0004-0003"],
+ AttributeName = "Объем холодильной камеры",
+ Value = values[7]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0004-0003"],
+ AttributeName = "Объем морозильной камеры",
+ Value = values[8]
+ }
+
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+ #endregion
+
+ #region Пылесос Thomas Parkett Prestige XT
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "обычный"
+ },
+ new Catalog_Value{
+ StringValue = "сухая, влажная"
+ },
+ new Catalog_Value{
+ StringValue = "сеть"
+ },
+ new Catalog_Value{
+ IntegerValue = 325
+ },
+ new Catalog_Value{
+ StringValue = "аквафильтр"
+ },
+ new Catalog_Value{
+ StringValue = "8.5"
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0005-0001"],
+ AttributeName = "Тип",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0005-0001"],
+ AttributeName = "Тип уборки",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0005-0001"],
+ AttributeName = "Источник питания",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0005-0001"],
+ AttributeName = "Мощность всасывания, Вт",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0005-0001"],
+ AttributeName = "Тип пылесборника",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0005-0001"],
+ AttributeName = "Вес кг.",
+ Value = values[5]
+ },
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region Швейная машина BROTHER HF 27
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "швейная машина"
+ },
+ new Catalog_Value{
+ StringValue = "электромеханический"
+ },
+ new Catalog_Value{
+ IntegerValue = 850
+ },
+ new Catalog_Value{
+ StringValue = "горизонтальный"
+ },
+ new Catalog_Value{
+ StringValue = "есть"
+ },
+ new Catalog_Value{
+ StringValue = "есть"
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0005-0002"],
+ AttributeName = "Тип машины",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0005-0002"],
+ AttributeName = "Подтип",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0005-0002"],
+ AttributeName = @"Скорость шитья, стежков/мин",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0005-0002"],
+ AttributeName = "Челнок",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0005-0002"],
+ AttributeName = "Нитевдеватель",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0005-0002"],
+ AttributeName = "Подсветка",
+ Value = values[5]
+ },
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region Утюг Panasonic NI-M300TVTW 1800Вт
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ IntegerValue = 1800
+ },
+ new Catalog_Value{
+ StringValue = "Нет"
+ },
+ new Catalog_Value{
+ StringValue = "Да"
+ },
+ new Catalog_Value{
+ StringValue = "Да"
+ },
+ new Catalog_Value{
+ StringValue = "Титан"
+ },
+ new Catalog_Value{
+ IntegerValue = 1
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0005-0003"],
+ AttributeName = "Мощность, Вт",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0005-0003"],
+ AttributeName = "Парогенератор",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0005-0003"],
+ AttributeName = @"Паровой удар",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0005-0003"],
+ AttributeName = "Функция разбрызгивания",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0005-0003"],
+ AttributeName = "Материал подошвы",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0005-0003"],
+ AttributeName = "Вес",
+ Value = values[5]
+ },
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region Last Of Us 2
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "PS4"
+ },
+ new Catalog_Value{
+ StringValue = "19.6.2020"
+ },
+ new Catalog_Value{
+ StringValue = "Sony Interactive Entertainment Europe"
+ },
+ new Catalog_Value{
+ StringValue = "Боевики, Приключения"
+ },
+ new Catalog_Value{
+ StringValue = "Английский, Испанский, Итальянский, Немецкий, Польский, Португальский (Португалия), Русский, Турецкий, Французский (Франция), греческий"
+ },
+ new Catalog_Value{
+ StringValue = "Английский, Датский, Испанский, Итальянский, Немецкий, Нидерландский, Норвежский, Польский, Португальский (Португалия), Русский, Турецкий."
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0006-0001"],
+ AttributeName = "Платформа",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0006-0001"],
+ AttributeName = "Выпуск",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0006-0001"],
+ AttributeName = "Издатель",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0006-0001"],
+ AttributeName = "Жанр",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0006-0001"],
+ AttributeName = "Голос",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0006-0001"],
+ AttributeName = "Языки отображения",
+ Value = values[5]
+ }
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region Little Nightmares II
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "PS4"
+ },
+ new Catalog_Value{
+ StringValue = "11.2.2021"
+ },
+ new Catalog_Value{
+ StringValue = "BANDAI NAMCO ENTERTAINMENT EUROPE"
+ },
+ new Catalog_Value{
+ StringValue = "Приключения, Головоломки, Боевики"
+ },
+ new Catalog_Value{
+ StringValue = "Английский, Испанский, Итальянский, Немецкий, Польский, Португальский (Португалия), Русский, Турецкий, Французский (Франция), греческий"
+ },
+ new Catalog_Value{
+ StringValue = "Английский, Датский, Испанский, Итальянский, Немецкий, Нидерландский, Норвежский, Польский, Португальский (Португалия), Русский, Турецкий."
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0006-0002"],
+ AttributeName = "Платформа",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0006-0002"],
+ AttributeName = "Выпуск",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0006-0002"],
+ AttributeName = "Издатель",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0006-0002"],
+ AttributeName = "Жанр",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0006-0002"],
+ AttributeName = "Голос",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0006-0002"],
+ AttributeName = "Языки отображения",
+ Value = values[5]
+ }
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region DARK SOULS™ III
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "PS4"
+ },
+ new Catalog_Value{
+ StringValue = "12.4.2016"
+ },
+ new Catalog_Value{
+ StringValue = "BANDAI NAMCO ENTERTAINMENT EUROPE"
+ },
+ new Catalog_Value{
+ StringValue = "Боевики, Приключения, Ролевые Игры"
+ },
+ new Catalog_Value{
+ StringValue = "Английский"
+ },
+ new Catalog_Value{
+ StringValue = "Английский, Испанский, Итальянский, Немецкий, Польский, Русский, Французский (Франция)."
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0006-0003"],
+ AttributeName = "Платформа",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0006-0003"],
+ AttributeName = "Выпуск",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0006-0003"],
+ AttributeName = "Издатель",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0006-0003"],
+ AttributeName = "Жанр",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0006-0003"],
+ AttributeName = "Голос",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0006-0003"],
+ AttributeName = "Языки отображения",
+ Value = values[5]
+ }
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region Массажное кресло Gess Futuro
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "для офиса, для дома"
+ },
+ new Catalog_Value{
+ StringValue = "воздушно-компрессионный"
+ },
+ new Catalog_Value{
+ StringValue = "ягодицы, бедра, голени, плечи, шея, поясница, спина"
+ },
+ new Catalog_Value{
+ StringValue = "прогрев, сканирование тела"
+ },
+ new Catalog_Value{
+ StringValue = "ширина между роликами, настройка под рост"
+ },
+ new Catalog_Value{
+ IntegerValue = 11
+ }
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0007-0001"],
+ AttributeName = "Назначение кресла",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0007-0001"],
+ AttributeName = "Вид массажа",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0007-0001"],
+ AttributeName = "Зона массажа",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0007-0001"],
+ AttributeName = "Функции",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0007-0001"],
+ AttributeName = "Регулировки",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0007-0001"],
+ AttributeName = "Количество режимов, шт",
+ Value = values[5]
+ },
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region Помазок
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "помазок"
+ },
+ new Catalog_Value{
+ StringValue = "помазок"
+ },
+ new Catalog_Value{
+ StringValue = "серый"
+ },
+ new Catalog_Value{
+ StringValue = "пластик + ворс барсука"
+ },
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0007-0002"],
+ AttributeName = "Тип товара",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0007-0002"],
+ AttributeName = "Комплектация",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0007-0002"],
+ AttributeName = "Цвет",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0007-0002"],
+ AttributeName = "Материал",
+ Value = values[3]
+ },
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+ #endregion
+
+ #region Сияние молодости
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "массажеры"
+ },
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0007-0003"],
+ AttributeName = "Назначение кресла",
+ Value = values[0]
+ },
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+
+ #endregion
+
+ #region Nikon D7500 Body
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "для любителей"
+ },
+ new Catalog_Value{
+ StringValue = "перезаписываемая память (Flash)"
+ },
+ new Catalog_Value{
+ StringValue = "1920x1080"
+ },
+ new Catalog_Value{
+ StringValue = "Нет"
+ },
+ new Catalog_Value{
+ IntegerValue = 20
+ },
+ new Catalog_Value{
+ StringValue = "металл"
+ },
+ new Catalog_Value{
+ StringValue = "Да"
+ },
+ new Catalog_Value{
+ IntegerValue = 3
+ },
+ new Catalog_Value{
+ StringValue = "1080p, 1080i"
+ }
+
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0008-0001"],
+ AttributeName = "Назначение",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0001"],
+ AttributeName = "Вид носителя",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0001"],
+ AttributeName = "Максимальное разрешение съемки",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0001"],
+ AttributeName = "Съемка 3D",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0001"],
+ AttributeName = "Zoom оптический",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0001"],
+ AttributeName = "Ручная фокусировка",
+ Value = values[5]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0001"],
+ AttributeName = "Стабилизатор изображения",
+ Value = values[6]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0001"],
+ AttributeName = "Размер ЖК-экрана, дюймов",
+ Value = values[7]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0001"],
+ AttributeName = "Форматы записи",
+ Value = values[8]
+ }
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+ #endregion
+
+ #region Nikon D3500 Kit 18-140mm
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "для начинающих"
+ },
+ new Catalog_Value{
+ StringValue = "цифровые"
+ },
+ new Catalog_Value{
+ StringValue = "зеркальные"
+ },
+ new Catalog_Value{
+ StringValue = "24.2"
+ },
+ new Catalog_Value{
+ StringValue = "Да"
+ },
+ new Catalog_Value{
+ StringValue = "CMOS"
+ },
+ new Catalog_Value{
+ StringValue = "6000x4000"
+ },
+ new Catalog_Value{
+ StringValue = "kit (в комплекте)"
+ },
+ new Catalog_Value{
+ IntegerValue = 18
+ },
+ new Catalog_Value{
+ IntegerValue = 140
+ },
+ new Catalog_Value{
+ StringValue = "Нет"
+ },
+ new Catalog_Value{
+ StringValue = "Да"
+ },
+ new Catalog_Value{
+ IntegerValue = 3
+ },
+ new Catalog_Value{
+ StringValue = "Да"
+ },
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0008-0002"],
+ AttributeName = "Назначение",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0002"],
+ AttributeName = "Тип камеры",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0002"],
+ AttributeName = "Тип фотоаппарата",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0002"],
+ AttributeName = "Разрешение матрицы, Мпикс",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0002"],
+ AttributeName = "Полнокадровая матрица",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0002"],
+ AttributeName = "Тип матрицы",
+ Value = values[5]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0002"],
+ AttributeName = "Максимальное разрешение",
+ Value = values[6]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0002"],
+ AttributeName = "Наличие объектива",
+ Value = values[7]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0002"],
+ AttributeName = "Минимальное фокусное расстояние, мм",
+ Value = values[8]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0002"],
+ AttributeName = "Максимальное фокусное расстояние, мм",
+ Value = values[9]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0002"],
+ AttributeName = "Оптический стабилизатор объектива",
+ Value = values[10]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0002"],
+ AttributeName = "Ручная настройка выдержки и диафрагмы",
+ Value = values[11]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0002"],
+ AttributeName = "ЖК-экран, дюймов",
+ Value = values[12]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0002"],
+ AttributeName = "Запись видео",
+ Value = values[13]
+ }
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+ #endregion
+
+ #region Nikon D7500 Body
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "для любителей, для начинающих"
+ },
+ new Catalog_Value{
+ StringValue = "цифровые"
+ },
+ new Catalog_Value{
+ StringValue = "зеркальные"
+ },
+ new Catalog_Value{
+ StringValue = "20.9"
+ },
+ new Catalog_Value{
+ StringValue = "Да"
+ },
+ new Catalog_Value{
+ StringValue = "CMOS"
+ },
+ new Catalog_Value{
+ StringValue = "5568 x 3712"
+ },
+ new Catalog_Value{
+ StringValue = "body (без объектива)"
+ },
+ new Catalog_Value{
+ IntegerValue = 18
+ },
+ new Catalog_Value{
+ IntegerValue = 140
+ },
+ new Catalog_Value{
+ StringValue = "Нет"
+ },
+ new Catalog_Value{
+ StringValue = "Да"
+ },
+ new Catalog_Value{
+ StringValue = "3.2"
+ },
+ new Catalog_Value{
+ StringValue = "Да"
+ },
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0008-0003"],
+ AttributeName = "Назначение",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0003"],
+ AttributeName = "Тип камеры",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0003"],
+ AttributeName = "Тип фотоаппарата",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0003"],
+ AttributeName = "Разрешение матрицы, Мпикс",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0003"],
+ AttributeName = "Полнокадровая матрица",
+ Value = values[4]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0003"],
+ AttributeName = "Тип матрицы",
+ Value = values[5]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0003"],
+ AttributeName = "Максимальное разрешение",
+ Value = values[6]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0003"],
+ AttributeName = "Наличие объектива",
+ Value = values[7]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0003"],
+ AttributeName = "Минимальное фокусное расстояние, мм",
+ Value = values[8]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0003"],
+ AttributeName = "Максимальное фокусное расстояние, мм",
+ Value = values[9]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0003"],
+ AttributeName = "Оптический стабилизатор объектива",
+ Value = values[10]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0003"],
+ AttributeName = "Ручная настройка выдержки и диафрагмы",
+ Value = values[11]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0003"],
+ AttributeName = "ЖК-экран, дюймов",
+ Value = values[12]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0008-0003"],
+ AttributeName = "Запись видео",
+ Value = values[13]
+ }
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+ #endregion
+
+ #region Автомобильные чехлы
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "Daewoo"
+ },
+ new Catalog_Value{
+ StringValue = "Nexia"
+ },
+ new Catalog_Value{
+ StringValue = "строчка"
+ },
+ new Catalog_Value{
+ StringValue = "белый"
+ },
+ new Catalog_Value{
+ StringValue = "эко-кожа"
+ },
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0009-0001"],
+ AttributeName = "Марка автомобиля",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0009-0001"],
+ AttributeName = "Модель автомобиля",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0009-0001"],
+ AttributeName = "Рисунок",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0009-0001"],
+ AttributeName = "Цвет",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0009-0001"],
+ AttributeName = "Материал",
+ Value = values[4]
+ },
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+ #endregion
+
+ #region AUTOPROFI KAN-100, 20 л
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "вертикальная"
+ },
+ new Catalog_Value{
+ IntegerValue = 20
+ },
+ new Catalog_Value{
+ StringValue = " сталь с антикоррозийным покрытием"
+ },
+ new Catalog_Value{
+ StringValue = "2.8"
+ },
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0009-0002"],
+ AttributeName = "Тип",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0009-0002"],
+ AttributeName = "Объем, л",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0009-0002"],
+ AttributeName = "Материал",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0009-0002"],
+ AttributeName = "Вес, кг",
+ Value = values[3]
+ },
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+ #endregion
+
+ #region Автомагнитола Pioneer MVH-S120UBG
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "1 din"
+ },
+ new Catalog_Value{
+ StringValue = "4 х 50 Вт"
+ },
+ new Catalog_Value{
+ StringValue = "есть"
+ },
+ new Catalog_Value{
+ StringValue = "отсутствует"
+ },
+ new Catalog_Value{
+ StringValue = "фронтальный"
+ },
+ new Catalog_Value{
+ StringValue = "зеленый"
+ },
+ new Catalog_Value{
+ StringValue = "есть"
+ },
+ new Catalog_Value{
+ StringValue = "есть"
+ },
+ new Catalog_Value{
+ StringValue = "есть"
+ },
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0009-0003"],
+ AttributeName = "Типоразмер",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0009-0003"],
+ AttributeName = "Максимальная мощность,Вт",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0009-0003"],
+ AttributeName = "Съемная панель",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0009-0003"],
+ AttributeName = "Экран",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0009-0003"],
+ AttributeName = "Порт USB",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0009-0003"],
+ AttributeName = "Цвет подсветки",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0009-0003"],
+ AttributeName = "Аудиовход на передней панели",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0009-0003"],
+ AttributeName = "Выход на сабвуфер",
+ Value = values[3]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0009-0003"],
+ AttributeName = "Система RDS",
+ Value = values[3]
+ },
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+ #endregion
+
+ #region Гарнитура Xiaomi Mi Millet Bluetooth Headset
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "4.1"
+ },
+ new Catalog_Value{
+ StringValue = "вставные"
+ },
+ new Catalog_Value{
+ StringValue = "Нет"
+ },
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0010-0001"],
+ AttributeName = "Версия Bluetooth",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0010-0001"],
+ AttributeName = "Тип наушника",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0010-0001"],
+ AttributeName = "Multipoint",
+ Value = values[2]
+ },
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+ #endregion
+
+ #region Защитное стекло для Apple iPhone 8
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "Apple iPhone 8"
+ },
+ new Catalog_Value{
+ StringValue = "черный"
+ },
+ new Catalog_Value{
+ StringValue = "матовая"
+ },
+ new Catalog_Value{
+ StringValue = "есть"
+ },
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0010-0002"],
+ AttributeName = "Совместимость",
+ Value = values[0]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0010-0002"],
+ AttributeName = "Цвет рамки",
+ Value = values[1]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0010-0002"],
+ AttributeName = "Поверхность стекла",
+ Value = values[2]
+ },
+ new Catalog_Attribute {
+ Entity = _entities["0010-0002"],
+ AttributeName = "Full screen",
+ Value = values[3]
+ },
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+ #endregion
+
+ #region Протектор Cute Animal Bite, выдра
+
+ values = new Catalog_Value[] {
+ new Catalog_Value{
+ StringValue = "протектор"
+ },
+ };
+
+ attr = new List{
+ new Catalog_Attribute {
+ Entity = _entities["0010-0003"],
+ AttributeName = "Тип товара",
+ Value = values[0]
+ },
+ };
+
+ for (int i = 0; i < attr.Count; i++)
+ _attrValuePairs.Add(attr[i], values[i]);
+
+ #endregion
+
+ return _attrValuePairs;
+ }
+ return _attrValuePairs;
+ }
+ }
+ }
+}
diff --git a/nVideo/DATA/Interfaces/IAllCatalog.cs b/nVideo/DATA/Interfaces/IAllCatalog.cs
new file mode 100644
index 0000000..e3c15c1
--- /dev/null
+++ b/nVideo/DATA/Interfaces/IAllCatalog.cs
@@ -0,0 +1,21 @@
+using nVideo.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace nVideo.DATA.Interfaces
+{
+ public interface IAllCatalog
+ {
+ public IEnumerable GetAllEntnty { get; }
+ public IEnumerable GetCarouselItems { get; }
+ public IEnumerable GetFeaturedItems { get; }
+ public IEnumerable GetNewItems { get; }
+ public Catalog_Entity GetRandomItem { get; }
+
+ public IEnumerable GetCategoryMembers(string category);
+ public Catalog_Entity GetItemById(int? id);
+
+ }
+}
diff --git a/nVideo/DATA/Repository/CatalogRepository.cs b/nVideo/DATA/Repository/CatalogRepository.cs
new file mode 100644
index 0000000..ff58756
--- /dev/null
+++ b/nVideo/DATA/Repository/CatalogRepository.cs
@@ -0,0 +1,81 @@
+using Microsoft.EntityFrameworkCore;
+using nVideo.DATA.Interfaces;
+using nVideo.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace nVideo.DATA.Repository
+{
+ public class CatalogRepository : IAllCatalog
+ {
+ private readonly AppDBContext _context;
+
+ private static IQueryable _entities;
+ public IQueryable Entities {
+ get {
+ if (_entities == _entities) {
+ _entities = _context.Entities
+ .Include(e => e.Images);
+ }
+ return _entities;
+ }
+ }
+
+ public CatalogRepository(AppDBContext context) {
+ _context = context;
+ }
+
+ public IEnumerable GetCarouselItems {
+ get {
+ return GetFeaturedItems;
+ }
+ }
+
+ public IEnumerable GetFeaturedItems{
+ get{
+ return Entities.OrderByDescending(e => e.Raiting)
+ .Take(3);
+ }
+ }
+
+ public IEnumerable GetNewItems{
+ get{
+ return Entities.OrderByDescending(e => e.InStock)
+ .Take(8);
+ }
+ }
+
+ public Catalog_Entity GetRandomItem{
+ get{
+ var rnd = new Random(DateTime.Now.Millisecond);
+ return Entities.ToArray()[rnd.Next(0, Entities.Count())];
+ }
+ }
+
+ public IEnumerable GetCategoryMembers(string category) {
+ return Entities.Include(e => e.Category)
+ .Where(e => e.Category.CategoryName.Equals(category));
+ }
+
+ public Catalog_Entity GetItemById(int? id){
+ if (id.HasValue){
+ IQueryable target;
+
+ return (target = Entities.Where(e => e.Id.Equals(id)))
+ .Count() == 0
+ ? throw new ArgumentException("Id is not exit")
+ : target.Include(t => t.Attributes)
+ .ThenInclude(t => t.Value)
+ .First();
+ }
+ throw new ArgumentNullException("Missing parameter: int id");
+ }
+
+
+ public IEnumerable GetAllEntnty =>
+ Entities.Include(e => e.Attributes)
+ .ThenInclude(e => e.Value);
+ }
+}
diff --git a/nVideo/DATA/RoleInitilyzer.cs b/nVideo/DATA/RoleInitilyzer.cs
new file mode 100644
index 0000000..1727001
--- /dev/null
+++ b/nVideo/DATA/RoleInitilyzer.cs
@@ -0,0 +1,36 @@
+using Microsoft.AspNetCore.Identity;
+using nVideo.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace nVideo.DATA
+{
+ public static class RoleInitializer
+ {
+ public static async Task InitializeAsync(UserManager userManager, RoleManager roleManager)
+ {
+ string adminEmail = "admin@admin.admin";
+ string password = "_Aa123456";
+ if (await roleManager.FindByNameAsync("admin") == null)
+ {
+ await roleManager.CreateAsync(new IdentityRole("admin"));
+ }
+ if (await roleManager.FindByNameAsync("user") == null)
+ {
+ await roleManager.CreateAsync(new IdentityRole("user"));
+ }
+ if (await userManager.FindByNameAsync(adminEmail) == null)
+ {
+ User admin = new User { Email = adminEmail, UserName = adminEmail };
+ IdentityResult result = await userManager.CreateAsync(admin, password);
+ if (result.Succeeded)
+ {
+ await userManager.AddToRoleAsync(admin, "admin");
+ }
+ }
+ }
+
+ }
+}
diff --git a/nVideo/DATA/ViewModels/CatalogViewModel.cs b/nVideo/DATA/ViewModels/CatalogViewModel.cs
new file mode 100644
index 0000000..871c668
--- /dev/null
+++ b/nVideo/DATA/ViewModels/CatalogViewModel.cs
@@ -0,0 +1,14 @@
+using nVideo.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace nVideo.DATA.ViewModels
+{
+ public class CatalogViewModel
+ {
+ public IEnumerable Entities { get; set; }
+
+ }
+}
diff --git a/nVideo/DATA/ViewModels/HomeViewModel.cs b/nVideo/DATA/ViewModels/HomeViewModel.cs
new file mode 100644
index 0000000..a0b77fc
--- /dev/null
+++ b/nVideo/DATA/ViewModels/HomeViewModel.cs
@@ -0,0 +1,20 @@
+using nVideo.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace nVideo.DATA.ViewModels
+{
+ public class HomeViewModel
+ {
+ // 3 items wich spec picture
+ public IEnumerable ForCarousel { get; set; }
+ //8 items
+ public IEnumerable ForNewProductsBlock { get; set; }
+ //3 items
+ public IEnumerable ForThumbnailBlock { get; set; }
+ //3 items by raiting
+ public IEnumerable ForFeaturedBlock { get; set; }
+ }
+}
diff --git a/nVideo/Migrations/20210223192006_INIT.Designer.cs b/nVideo/Migrations/20210223192006_INIT.Designer.cs
new file mode 100644
index 0000000..cade144
--- /dev/null
+++ b/nVideo/Migrations/20210223192006_INIT.Designer.cs
@@ -0,0 +1,464 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using nVideo.DATA;
+
+namespace nVideo.Migrations
+{
+ [DbContext(typeof(AppDBContext))]
+ [Migration("20210223192006_INIT")]
+ partial class INIT
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "3.1.3")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128)
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("NormalizedName")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.HasKey("Id");
+
+ b.HasIndex("NormalizedName")
+ .IsUnique()
+ .HasName("RoleNameIndex")
+ .HasFilter("[NormalizedName] IS NOT NULL");
+
+ b.ToTable("AspNetRoles");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("ClaimType")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ClaimValue")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RoleId")
+ .IsRequired()
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("AspNetRoleClaims");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("ClaimType")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ClaimValue")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UserId")
+ .IsRequired()
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("AspNetUserClaims");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b =>
+ {
+ b.Property("LoginProvider")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("ProviderKey")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("ProviderDisplayName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UserId")
+ .IsRequired()
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("LoginProvider", "ProviderKey");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("AspNetUserLogins");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("RoleId")
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("UserId", "RoleId");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("AspNetUserRoles");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("LoginProvider")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("Value")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("UserId", "LoginProvider", "Name");
+
+ b.ToTable("AspNetUserTokens");
+ });
+
+ modelBuilder.Entity("nVideo.Models.Catalog_Attribute", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("AttributeName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("EntityId")
+ .HasColumnType("int");
+
+ b.Property("ValueId")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EntityId");
+
+ b.ToTable("Catalog_Attribute");
+ });
+
+ modelBuilder.Entity("nVideo.Models.Catalog_Category", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("CategoryName")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Catalog_Category");
+ });
+
+ modelBuilder.Entity("nVideo.Models.Catalog_Entity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("Articul")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Awailable")
+ .HasColumnType("bit");
+
+ b.Property("CategoryId")
+ .HasColumnType("int");
+
+ b.Property("InStock")
+ .HasColumnType("int");
+
+ b.Property("Long_Desc")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Price")
+ .HasColumnType("bigint");
+
+ b.Property("Raiting")
+ .HasColumnType("tinyint");
+
+ b.Property("Short_Desc")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CategoryId");
+
+ b.ToTable("Catalog_Entity");
+ });
+
+ modelBuilder.Entity("nVideo.Models.Catalog_Value", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("Catalog_Attribute")
+ .HasColumnType("int");
+
+ b.Property("IntegerValue")
+ .HasColumnType("int");
+
+ b.Property("StringValue")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Catalog_Attribute")
+ .IsUnique()
+ .HasFilter("[Catalog_Attribute] IS NOT NULL");
+
+ b.ToTable("Catalog_Value");
+ });
+
+ modelBuilder.Entity("nVideo.Models.Comment", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("Content")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("EntityId")
+ .HasColumnType("int");
+
+ b.Property("UserId")
+ .HasColumnType("int");
+
+ b.Property("UserId1")
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EntityId");
+
+ b.HasIndex("UserId1");
+
+ b.ToTable("Comment");
+ });
+
+ modelBuilder.Entity("nVideo.Models.Image", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("Catalog_EntityId")
+ .HasColumnType("int");
+
+ b.Property("Patch")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Catalog_EntityId");
+
+ b.ToTable("Image");
+ });
+
+ modelBuilder.Entity("nVideo.Models.User", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("AccessFailedCount")
+ .HasColumnType("int");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Email")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("EmailConfirmed")
+ .HasColumnType("bit");
+
+ b.Property("LockoutEnabled")
+ .HasColumnType("bit");
+
+ b.Property("LockoutEnd")
+ .HasColumnType("datetimeoffset");
+
+ b.Property("NormalizedEmail")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("NormalizedUserName")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("PasswordHash")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("PhoneNumber")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("PhoneNumberConfirmed")
+ .HasColumnType("bit");
+
+ b.Property("SecurityStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TwoFactorEnabled")
+ .HasColumnType("bit");
+
+ b.Property("UserName")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.HasKey("Id");
+
+ b.HasIndex("NormalizedEmail")
+ .HasName("EmailIndex");
+
+ b.HasIndex("NormalizedUserName")
+ .IsUnique()
+ .HasName("UserNameIndex")
+ .HasFilter("[NormalizedUserName] IS NOT NULL");
+
+ b.ToTable("AspNetUsers");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b =>
+ {
+ b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
+ .WithMany()
+ .HasForeignKey("RoleId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b =>
+ {
+ b.HasOne("nVideo.Models.User", null)
+ .WithMany()
+ .HasForeignKey("UserId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b =>
+ {
+ b.HasOne("nVideo.Models.User", null)
+ .WithMany()
+ .HasForeignKey("UserId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b =>
+ {
+ b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
+ .WithMany()
+ .HasForeignKey("RoleId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("nVideo.Models.User", null)
+ .WithMany()
+ .HasForeignKey("UserId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b =>
+ {
+ b.HasOne("nVideo.Models.User", null)
+ .WithMany()
+ .HasForeignKey("UserId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("nVideo.Models.Catalog_Attribute", b =>
+ {
+ b.HasOne("nVideo.Models.Catalog_Entity", "Entity")
+ .WithMany("Attributes")
+ .HasForeignKey("EntityId");
+ });
+
+ modelBuilder.Entity("nVideo.Models.Catalog_Entity", b =>
+ {
+ b.HasOne("nVideo.Models.Catalog_Category", "Category")
+ .WithMany("Entities")
+ .HasForeignKey("CategoryId");
+ });
+
+ modelBuilder.Entity("nVideo.Models.Catalog_Value", b =>
+ {
+ b.HasOne("nVideo.Models.Catalog_Attribute", "Attribute")
+ .WithOne("Value")
+ .HasForeignKey("nVideo.Models.Catalog_Value", "Catalog_Attribute");
+ });
+
+ modelBuilder.Entity("nVideo.Models.Comment", b =>
+ {
+ b.HasOne("nVideo.Models.Catalog_Entity", "Entity")
+ .WithMany("Comments")
+ .HasForeignKey("EntityId");
+
+ b.HasOne("nVideo.Models.User", "User")
+ .WithMany("Comments")
+ .HasForeignKey("UserId1");
+ });
+
+ modelBuilder.Entity("nVideo.Models.Image", b =>
+ {
+ b.HasOne("nVideo.Models.Catalog_Entity", "Entity")
+ .WithMany("Images")
+ .HasForeignKey("Catalog_EntityId");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/nVideo/Migrations/20210223192006_INIT.cs b/nVideo/Migrations/20210223192006_INIT.cs
new file mode 100644
index 0000000..31718b4
--- /dev/null
+++ b/nVideo/Migrations/20210223192006_INIT.cs
@@ -0,0 +1,399 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace nVideo.Migrations
+{
+ public partial class INIT : Migration
+ {
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.CreateTable(
+ name: "AspNetRoles",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false),
+ Name = table.Column(maxLength: 256, nullable: true),
+ NormalizedName = table.Column(maxLength: 256, nullable: true),
+ ConcurrencyStamp = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_AspNetRoles", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "AspNetUsers",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false),
+ UserName = table.Column(maxLength: 256, nullable: true),
+ NormalizedUserName = table.Column(maxLength: 256, nullable: true),
+ Email = table.Column(maxLength: 256, nullable: true),
+ NormalizedEmail = table.Column(maxLength: 256, nullable: true),
+ EmailConfirmed = table.Column(nullable: false),
+ PasswordHash = table.Column(nullable: true),
+ SecurityStamp = table.Column(nullable: true),
+ ConcurrencyStamp = table.Column(nullable: true),
+ PhoneNumber = table.Column(nullable: true),
+ PhoneNumberConfirmed = table.Column(nullable: false),
+ TwoFactorEnabled = table.Column(nullable: false),
+ LockoutEnd = table.Column(nullable: true),
+ LockoutEnabled = table.Column(nullable: false),
+ AccessFailedCount = table.Column(nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_AspNetUsers", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Catalog_Category",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ CategoryName = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Catalog_Category", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "AspNetRoleClaims",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ RoleId = table.Column(nullable: false),
+ ClaimType = table.Column(nullable: true),
+ ClaimValue = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_AspNetRoleClaims", x => x.Id);
+ table.ForeignKey(
+ name: "FK_AspNetRoleClaims_AspNetRoles_RoleId",
+ column: x => x.RoleId,
+ principalTable: "AspNetRoles",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "AspNetUserClaims",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ UserId = table.Column(nullable: false),
+ ClaimType = table.Column(nullable: true),
+ ClaimValue = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_AspNetUserClaims", x => x.Id);
+ table.ForeignKey(
+ name: "FK_AspNetUserClaims_AspNetUsers_UserId",
+ column: x => x.UserId,
+ principalTable: "AspNetUsers",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "AspNetUserLogins",
+ columns: table => new
+ {
+ LoginProvider = table.Column(nullable: false),
+ ProviderKey = table.Column(nullable: false),
+ ProviderDisplayName = table.Column(nullable: true),
+ UserId = table.Column(nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_AspNetUserLogins", x => new { x.LoginProvider, x.ProviderKey });
+ table.ForeignKey(
+ name: "FK_AspNetUserLogins_AspNetUsers_UserId",
+ column: x => x.UserId,
+ principalTable: "AspNetUsers",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "AspNetUserRoles",
+ columns: table => new
+ {
+ UserId = table.Column(nullable: false),
+ RoleId = table.Column(nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_AspNetUserRoles", x => new { x.UserId, x.RoleId });
+ table.ForeignKey(
+ name: "FK_AspNetUserRoles_AspNetRoles_RoleId",
+ column: x => x.RoleId,
+ principalTable: "AspNetRoles",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_AspNetUserRoles_AspNetUsers_UserId",
+ column: x => x.UserId,
+ principalTable: "AspNetUsers",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "AspNetUserTokens",
+ columns: table => new
+ {
+ UserId = table.Column(nullable: false),
+ LoginProvider = table.Column(nullable: false),
+ Name = table.Column(nullable: false),
+ Value = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_AspNetUserTokens", x => new { x.UserId, x.LoginProvider, x.Name });
+ table.ForeignKey(
+ name: "FK_AspNetUserTokens_AspNetUsers_UserId",
+ column: x => x.UserId,
+ principalTable: "AspNetUsers",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Catalog_Entity",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ Name = table.Column(nullable: true),
+ Articul = table.Column(nullable: true),
+ Price = table.Column(nullable: false),
+ Short_Desc = table.Column(nullable: true),
+ Long_Desc = table.Column(nullable: true),
+ Raiting = table.Column(nullable: false),
+ Awailable = table.Column(nullable: false),
+ InStock = table.Column(nullable: false),
+ CategoryId = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Catalog_Entity", x => x.Id);
+ table.ForeignKey(
+ name: "FK_Catalog_Entity_Catalog_Category_CategoryId",
+ column: x => x.CategoryId,
+ principalTable: "Catalog_Category",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Restrict);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Catalog_Attribute",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ AttributeName = table.Column(nullable: true),
+ EntityId = table.Column(nullable: true),
+ ValueId = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Catalog_Attribute", x => x.Id);
+ table.ForeignKey(
+ name: "FK_Catalog_Attribute_Catalog_Entity_EntityId",
+ column: x => x.EntityId,
+ principalTable: "Catalog_Entity",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Restrict);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Comment",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ Content = table.Column(nullable: true),
+ UserId = table.Column(nullable: true),
+ UserId1 = table.Column(nullable: true),
+ EntityId = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Comment", x => x.Id);
+ table.ForeignKey(
+ name: "FK_Comment_Catalog_Entity_EntityId",
+ column: x => x.EntityId,
+ principalTable: "Catalog_Entity",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Restrict);
+ table.ForeignKey(
+ name: "FK_Comment_AspNetUsers_UserId1",
+ column: x => x.UserId1,
+ principalTable: "AspNetUsers",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Restrict);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Image",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ Patch = table.Column(nullable: true),
+ Catalog_EntityId = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Image", x => x.Id);
+ table.ForeignKey(
+ name: "FK_Image_Catalog_Entity_Catalog_EntityId",
+ column: x => x.Catalog_EntityId,
+ principalTable: "Catalog_Entity",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Restrict);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Catalog_Value",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ IntegerValue = table.Column(nullable: true),
+ StringValue = table.Column(nullable: true),
+ Catalog_Attribute = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Catalog_Value", x => x.Id);
+ table.ForeignKey(
+ name: "FK_Catalog_Value_Catalog_Attribute_Catalog_Attribute",
+ column: x => x.Catalog_Attribute,
+ principalTable: "Catalog_Attribute",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Restrict);
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_AspNetRoleClaims_RoleId",
+ table: "AspNetRoleClaims",
+ column: "RoleId");
+
+ migrationBuilder.CreateIndex(
+ name: "RoleNameIndex",
+ table: "AspNetRoles",
+ column: "NormalizedName",
+ unique: true,
+ filter: "[NormalizedName] IS NOT NULL");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_AspNetUserClaims_UserId",
+ table: "AspNetUserClaims",
+ column: "UserId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_AspNetUserLogins_UserId",
+ table: "AspNetUserLogins",
+ column: "UserId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_AspNetUserRoles_RoleId",
+ table: "AspNetUserRoles",
+ column: "RoleId");
+
+ migrationBuilder.CreateIndex(
+ name: "EmailIndex",
+ table: "AspNetUsers",
+ column: "NormalizedEmail");
+
+ migrationBuilder.CreateIndex(
+ name: "UserNameIndex",
+ table: "AspNetUsers",
+ column: "NormalizedUserName",
+ unique: true,
+ filter: "[NormalizedUserName] IS NOT NULL");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Catalog_Attribute_EntityId",
+ table: "Catalog_Attribute",
+ column: "EntityId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Catalog_Entity_CategoryId",
+ table: "Catalog_Entity",
+ column: "CategoryId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Catalog_Value_Catalog_Attribute",
+ table: "Catalog_Value",
+ column: "Catalog_Attribute",
+ unique: true,
+ filter: "[Catalog_Attribute] IS NOT NULL");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Comment_EntityId",
+ table: "Comment",
+ column: "EntityId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Comment_UserId1",
+ table: "Comment",
+ column: "UserId1");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Image_Catalog_EntityId",
+ table: "Image",
+ column: "Catalog_EntityId");
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "AspNetRoleClaims");
+
+ migrationBuilder.DropTable(
+ name: "AspNetUserClaims");
+
+ migrationBuilder.DropTable(
+ name: "AspNetUserLogins");
+
+ migrationBuilder.DropTable(
+ name: "AspNetUserRoles");
+
+ migrationBuilder.DropTable(
+ name: "AspNetUserTokens");
+
+ migrationBuilder.DropTable(
+ name: "Catalog_Value");
+
+ migrationBuilder.DropTable(
+ name: "Comment");
+
+ migrationBuilder.DropTable(
+ name: "Image");
+
+ migrationBuilder.DropTable(
+ name: "AspNetRoles");
+
+ migrationBuilder.DropTable(
+ name: "Catalog_Attribute");
+
+ migrationBuilder.DropTable(
+ name: "AspNetUsers");
+
+ migrationBuilder.DropTable(
+ name: "Catalog_Entity");
+
+ migrationBuilder.DropTable(
+ name: "Catalog_Category");
+ }
+ }
+}
diff --git a/nVideo/Migrations/20210225151504_FixPicture.Designer.cs b/nVideo/Migrations/20210225151504_FixPicture.Designer.cs
new file mode 100644
index 0000000..8b7b031
--- /dev/null
+++ b/nVideo/Migrations/20210225151504_FixPicture.Designer.cs
@@ -0,0 +1,464 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using nVideo.DATA;
+
+namespace nVideo.Migrations
+{
+ [DbContext(typeof(AppDBContext))]
+ [Migration("20210225151504_FixPicture")]
+ partial class FixPicture
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "3.1.3")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128)
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("NormalizedName")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.HasKey("Id");
+
+ b.HasIndex("NormalizedName")
+ .IsUnique()
+ .HasName("RoleNameIndex")
+ .HasFilter("[NormalizedName] IS NOT NULL");
+
+ b.ToTable("AspNetRoles");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("ClaimType")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ClaimValue")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RoleId")
+ .IsRequired()
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("AspNetRoleClaims");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("ClaimType")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ClaimValue")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UserId")
+ .IsRequired()
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("AspNetUserClaims");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b =>
+ {
+ b.Property("LoginProvider")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("ProviderKey")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("ProviderDisplayName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("UserId")
+ .IsRequired()
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("LoginProvider", "ProviderKey");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("AspNetUserLogins");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("RoleId")
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("UserId", "RoleId");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("AspNetUserRoles");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("LoginProvider")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("Value")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("UserId", "LoginProvider", "Name");
+
+ b.ToTable("AspNetUserTokens");
+ });
+
+ modelBuilder.Entity("nVideo.Models.Catalog_Attribute", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("AttributeName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("EntityId")
+ .HasColumnType("int");
+
+ b.Property