public async Task <Response <Nurse> > InsertItem(NurseRequest nurseRequest)
        {
            using var transaction = _db.Database.BeginTransaction();
            try
            {
                User user = new User();
                user.UserType          = nurseRequest.UserType;
                user.FirstName         = nurseRequest.FirstName;
                user.LastName          = nurseRequest.LastName;
                user.FatherHusbandName = nurseRequest.FatherHusbandName;
                user.Gender            = nurseRequest.Gender;
                user.Cnic             = nurseRequest.Cnic;
                user.Contact          = nurseRequest.Contact;
                user.EmergencyContact = nurseRequest.EmergencyContact;
                user.Email            = nurseRequest.Email;
                user.Address          = nurseRequest.Address;
                user.JoiningDate      = nurseRequest.JoiningDate;
                user.FloorNo          = nurseRequest.FloorNo;
                user.Experience       = nurseRequest.Experience;
                user.DateOfBirth      = nurseRequest.DateOfBirth;
                user.MaritalStatus    = nurseRequest.MaritalStatus;
                user.Religion         = nurseRequest.Religion;
                await _db.Users.AddAsync(user);

                await _db.SaveChangesAsync();

                if (nurseRequest.QualificationList != null)
                {
                    if (nurseRequest.QualificationList.Count > 0)
                    {
                        foreach (QualificationRequest drQualification in nurseRequest.QualificationList)
                        {
                            Qualification qualification = new Qualification();
                            qualification.UserId            = user.Id;
                            qualification.Certificate       = drQualification.Certificate;
                            qualification.Description       = drQualification.Description;
                            qualification.QualificationType = drQualification.QualificationType;
                            await _db.Qualifications.AddAsync(qualification);

                            await _db.SaveChangesAsync();
                        }
                    }
                }

                Nurse nurse = new Nurse();
                nurse.UserId          = user.Id;
                nurse.DutyDuration    = nurseRequest.DutyDuration;
                nurse.SharePercentage = nurseRequest.SharePercentage;
                nurse.Salary          = nurseRequest.Salary;
                await _db.Nurses.AddAsync(nurse);

                await _db.SaveChangesAsync();

                transaction.Commit();
                return(new Response <Nurse>(true, "Success: Created object.", nurse));
            }
            catch (Exception exception)
            {
                transaction.Rollback();
                return(new Response <Nurse>(false, $"Server Failure: Unable to delete object. Because {exception.Message}", null));
            }
        }
        public async Task <Response <Nurse> > UpdateItem(int id, NurseRequest nurseRequest)
        {
            using var transaction = _db.Database.BeginTransaction();
            try
            {
                if (id != nurseRequest.Id)
                {
                    transaction.Rollback();
                    return(new Response <Nurse>(false, "Failure: Id sent in body does not match object Id", null));
                }

                Nurse nurse = await _db.Nurses.Include(x => x.User.Qualifications).FirstOrDefaultAsync(x => x.Id == id);;
                if (nurse == null)
                {
                    transaction.Rollback();
                    return(new Response <Nurse>(false, $"Failure: Unable to update Nurse {nurseRequest.FirstName}. Because Id is invalid. ", null));
                }
                nurse.DutyDuration    = nurseRequest.DutyDuration;
                nurse.SharePercentage = nurseRequest.SharePercentage;
                nurse.Salary          = nurseRequest.Salary;
                await _db.SaveChangesAsync();

                if (nurseRequest.QualificationList != null)
                {
                    if (nurseRequest.QualificationList.Count > 0)
                    {
                        foreach (QualificationRequest drQualification in nurseRequest.QualificationList)
                        {
                            Qualification qualification = await _db.Qualifications.FirstOrDefaultAsync(x => x.Id == drQualification.Id && x.UserId == nurse.UserId);

                            if (qualification == null)
                            {
                                transaction.Rollback();
                                return(new Response <Nurse>(false, $"Failure: Unable to update qualification {drQualification.Certificate}. Because Id is invalid. ", null));
                            }
                            qualification.Certificate       = drQualification.Certificate;
                            qualification.Description       = drQualification.Description;
                            qualification.QualificationType = drQualification.QualificationType;
                            await _db.SaveChangesAsync();
                        }
                    }
                }

                User user = await _db.Users.FirstOrDefaultAsync(x => x.Id == nurse.UserId);

                if (user == null)
                {
                    transaction.Rollback();
                    return(new Response <Nurse>(false, "Failure: Data doesnot exist.", null));
                }
                user.UserType          = nurseRequest.UserType;
                user.FirstName         = nurseRequest.FirstName;
                user.LastName          = nurseRequest.LastName;
                user.FatherHusbandName = nurseRequest.FatherHusbandName;
                user.Gender            = nurseRequest.Gender;
                user.Cnic             = nurseRequest.Cnic;
                user.Contact          = nurseRequest.Contact;
                user.EmergencyContact = nurseRequest.EmergencyContact;
                user.Email            = nurseRequest.Email;
                user.Address          = nurseRequest.Address;
                user.JoiningDate      = nurseRequest.JoiningDate;
                user.FloorNo          = nurseRequest.FloorNo;
                user.Experience       = nurseRequest.Experience;
                user.DateOfBirth      = nurseRequest.DateOfBirth;
                user.MaritalStatus    = nurseRequest.MaritalStatus;
                user.Religion         = nurseRequest.Religion;
                await _db.SaveChangesAsync();

                transaction.Commit();
                return(new Response <Nurse>(true, "Success: Updated object.", nurse));
            }
            catch (Exception exception)
            {
                transaction.Rollback();
                return(new Response <Nurse>(false, $"Server Failure: Unable to update object. Because {exception.Message}", null));
            }
        }