Add project files.
This commit is contained in:
71
Data/ApplicationDbContext.cs
Normal file
71
Data/ApplicationDbContext.cs
Normal file
@@ -0,0 +1,71 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using LogisticsApp.Server.Models;
|
||||
|
||||
namespace LogisticsApp.Server.Data
|
||||
{
|
||||
public class ApplicationDbContext : DbContext
|
||||
{
|
||||
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { }
|
||||
|
||||
public DbSet<Order> Orders { get; set; }
|
||||
public DbSet<Vehicle> Vehicles { get; set; }
|
||||
public DbSet<WaybillEntry> WaybillEntries { get; set; }
|
||||
public DbSet<User> Users { get; set; }
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
|
||||
{
|
||||
foreach (var property in entityType.GetProperties())
|
||||
{
|
||||
if (property.ClrType == typeof(DateTime))
|
||||
{
|
||||
modelBuilder.Entity(entityType.ClrType)
|
||||
.Property<DateTime>(property.Name)
|
||||
.HasConversion(
|
||||
v => v.Kind == DateTimeKind.Unspecified
|
||||
? DateTime.SpecifyKind(v, DateTimeKind.Utc)
|
||||
: v.ToUniversalTime(),
|
||||
v => DateTime.SpecifyKind(v, DateTimeKind.Utc));
|
||||
}
|
||||
else if (property.ClrType == typeof(DateTime?))
|
||||
{
|
||||
modelBuilder.Entity(entityType.ClrType)
|
||||
.Property<DateTime?>(property.Name)
|
||||
.HasConversion(
|
||||
v => !v.HasValue
|
||||
? v
|
||||
: (v.Value.Kind == DateTimeKind.Unspecified
|
||||
? DateTime.SpecifyKind(v.Value, DateTimeKind.Utc)
|
||||
: v.Value.ToUniversalTime()),
|
||||
v => v.HasValue
|
||||
? DateTime.SpecifyKind(v.Value, DateTimeKind.Utc)
|
||||
: v);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
modelBuilder.Entity<Order>()
|
||||
.HasIndex(o => o.Status);
|
||||
|
||||
modelBuilder.Entity<Order>()
|
||||
.HasIndex(o => o.OrderDate);
|
||||
|
||||
modelBuilder.Entity<Order>()
|
||||
.HasIndex(o => o.ClientName);
|
||||
|
||||
modelBuilder.Entity<Vehicle>()
|
||||
.HasIndex(v => v.LicensePlate);
|
||||
|
||||
modelBuilder.Entity<WaybillEntry>()
|
||||
.HasIndex(w => new { w.VehicleId, w.Date });
|
||||
|
||||
modelBuilder.Entity<User>()
|
||||
.HasIndex(u => u.Username)
|
||||
.IsUnique();
|
||||
|
||||
base.OnModelCreating(modelBuilder);
|
||||
}
|
||||
}
|
||||
}
|
||||
82
Data/DbInitializer.cs
Normal file
82
Data/DbInitializer.cs
Normal file
@@ -0,0 +1,82 @@
|
||||
|
||||
using LogisticsApp.Server.Models;
|
||||
|
||||
namespace LogisticsApp.Server.Data
|
||||
{
|
||||
public static class DbInitializer
|
||||
{
|
||||
public static async Task Initialize(ApplicationDbContext context)
|
||||
{
|
||||
|
||||
if (context.Users.Any() || context.Orders.Any())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var user = new User
|
||||
{
|
||||
Username = "admin",
|
||||
PasswordHash = BCrypt.Net.BCrypt.HashPassword("admin123"),
|
||||
Role = "admin",
|
||||
CreatedAt = DateTime.UtcNow
|
||||
};
|
||||
context.Users.Add(user);
|
||||
|
||||
user = new User
|
||||
{
|
||||
Username = "user",
|
||||
PasswordHash = BCrypt.Net.BCrypt.HashPassword("user123"),
|
||||
Role = "user",
|
||||
CreatedAt = DateTime.UtcNow
|
||||
};
|
||||
context.Users.Add(user);
|
||||
|
||||
var orders = new[]
|
||||
{
|
||||
new Order { Id = 1, ClientName = "Иванов Иван Иванович", OrderCost = 15000, OrderDate = DateTime.Parse("2025-01-15"), Status = "completed", Address = "ул. Ленина, 10", Description = "Доставка строительных материалов", CreatedAt = DateTime.UtcNow },
|
||||
new Order { Id = 2, ClientName = "ООО 'СтройМир'", OrderCost = 25000, OrderDate = DateTime.Parse("2025-01-16"), Status = "in_progress", Address = "пр. Мира, 25", Description = "Перевозка оборудования", CreatedAt = DateTime.UtcNow },
|
||||
new Order { Id = 3, ClientName = "ЗАО 'ТехноПром'", OrderCost = 18000, OrderDate = DateTime.Parse("2025-01-17"), Status = "completed", Address = "ул. Промышленная, 45", Description = "Доставка офисной мебели", CreatedAt = DateTime.UtcNow },
|
||||
new Order { Id = 4, ClientName = "Сергеев Алексей Петрович", OrderCost = 12000, OrderDate = DateTime.Parse("2025-01-18"), Status = "in_progress", Address = "пр. Космонавтов, 78", Description = "Переезд квартиры", CreatedAt = DateTime.UtcNow },
|
||||
new Order { Id = 5, ClientName = "ИП Козлова Марина Сергеевна", OrderCost = 22000, OrderDate = DateTime.Parse("2025-01-19"), Status = "in_progress", Address = "ул. Торговая, 12", Description = "Доставка товаров для магазина", CreatedAt = DateTime.UtcNow },
|
||||
new Order { Id = 6, ClientName = "ООО 'СтройГрад'", OrderCost = 35000, OrderDate = DateTime.Parse("2025-01-20"), Status = "pending", Address = "ул. Строителей, 33", Description = "Перевозка кирпича", CreatedAt = DateTime.UtcNow },
|
||||
new Order { Id = 7, ClientName = "Федоров Дмитрий Иванович", OrderCost = 8000, OrderDate = DateTime.Parse("2025-01-21"), Status = "completed", Address = "ул. Садовая, 15", Description = "Перевозка бытовой техники", CreatedAt = DateTime.UtcNow },
|
||||
new Order { Id = 8, ClientName = "ООО 'ПромСнаб'", OrderCost = 28000, OrderDate = DateTime.Parse("2025-01-22"), Status = "cancelled", Address = "пр. Заводской, 67", Description = "Доставка станков", CreatedAt = DateTime.UtcNow },
|
||||
new Order { Id = 9, ClientName = "Александрова Ольга Викторовна", OrderCost = 9500, OrderDate = DateTime.Parse("2025-01-23"), Status = "cancelled", Address = "ул. Центральная, 89", Description = "Перевозка личных вещей", CreatedAt = DateTime.UtcNow },
|
||||
new Order { Id = 10, ClientName = "ООО 'ТоргСервис'", OrderCost = 19500, OrderDate = DateTime.Parse("2025-01-24"), Status = "in_progress", Address = "ул. Коммерческая, 56", Description = "Доставка продуктов питания", CreatedAt = DateTime.UtcNow },
|
||||
new Order { Id = 11, ClientName = "Васильев Павел Сергеевич", OrderCost = 11000, OrderDate = DateTime.Parse("2025-01-25"), Status = "completed", Address = "ул. Молодежная, 23", Description = "Переезд на новую квартиру", CreatedAt = DateTime.UtcNow },
|
||||
new Order { Id = 12, ClientName = "ЗАО 'ПромИнвест'", OrderCost = 42000, OrderDate = DateTime.Parse("2025-01-26"), Status = "pending", Address = "пр. Индустриальный, 44", Description = "Перевозка промышленного оборудования", CreatedAt = DateTime.UtcNow }
|
||||
};
|
||||
context.Orders.AddRange(orders);
|
||||
|
||||
|
||||
var vehicles = new[]
|
||||
{
|
||||
new Vehicle { Id = 1, DriverName = "Петров Петр Петрович", VehicleType = "Газель", LicensePlate = "А123БВ77", CreatedAt = DateTime.UtcNow },
|
||||
new Vehicle { Id = 2, DriverName = "Сидоров Алексей Владимирович", VehicleType = "Камаз", LicensePlate = "В456ГД77", CreatedAt = DateTime.UtcNow },
|
||||
new Vehicle { Id = 3, DriverName = "Кузнецов Михаил Иванович", VehicleType = "Газель", LicensePlate = "С789ЕЖ77", CreatedAt = DateTime.UtcNow },
|
||||
new Vehicle { Id = 4, DriverName = "Николаев Андрей Сергеевич", VehicleType = "ЗИЛ", LicensePlate = "Д321ФГ77", CreatedAt = DateTime.UtcNow },
|
||||
new Vehicle { Id = 5, DriverName = "Морозов Виктор Павлович", VehicleType = "Камаз", LicensePlate = "Е654ХЦ77", CreatedAt = DateTime.UtcNow },
|
||||
new Vehicle { Id = 6, DriverName = "Орлов Денис Александрович", VehicleType = "Газель", LicensePlate = "Ж987ЧШ77", CreatedAt = DateTime.UtcNow },
|
||||
new Vehicle { Id = 7, DriverName = "Белов Артем Игоревич", VehicleType = "Фургон", LicensePlate = "З159ЩР77", CreatedAt = DateTime.UtcNow },
|
||||
new Vehicle { Id = 8, DriverName = "Громов Сергей Викторович", VehicleType = "ЗИЛ", LicensePlate = "И753ЪЫ77", CreatedAt = DateTime.UtcNow }
|
||||
};
|
||||
context.Vehicles.AddRange(vehicles);
|
||||
|
||||
|
||||
var waybillEntries = new[]
|
||||
{
|
||||
new WaybillEntry { VehicleId = 6, OrderId = 1, StartTime = "20:00", EndTime = "22:00", Date = new DateOnly(2025, 11, 21), CreatedAt = DateTime.UtcNow },
|
||||
new WaybillEntry { VehicleId = 6, OrderId = 4, StartTime = "14:00", EndTime = "16:00", Date = new DateOnly(2025, 11, 21), CreatedAt = DateTime.UtcNow },
|
||||
new WaybillEntry { VehicleId = 6, OrderId = 2, StartTime = "10:00", EndTime = "12:00", Date = new DateOnly(2025, 11, 21), CreatedAt = DateTime.UtcNow },
|
||||
new WaybillEntry { VehicleId = 2, OrderId = 2, StartTime = "20:00", EndTime = "22:00", Date = new DateOnly(2025, 11, 21), CreatedAt = DateTime.UtcNow },
|
||||
new WaybillEntry { VehicleId = 2, OrderId = 4, StartTime = "08:00", EndTime = "09:00", Date = new DateOnly(2025, 11, 21), CreatedAt = DateTime.UtcNow },
|
||||
new WaybillEntry { VehicleId = 1, OrderId = 1, StartTime = "08:00", EndTime = "11:00", Date = new DateOnly(2025, 11, 21), CreatedAt = DateTime.UtcNow },
|
||||
new WaybillEntry { VehicleId = 2, OrderId = 4, StartTime = "08:00", EndTime = "10:00", Date = new DateOnly(2025, 11, 23), CreatedAt = DateTime.UtcNow }
|
||||
};
|
||||
context.WaybillEntries.AddRange(waybillEntries);
|
||||
|
||||
await context.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user