using Indotalent.ConfigBackEnd.Extensions; using Indotalent.Data.Entities; using Microsoft.EntityFrameworkCore; namespace Indotalent.Infrastructure.Database.Demo; public static class EmployeeSeeder { public static async Task GenerateDataAsync(AppDbContext context) { if (await context.Employee.AnyAsync()) return; var categories = await context.EmployeeCategory.ToListAsync(); var groups = await context.EmployeeGroup.ToListAsync(); if (!categories.Any() || !groups.Any()) return; var streets = new string[] { "Main St", "Broadway", "Oak Avenue", "Maple Drive", "Park Avenue", "Washington Blvd", "Lakeview Dr", "Sunset Blvd" }; var cities = new string[] { "New York", "Los Angeles", "Chicago", "Miami", "Seattle" }; var states = new string[] { "NY", "CA", "IL", "FL", "WA" }; var zipCodes = new string[] { "10001", "90210", "60601", "33101", "98101" }; var random = new Random(); var entityName = nameof(Employee); var employeeData = new List<(string Name, string Title, string GroupName, string CategoryName, decimal Commission)> { ("Dr. Robert Sterling", "Chief Medical Officer", "Medical Doctors & Specialists", "Medical & Clinical Professionals", 0.00m), ("Dr. Jennifer Adams", "General Practitioner", "Medical Doctors & Specialists", "Medical & Clinical Professionals", 0.15m), ("Dr. David Miller", "Orthopedic Surgeon", "Medical Doctors & Specialists", "Medical & Clinical Professionals", 0.20m), ("Sarah Mitchell", "Head Nurse", "Registered Nurses & Care Staff", "Nursing & Clinical Support", 0.00m), ("Jessica Taylor", "ER Triage Nurse", "Registered Nurses & Care Staff", "Nursing & Clinical Support", 0.00m), ("Michael Vance", "Senior Pharmacist", "Pharmacy & Dispensing Team", "Allied Health & Diagnostics", 0.00m), ("Amanda Williams", "Pharmacy Technician", "Pharmacy & Dispensing Team", "Allied Health & Diagnostics", 0.00m), ("Christopher Moore", "Lead Phlebotomist", "Laboratory & Diagnostic Technicians", "Allied Health & Diagnostics", 0.00m), ("Kevin Anderson", "Clinical Lab Scientist", "Laboratory & Diagnostic Technicians", "Allied Health & Diagnostics", 0.00m), ("Samantha White", "MRI Technologist", "Radiology & Imaging Technicians", "Allied Health & Diagnostics", 0.00m), ("Dr. Ashley Johnson", "Chief Dentist", "Dental & Allied Health Professionals", "Medical & Clinical Professionals", 0.15m), ("Matthew Davis", "Dental Hygienist", "Dental & Allied Health Professionals", "Allied Health & Diagnostics", 0.05m), ("Lauren Martinez", "Receptionist Lead", "Patient Reception & Front Desk", "Administrative & Management", 0.00m), ("Jonathan Wilson", "Admissions Coordinator", "Patient Reception & Front Desk", "Administrative & Management", 0.00m), ("Stephanie Rodriguez", "Billing Specialist", "Medical Billing & Insurance", "Administrative & Management", 0.00m), ("Nicholas Thomas", "Insurance Coordinator", "Medical Billing & Insurance", "Administrative & Management", 0.00m), ("Jason Hernandez", "Clinic Administrator", "Clinic Administration & Management", "Administrative & Management", 0.00m), ("Olivia Jackson", "HR Manager", "Clinic Administration & Management", "Administrative & Management", 0.00m), ("Alexander Smith", "Facility Supervisor", "Facility Maintenance & Security", "Operations & Facility Support", 0.00m), ("Elizabeth Brown", "Security Lead", "Facility Maintenance & Security", "Operations & Facility Support", 0.00m) }; foreach (var data in employeeData) { var group = groups.FirstOrDefault(x => x.Name == data.GroupName); var category = categories.FirstOrDefault(x => x.Name == data.CategoryName); var autoNo = await context.GenerateAutoNumberAsync( entityName: entityName, prefixTemplate: $"EMP-{{Year}}-" ); var emailPrefix = data.Name.Replace("Dr. ", "").Replace(" ", ".").ToLower(); var employee = new Employee { Name = data.Name, AutoNumber = autoNo, EmployeeNumber = $"ID-{random.Next(1000, 9999)}", JobTitle = data.Title, CommissionRate = data.Commission, EmployeeGroupId = group?.Id, EmployeeCategoryId = category?.Id, Street = $"{random.Next(100, 999)} {GetRandomString(streets, random)}", City = GetRandomString(cities, random), State = GetRandomString(states, random), ZipCode = GetRandomString(zipCodes, random), Country = "United States", PhoneNumber = $"+1-{random.Next(200, 999)}-{random.Next(100, 999)}-{random.Next(1000, 9999)}", EmailAddress = $"{emailPrefix}@med-clinic.us", Description = $"Professional {data.Title} based in the {data.CategoryName} division." }; await context.Employee.AddAsync(employee); } await context.SaveChangesAsync(); } private static string GetRandomString(string[] array, Random random) { return array[random.Next(array.Length)]; } }