public async Task <BaseResponse <bool> > CreateRangeAsync(List <HotelAttributeValueCreateModels> model)
        {
            try
            {
                if (model == null)
                {
                    return(BaseResponse <bool> .BadRequest());
                }
                var createItems = new List <HotelAttributeValues>();
                foreach (var item in model)
                {
                    var createItem = new HotelAttributeValues();
                    createItem.InjectFrom(item);
                    createItem.BasedAffective   = false;
                    createItem.LastModifiedBy   = GetUserGuidId();
                    createItem.LastModifiedDate = DateTime.UtcNow;
                    createItems.Add(createItem);
                }
                if (createItems.Count() > 0)
                {
                    await _db.HotelAttributeValues.AddRangeAsync(createItems);

                    await _db.SaveChangesAsync();

                    return(BaseResponse <bool> .Success(true));
                }
                return(BaseResponse <bool> .BadRequest(false));
            }
            catch (Exception ex)
            {
                return(BaseResponse <bool> .InternalServerError(message : ex.Message, fullMsg : ex.StackTrace));
            }
        }
        public async Task <BaseResponse <bool> > UpdateAttributeValueRangeAsync(HotelAttributeValueUpdateRangeModel updateModel)
        {
            try
            {
                if (updateModel == null)
                {
                    return(BaseResponse <bool> .BadRequest());
                }
                var userId = GetUserGuidId();
                if (updateModel == null || updateModel.ListAttributeId == null || updateModel.ListAttributeValue == null)
                {
                    return(BaseResponse <bool> .BadRequest());
                }
                if (_db.HotelAttributeValues.AsNoTracking().Any(k => k.AttributeCategoryFid == updateModel.AttributeCategoryFid && k.HotelFid == updateModel.HotelFid))
                {
                    if (updateModel.ListAttributeId.Count() == 0 && updateModel.ListAttributeValue.Count() == 0)
                    {
                        var data = _db.HotelAttributeValues.Where(k => k.AttributeCategoryFid == updateModel.AttributeCategoryFid && k.HotelFid == updateModel.HotelFid);
                        _db.RemoveRange(data);
                        _db.SaveChanges();
                        return(BaseResponse <bool> .Success(true));
                    }
                    else
                    {
                        // step 1 : remove all current attribute of Hotel in db
                        var data = _db.HotelAttributeValues.Where(k => k.AttributeCategoryFid == updateModel.AttributeCategoryFid && k.HotelFid == updateModel.HotelFid);
                        _db.RemoveRange(data);
                        _db.SaveChanges();

                        // step 2: add new all attribute to db
                        if (updateModel.ListAttributeId.Count() > 0 && updateModel.ListAttributeValue.Count() > 0 && updateModel.ListAttributeId.Count() == updateModel.ListAttributeValue.Count())
                        {
                            var listAttributeId    = updateModel.ListAttributeId;
                            var listAtrributeValue = updateModel.ListAttributeValue;
                            var lstattribute       = new List <HotelAttributeValues>();
                            for (int i = 0; i < listAttributeId.Count; i++)
                            {
                                var attributeValue = new HotelAttributeValues()
                                {
                                    HotelFid             = updateModel.HotelFid,
                                    AttributeCategoryFid = updateModel.AttributeCategoryFid,
                                    AttributeFid         = listAttributeId[i],
                                    AttributeValue       = listAtrributeValue[i],
                                    EffectiveDate        = DateTime.Now,
                                    LastModifiedBy       = userId,
                                    LastModifiedDate     = DateTime.UtcNow
                                };
                                // add to list
                                lstattribute.Add(attributeValue);
                            }
                            if (lstattribute.Count > 0)
                            {
                                await _db.HotelAttributeValues.AddRangeAsync(lstattribute);

                                await _db.SaveChangesAsync();

                                return(BaseResponse <bool> .Success(true));
                            }
                        }

                        return(BaseResponse <bool> .NoContent(false));
                    }
                }
                else
                {
                    if (updateModel.ListAttributeId.Count() > 0 && updateModel.ListAttributeValue.Count() > 0 && updateModel.ListAttributeId.Count() == updateModel.ListAttributeValue.Count())
                    {
                        var listAttributeId    = updateModel.ListAttributeId;
                        var listAtrributeValue = updateModel.ListAttributeValue;

                        var lstattribute = new List <HotelAttributeValues>();
                        for (int i = 0; i < listAttributeId.Count; i++)
                        {
                            var attributeValue = new HotelAttributeValues()
                            {
                                HotelFid             = updateModel.HotelFid,
                                AttributeCategoryFid = updateModel.AttributeCategoryFid,
                                AttributeFid         = listAttributeId[i],
                                AttributeValue       = listAtrributeValue[i],
                                EffectiveDate        = DateTime.Now,
                                LastModifiedBy       = userId,
                                LastModifiedDate     = DateTime.UtcNow
                            };
                            // add to list
                            lstattribute.Add(attributeValue);
                        }
                        if (lstattribute.Count > 0)
                        {
                            await _db.HotelAttributeValues.AddRangeAsync(lstattribute);

                            await _db.SaveChangesAsync();

                            return(BaseResponse <bool> .Success(true));
                        }
                    }

                    return(BaseResponse <bool> .NoContent(false));
                }
            }
            catch (Exception ex)
            {
                return(BaseResponse <bool> .InternalServerError(message : ex.Message, fullMsg : ex.StackTrace));
            }
        }