Ejemplo n.º 1
0
        public async Task AddRecipientAsync(
            string userHospitalId,
            string firstName,
            string middleName,
            string lastName,
            int age,
            double neededQuantity,
            EmergencyStatus recipientEmergency,
            BloodGroup bloodGroup,
            RhesusFactor rhesusFactor)
        {
            var hospitalData = this.hospitalDataRepository.All()
                               .FirstOrDefault(uhd => uhd.ApplicationUserId == userHospitalId);

            if (hospitalData == null)
            {
                throw new ArgumentException(GlobalConstants.NoHospitalDataErrorMessage);
            }

            if (firstName == null ||
                middleName == null ||
                lastName == null ||
                age == 0 ||
                neededQuantity == 0)
            {
                throw new ArgumentException(GlobalConstants.NotFullRecipientDataErrorMessage);
            }

            var recipient = new Recipient
            {
                FirstName          = firstName,
                MiddleName         = middleName,
                LastName           = lastName,
                Age                = age,
                NeededQuantity     = neededQuantity,
                RecipientEmergency = recipientEmergency,
                BloodGroup         = bloodGroup,
                RhesusFactor       = rhesusFactor,
            };

            var recipientHospitalData = new RecipientHospitalData
            {
                HospitalDataId = hospitalData.Id,
                RecipientId    = recipient.Id,
            };

            recipient.HospitalDataId = recipientHospitalData.HospitalDataId;

            await this.recipientsRepository.AddAsync(recipient);

            await this.recipientsRepository.SaveChangesAsync();

            await this.recipientHospitalDataRepository.AddAsync(recipientHospitalData);

            await this.recipientHospitalDataRepository.SaveChangesAsync();
        }
Ejemplo n.º 2
0
        public async Task SeedAsync(ApplicationDbContext dbContext, IServiceProvider serviceProvider)
        {
            var userManager                      = serviceProvider.GetRequiredService <UserManager <ApplicationUser> >();
            var hospitalDataRepository           = serviceProvider.GetRequiredService <IDeletableEntityRepository <HospitalData> >();
            var recipientsRepository             = serviceProvider.GetRequiredService <IDeletableEntityRepository <Recipient> >();
            var recipientsHospitalDataRepository = serviceProvider.GetRequiredService <IDeletableEntityRepository <RecipientHospitalData> >();
            var bloodBankRepository              = serviceProvider.GetRequiredService <IDeletableEntityRepository <BloodBank> >();
            var hospitalBloodBankRepository      = serviceProvider.GetRequiredService <IDeletableEntityRepository <HospitalDataBloodBank> >();
            var allUsers     = serviceProvider.GetService <IDeletableEntityRepository <ApplicationUser> >();
            var deletedUsers = allUsers
                               .AllAsNoTrackingWithDeleted()
                               .Where(u => u.IsDeleted == true)
                               .ToList();

            // Seeding hospitals and hospitalsData
            for (int i = 0; i < 6; i++)
            {
                var user = await userManager.FindByEmailAsync($"Hospital{i}@hospital.bg");

                if (user != null)
                {
                    return;
                }

                user = new ApplicationUser
                {
                    UserName       = $"Hospital{i}@hospital.bg",
                    Email          = $"Hospital{i}@hospital.bg",
                    EmailConfirmed = true,
                };

                if (deletedUsers.Any(u => u.Email == user.Email))
                {
                    return;
                }

                await userManager.CreateAsync(user, $"Hospital{i}@hospital.bg");

                await userManager.AddToRoleAsync(user, GlobalConstants.HospitaltRoleName);

                var hospitalData = new HospitalData
                {
                    ApplicationUserId = user.Id,
                    ApplicationUser   = user,
                    Name    = $"Hospital{i}",
                    Contact = new Contact
                    {
                        Email = user.Email,
                        Phone = $"0{i * 5}{i * 6}{i * 7}",
                    },
                    Location = new Location
                    {
                        Country           = "Bulgaria",
                        City              = $"City{i}",
                        AdressDescription = $"Street{i * 3}",
                    },
                };
                await hospitalDataRepository.AddAsync(hospitalData);

                var bloodBank = new BloodBank
                {
                    HospitalDataId = hospitalData.Id,
                };
                await bloodBankRepository.AddAsync(bloodBank);

                var hospitalBloodBank = new HospitalDataBloodBank
                {
                    HospitalId  = hospitalData.Id,
                    BloodBankId = bloodBank.Id,
                };
                await hospitalBloodBankRepository.AddAsync(hospitalBloodBank);

                // Seeding recipients in hospitals
                for (int j = 0; j < 3; j++)
                {
                    Random random    = new Random();
                    var    recipient = new Recipient
                    {
                        HospitalDataId     = hospitalData.Id,
                        FirstName          = $"Recipient{j}",
                        MiddleName         = $"Recipient{j}",
                        LastName           = $"Recipient{j}",
                        Age                = 20 + j,
                        NeededQuantity     = 500,
                        RecipientEmergency = (EmergencyStatus)random.Next(Enum.GetNames(typeof(EmergencyStatus)).Length),
                        BloodGroup         = (BloodGroup)random.Next(Enum.GetNames(typeof(BloodGroup)).Length),
                        RhesusFactor       = (RhesusFactor)random.Next(Enum.GetNames(typeof(RhesusFactor)).Length),
                    };

                    await recipientsRepository.AddAsync(recipient);

                    var recipientHospitalData = new RecipientHospitalData
                    {
                        HospitalDataId = hospitalData.Id,
                        RecipientId    = recipient.Id,
                    };

                    await recipientsHospitalDataRepository.AddAsync(recipientHospitalData);
                }
            }
        }