/
daniilsavchenko
/
StockFlow
Обзор
Документация
Войти
/
daniilsavchenko
/
StockFlow
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Data/DbInitializer.cs
228 строк
9 KB
StockFlow Student
Finalize StockFlow project
24 май 2026, 18:40
24 май 2026, 18:40
e787c84
Код
Авторство
О чём код?
using Microsoft.EntityFrameworkCore; using StockFlow.Models; namespace StockFlow.Data { public static class DbInitializer { public static async Task SeedAsync(AppDbContext context) { var legacySupplierNames = new[] { "ООО ТехноСнаб", "ИП Волга Поставка", "СкладКомплект" }; var legacyProductNames = new[] { "Ноутбук Lenovo IdeaPad", "Мышь Logitech M185", "Клавиатура Redragon", "Монитор Samsung 24\"", "USB-накопитель 64GB", "Кабель HDMI 2м" }; var legacyProducts = await context.Products .Where(p => legacyProductNames.Contains(p.Name)) .ToListAsync(); if (legacyProducts.Count > 0) { context.Products.RemoveRange(legacyProducts); } var legacySuppliers = await context.Suppliers .Where(s => legacySupplierNames.Contains(s.Name)) .ToListAsync(); if (legacySuppliers.Count > 0) { context.Suppliers.RemoveRange(legacySuppliers); } await context.SaveChangesAsync(); var demoCategories = new List<ProductCategory> { new() { Name = "Тормозная система", Description = "Колодки, диски и другие элементы тормозной системы" }, new() { Name = "Подвеска", Description = "Амортизаторы, опоры и элементы ходовой части" }, new() { Name = "Фильтры", Description = "Расходные фильтрующие элементы" }, new() { Name = "Электрика и зажигание", Description = "Свечи, датчики и электрические компоненты" }, new() { Name = "Двигатель", Description = "Детали и расходные материалы двигателя" }, new() { Name = "Ступичные узлы", Description = "Подшипники и элементы ступиц" } }; foreach (var category in demoCategories) { var exists = await context.ProductCategories.AnyAsync(c => c.Name == category.Name); if (!exists) { await context.ProductCategories.AddAsync(category); } } var demoUnits = new List<UnitOfMeasure> { new() { Name = "Штука", ShortName = "шт." }, new() { Name = "Комплект", ShortName = "компл." } }; foreach (var unit in demoUnits) { var exists = await context.UnitsOfMeasure.AnyAsync(u => u.ShortName == unit.ShortName); if (!exists) { await context.UnitsOfMeasure.AddAsync(unit); } } await context.SaveChangesAsync(); var demoSuppliers = new List<Supplier> { new() { Name = "ООО АвтоДеталь Плюс", ContactPerson = "Андрей Ковалев", Phone = "+7 (927) 310-45-60", Email = "sales@autodetal-plus.ru" }, new() { Name = "Тольятти АвтоСнаб", ContactPerson = "Елена Морозова", Phone = "+7 (927) 411-22-33", Email = "opt@tlt-autosnab.ru" }, new() { Name = "РегионМоторс", ContactPerson = "Сергей Лапин", Phone = "+7 (927) 588-77-90", Email = "zakaz@regionmotors.ru" } }; foreach (var supplier in demoSuppliers) { var exists = await context.Suppliers.AnyAsync(s => s.Name == supplier.Name); if (!exists) { await context.Suppliers.AddAsync(supplier); } } await context.SaveChangesAsync(); var suppliersByName = await context.Suppliers .ToDictionaryAsync(s => s.Name, s => s.Id); var categoriesByName = await context.ProductCategories .ToDictionaryAsync(c => c.Name, c => c.Id); var unitsByShortName = await context.UnitsOfMeasure .ToDictionaryAsync(u => u.ShortName, u => u.Id); var demoProducts = new List<Product> { new() { Name = "Тормозные колодки передние LADA Vesta", Description = "Комплект передних тормозных колодок для LADA Vesta и XRAY", CategoryId = categoriesByName["Тормозная система"], UnitOfMeasureId = unitsByShortName["компл."], Quantity = 24, Price = 2890m, SupplierId = suppliersByName["ООО АвтоДеталь Плюс"] }, new() { Name = "Амортизатор задний KYB Excel-G", Description = "Газомасляный амортизатор для Renault Logan и Lada Largus", CategoryId = categoriesByName["Подвеска"], UnitOfMeasureId = unitsByShortName["шт."], Quantity = 6, Price = 3850m, SupplierId = suppliersByName["ООО АвтоДеталь Плюс"] }, new() { Name = "Масляный фильтр Hyundai/Kia 26300-35505", Description = "Фильтр для двигателей Hyundai Solaris и Kia Rio", CategoryId = categoriesByName["Фильтры"], UnitOfMeasureId = unitsByShortName["шт."], Quantity = 9, Price = 420m, SupplierId = suppliersByName["Тольятти АвтоСнаб"] }, new() { Name = "Свеча зажигания NGK BKR6E", Description = "Свеча зажигания для популярных бензиновых двигателей легковых автомобилей", CategoryId = categoriesByName["Электрика и зажигание"], UnitOfMeasureId = unitsByShortName["шт."], Quantity = 40, Price = 310m, SupplierId = suppliersByName["Тольятти АвтоСнаб"] }, new() { Name = "Ремень ГРМ Gates 5539XS", Description = "Ремень ГРМ для двигателей ВАЗ 16-клапанной линейки", CategoryId = categoriesByName["Двигатель"], UnitOfMeasureId = unitsByShortName["шт."], Quantity = 3, Price = 1790m, SupplierId = suppliersByName["РегионМоторс"] }, new() { Name = "Ступичный подшипник SKF VKBA 3455", Description = "Подшипник передней ступицы для Ford Focus II", CategoryId = categoriesByName["Ступичные узлы"], UnitOfMeasureId = unitsByShortName["шт."], Quantity = 0, Price = 2650m, SupplierId = suppliersByName["РегионМоторс"] } }; foreach (var product in demoProducts) { var existingProduct = await context.Products .Include(p => p.Stock) .Include(p => p.CurrentPrice) .FirstOrDefaultAsync(p => p.Name == product.Name); if (existingProduct == null) { await context.Products.AddAsync(product); continue; } if (string.IsNullOrWhiteSpace(existingProduct.Description)) { existingProduct.Description = product.Description; } existingProduct.CategoryId ??= product.CategoryId; existingProduct.UnitOfMeasureId ??= product.UnitOfMeasureId; existingProduct.SupplierId ??= product.SupplierId; if (existingProduct.Stock == null) { existingProduct.Quantity = product.Quantity; } if (existingProduct.CurrentPrice == null) { existingProduct.Price = product.Price; } } await context.SaveChangesAsync(); } } }