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

                await _db.SaveChangesAsync();

                if (receptionistRequest.QualificationList != null)
                {
                    if (receptionistRequest.QualificationList.Count > 0)
                    {
                        foreach (QualificationRequest drQualification in receptionistRequest.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();
                        }
                    }
                }

                Receptionist receptionist = new Receptionist();
                receptionist.UserId    = user.Id;
                receptionist.JobType   = receptionistRequest.JobType;
                receptionist.ShiftTime = receptionistRequest.ShiftTime;
                await _db.Receptionists.AddAsync(receptionist);

                await _db.SaveChangesAsync();

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

                Receptionist receptionist = await _db.Receptionists.Include(x => x.User.Qualifications).FirstOrDefaultAsync(x => x.Id == id);;
                if (receptionist == null)
                {
                    transaction.Rollback();
                    return(new Response <Receptionist>(false, $"Failure: Unable to update receptionist {receptionistRequest.FirstName}. Because Id is invalid. ", null));
                }
                receptionist.JobType   = receptionistRequest.JobType;
                receptionist.ShiftTime = receptionistRequest.ShiftTime;
                await _db.SaveChangesAsync();

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

                            if (qualification == null)
                            {
                                transaction.Rollback();
                                return(new Response <Receptionist>(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 == receptionist.UserId);

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

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