Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions backend/Program.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using backend;
using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);
Expand All @@ -8,6 +9,11 @@

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
SeedData.Seed(scope.ServiceProvider);
}

app.MapGet("/", () => "Hello World!");

app.UseHttpsRedirection();
Expand Down
137 changes: 137 additions & 0 deletions backend/SeedData.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
using Bogus;
using backend.types;
using Microsoft.EntityFrameworkCore;

namespace backend
{
public static class SeedData
{
public static async void Seed(IServiceProvider serviceProvider)
{
using var scope = serviceProvider.CreateScope();
var context = scope.ServiceProvider.GetRequiredService<MaintenanceDbContext>();

if (context.Airplanes.Any()) return;

await context.Database.MigrateAsync();

var fakeTech = new Faker<Technician>()
.RuleFor(t => t.Name, f => f.Person.FirstName + " " + f.Person.LastName)
.RuleFor(t => t.Status, _ => PersonnelStatus.Inactive)
.RuleFor(t => t.Role, _ => UserRole.Technician);

var fakeOperator = new Faker<Operator>()
.RuleFor(o => o.Name, f => f.Person.FirstName + " " + f.Person.LastName)
.RuleFor(o => o.Status, _ => PersonnelStatus.Inactive)
.RuleFor(o => o.Role, _ => UserRole.Operator);

var fakeSupervisor = new Faker<Supervisor>()
.RuleFor(s => s.Name, f => f.Person.FirstName + " " + f.Person.LastName)
.RuleFor(s => s.Status, _ => PersonnelStatus.Inactive)
.RuleFor(s => s.Role, _ => UserRole.Supervisor);

var fakeFuel = new Faker<Fuel>()
.RuleFor(f => f.Sku, f => $"FUEL-{f.Random.Int(0, 100000)}")
.RuleFor(f => f.Name, f => f.Commerce.ProductName())
.RuleFor(f => f.Amount, f => f.Random.Int(100, 5000))
.RuleFor(f => f.Type, _ => ResourceType.Fuel)
.RuleFor(f => f.Unit, _ => UnitType.L);

var fakeAmmo = new Faker<Ammunition>()
.RuleFor(a => a.Sku, f => $"AMMO-{f.Random.Int(0, 100000)}")
.RuleFor(a => a.Name, f => f.Commerce.ProductName())
.RuleFor(a => a.Amount, f => f.Random.Int(100, 2000))
.RuleFor(a => a.Type, _ => ResourceType.Ammunition)
.RuleFor(a => a.Unit, _ => UnitType.rounds);

var fakeBattery = new Faker<Battery>()
.RuleFor(b => b.Sku, f => $"BAT-{f.Random.Int(0, 100000)}")
.RuleFor(b => b.Name, f => f.Commerce.ProductName())
.RuleFor(b => b.Amount, f => f.Random.Int(1, 10))
.RuleFor(b => b.Type, _ => ResourceType.Battery)
.RuleFor(b => b.Unit, _ => UnitType.kWh);

var fakeSite = new Faker<MaintenanceSite>();

var fakeOrder = new Faker<MaintenanceOrder>()
.RuleFor(o => o.OrderTitle, f => $"Order #{f.Random.Int(0, 100000)}")
.RuleFor(o => o.Status, f => f.PickRandom<MaintenanceGenericStatus>())
.RuleFor(o => o.Description, f => f.Lorem.Sentence())
.RuleFor(t => t.Comments, f => f.Lorem.Sentence())
.RuleFor(o => o.StartedAt, f => f.Date.Soon().ToUniversalTime())
.RuleFor(o => o.CreatedAt, f => f.Date.Past().ToUniversalTime())
.RuleFor(o => o.UpdatedAt, f => f.Date.Recent().ToUniversalTime());

var fakeTask = new Faker<MaintenanceTask>()
.RuleFor(t => t.Status, f => f.PickRandom<MaintenanceGenericStatus>())
.RuleFor(t => t.Description, f => f.Lorem.Sentence())
.RuleFor(t => t.Comments, f => f.Lorem.Sentence())
.RuleFor(t => t.StartedAt, f => f.Date.Soon().ToUniversalTime())
.RuleFor(t => t.CreatedAt, f => f.Date.Past().ToUniversalTime())
.RuleFor(t => t.UpdatedAt, f => f.Date.Recent().ToUniversalTime())
.RuleFor(t => t.Type, f => f.PickRandom<TaskType>())
.RuleFor(t => t.Duration, f => f.Date.Timespan())
.RuleFor(t => t.Deadline, f => f.Date.Future().ToUniversalTime());

var fakeAirplanes = new Faker<Airplane>()
.RuleFor(a => a.Ammunition, f => fakeAmmo.Generate(1))
.RuleFor(a => a.Fuel, f => fakeFuel.Generate(1))
.RuleFor(a => a.Battery, f => fakeBattery.Generate(1));

var fakeResource = new Faker<TaskResourceRequirement>()
.RuleFor(r => r.Amount, f => f.Random.Int(1, 10))
.RuleFor(r => r.Buffer, f => new ResourceBuffer
{
MaxReqAmount = f.Random.Int(10, 50),
OptimalReqAmount = f.Random.Int(5, 30),
MinReqAmount = f.Random.Int(1, 15)
});

var airplanes = fakeAirplanes.Generate(4);
var orders = new List<MaintenanceOrder>();
var tasks = new List<MaintenanceTask>();
var resourceRequirements = new List<TaskResourceRequirement>();
var resources = new List<ResourceGeneric>();
for (int i = 0; i < airplanes.Count; i++)
{
var order = fakeOrder.Generate();
var task = fakeTask.Generate();
var resource = fakeFuel.Generate();
var resourceRequirement = fakeResource.Generate();

var airplane = airplanes[i];

task.MaintenanceOrder = order;
task.Airplane = airplane;

resourceRequirement.Task = task;
resourceRequirement.Resource = resource;

order.Tasks.Add(task);

orders.Add(order);
tasks.Add(task);

resources.Add(resource);
resourceRequirements.Add(resourceRequirement);
}

var sites = fakeSite.Generate(5);
var operators = fakeOperator.Generate(2);
var supervisors = fakeSupervisor.Generate(2);
var techs = fakeTech.Generate(2);

context.Sites.AddRange(sites);
context.Airplanes.AddRange(airplanes);
context.Orders.AddRange(orders);
context.Tasks.AddRange(tasks);
context.Resources.AddRange(resources);
context.ResourceRequirements.AddRange(resourceRequirements);
context.Personnel.AddRange(operators);
context.Personnel.AddRange(supervisors);
context.Personnel.AddRange(techs);

await context.SaveChangesAsync();
}
}
}
1 change: 1 addition & 0 deletions backend/backend.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Bogus" Version="35.6.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="10.0.8" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.8">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down