public async Task <Unit> Handle(ForgetPasswordRequest request, CancellationToken cancellationToken)
        {
            var user = await _userRepository.GetUserByEmailAsync(request.Email);

            user.UpdatePassword(PasswordHelper.Decrypt(user.Password));
            return(Unit.Value);
        }
        public async Task <DataTable> QueryAsync(UserData userData, string sql, List <DatabaseParameter> parameters = null)
        {
            try
            {
                var connString =
                    BuildConnectionString(
                        Properties.AppSettings.ConnectionString,
                        userData.Username,
                        PasswordHelper.Decrypt(userData.EncryptedPassword));

                using var conn = new OracleConnection(connString);
                try
                {
                    await conn.OpenAsync();

                    var tx = (OracleTransaction)await conn.BeginTransactionAsync();

                    DataTable result = new DataTable("DATA");
                    sql             = sql.Replace("&AO", Properties.AppSettings.ApplicationOwner);
                    using var cmd   = new OracleCommand(sql, conn);
                    cmd.Transaction = tx;

                    if (parameters != null && parameters.Count > 0)
                    {
                        foreach (var paremeter in parameters)
                        {
                            if (sql.IndexOf(":" + paremeter.Name) > -1)
                            {
                                cmd.Parameters.Add(GetParameter(paremeter.Name, paremeter.Value, paremeter.DataType, paremeter.Direction, paremeter.Size));
                            }
                        }
                    }

                    var reader = await cmd.ExecuteReaderAsync();

                    result.Load(reader);
                    return(result);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (conn.State == ConnectionState.Open)
                    {
                        await conn.CloseAsync();
                    }
                }
            }
            catch (Exception ex)
            {
                throw ExceptionHelper.Throw(ex, ClassName, "QueryAsync");
            }
        }
        public async Task <int> ExecuteAsync(UserData userData, string commandText, CommandType commandType = CommandType.Text, List <DatabaseParameter> parameters = null)
        {
            try
            {
                var connString =
                    BuildConnectionString(
                        Properties.AppSettings.ConnectionString,
                        userData.Username,
                        PasswordHelper.Decrypt(userData.EncryptedPassword));

                using var conn = new OracleConnection(connString);
                try
                {
                    await conn.OpenAsync();

                    var tx = (OracleTransaction)await conn.BeginTransactionAsync();

                    commandText   = commandText.Replace("&AO", Properties.AppSettings.ApplicationOwner);
                    using var cmd = new OracleCommand(commandText, conn)
                          {
                              Transaction = tx,
                              CommandType = commandType
                          };

                    if (parameters != null && parameters.Count > 0)
                    {
                        foreach (var paremeter in parameters)
                        {
                            if (commandText.IndexOf(":" + paremeter.Name) > -1)
                            {
                                cmd.Parameters.Add(GetParameter(paremeter.Name, paremeter.Value, paremeter.DataType, paremeter.Direction, paremeter.Size));
                            }
                        }
                    }

                    return(await cmd.ExecuteNonQueryAsync());
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (conn.State == ConnectionState.Open)
                    {
                        await conn.CloseAsync();
                    }
                }
            }
            catch (Exception ex)
            {
                throw ExceptionHelper.Throw(ex, ClassName, "ExecuteAsync");
            }
        }
        public async Task <JwtAuthResultDTO> Authenticate(string UserNameOrEmail, string password)
        {
            User user;
            var  isEmail = UserNameOrEmail.IsEmail();

            if (isEmail)
            {
                user = await _userRepository.GetUserByEmailAsync(UserNameOrEmail);
            }
            else
            {
                user = await _userRepository.GetUserByNameAsync(UserNameOrEmail);
            }

            if (user is null)
            {
                throw new NotFoundException("User is empty");
            }

            if (password != PasswordHelper.Decrypt(user.Password))
            {
                throw new InfrastructureException("Password is wrong");
            }

            var tokenHandler = new JwtSecurityTokenHandler();
            var key          = Encoding.ASCII.GetBytes(_config.Secret);

            var claimList = new List <Claim>()
            {
                new Claim(ClaimTypes.Name, user.UserName)
            };

            user.Roles.ForEach(role => { claimList.Add(new Claim(ClaimTypes.Role, role.Value)); });

            var jwtToken = new JwtSecurityToken(
                _config.Issuer,
                _config.Audience,
                claimList,
                expires: DateTime.UtcNow.AddMinutes(_config.AccessTokenExpiration),
                signingCredentials: new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature));

            return(new JwtAuthResultDTO()
            {
                Token = new JwtSecurityTokenHandler().WriteToken(jwtToken),
                TokenExpiredDate = DateTime.UtcNow.AddMinutes(_config.AccessTokenExpiration)
            });
        }
Exemple #5
0
        public static void RegisterMappings(MapperConfigurationExpression mapperConfiguration)
        {
            mapperConfiguration.CreateMap <User, UserDto>()
            .ForMember(dto => dto.Password, m => m.MapFrom(src => PasswordHelper.Decrypt(src.Password)));
            mapperConfiguration.CreateMap <UserDto, User>();

            mapperConfiguration.CreateMap <Career, CareerDto>();
            mapperConfiguration.CreateMap <CareerDto, Career>();


            mapperConfiguration.CreateMap <CareerForm, CareerFormDto>();
            mapperConfiguration.CreateMap <CareerFormDto, CareerForm>();

            mapperConfiguration.CreateMap <CountryDto, Country>()
            .ForMember(dto => dto.Cityes, m => m.Ignore());
            mapperConfiguration.CreateMap <Country, CountryDto>()
            .ForMember(dto => dto.TitleDictionary, m => m.MapFrom(src => src.CountryTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.Title)));

            mapperConfiguration.CreateMap <CityDto, City>();
            mapperConfiguration.CreateMap <City, CityDto>()
            .ForMember(dto => dto.TitleDictionary, m => m.MapFrom(src => src.CityTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.Title)));


            mapperConfiguration.CreateMap <CurrencyDto, Currency>();
            mapperConfiguration.CreateMap <Currency, CurrencyDto>()
            .ForMember(dto => dto.TitleDictionary, m => m.MapFrom(src => src.CurrencyTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.Title)));

            mapperConfiguration.CreateMap <OwnerDto, Owner>();
            mapperConfiguration.CreateMap <Owner, OwnerDto>()
            .ForMember(dto => dto.TitleDictionary, m => m.MapFrom(src => src.OwnerTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.Title)))
            .ForMember(dto => dto.DescriptionDictionary, m => m.MapFrom(src => src.OwnerTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.Description)))
            .ForMember(dto => dto.PostionDictionary, m => m.MapFrom(src => src.OwnerTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.Postion)));


            mapperConfiguration.CreateMap <NewsDto, News>();
            mapperConfiguration.CreateMap <News, NewsDto>()
            .ForMember(dto => dto.TitleDictionary, m => m.MapFrom(src => src.NewsTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.Title)))
            .ForMember(dto => dto.DescriptionDictionary, m => m.MapFrom(src => src.NewsTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.Description)));

            mapperConfiguration.CreateMap <FeatureDto, Feature>();
            mapperConfiguration.CreateMap <Feature, FeatureDto>()
            .ForMember(dto => dto.TitleDictionary, m => m.MapFrom(src => src.FeaturesTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.Title)));



            mapperConfiguration.CreateMap <HotelFeatureDto, HotelFeature>();
            mapperConfiguration.CreateMap <HotelFeature, HotelFeatureDto>();

            mapperConfiguration.CreateMap <HotelDto, Hotel>();
            mapperConfiguration.CreateMap <Hotel, HotelDto>()
            .ForMember(dto => dto.TitleDictionary,
                       m => m.MapFrom(src => src.HotelTranslations.ToDictionary(
                                          translation => translation.Language.ToLower(), translation => translation.Title)))
            .ForMember(dto => dto.DescriptionDictionary,
                       m => m.MapFrom(src => src.HotelTranslations.ToDictionary(
                                          translation => translation.Language.ToLower(), translation => translation.Description)));
            // .ForMember(dto => dto.City, m => m.MapFrom(src => src.CityId));


            mapperConfiguration.CreateMap <HotelReservationDto, HotelReservation>();
            mapperConfiguration.CreateMap <HotelReservation, HotelReservationDto>()
            ;

            mapperConfiguration.CreateMap <BackageDto, Backage>();
            mapperConfiguration.CreateMap <Backage, BackageDto>()
            .ForMember(dto => dto.TitleDictionary,
                       m => m.MapFrom(src => src.BackageTranslations.ToDictionary(
                                          translation => translation.Language.ToLower(), translation => translation.Title)))
            .ForMember(dto => dto.DescriptionDictionary,
                       m => m.MapFrom(src => src.BackageTranslations.ToDictionary(
                                          translation => translation.Language.ToLower(), translation => translation.Description)));


            mapperConfiguration.CreateMap <BackageReservationDto, BackageReservation>();
            mapperConfiguration.CreateMap <BackageReservation, BackageReservationDto>();

            mapperConfiguration.CreateMap <OfferDto, Offer>();
            mapperConfiguration.CreateMap <Offer, OfferDto>()
            .ForMember(dto => dto.TitleDictionary,
                       m => m.MapFrom(src => src.OfferTranslations.ToDictionary(
                                          translation => translation.Language.ToLower(), translation => translation.Title)))
            .ForMember(dto => dto.DescriptionDictionary,
                       m => m.MapFrom(src => src.OfferTranslations.ToDictionary(
                                          translation => translation.Language.ToLower(), translation => translation.Description)));
            //.ForMember(dto => dto.City, m => m.MapFrom(src => src.CityId));


            mapperConfiguration.CreateMap <OfferReservationDto, OfferReservation>();
            mapperConfiguration.CreateMap <OfferReservation, OfferReservationDto>();

            mapperConfiguration.CreateMap <TourDto, Tour>();
            mapperConfiguration.CreateMap <Tour, TourDto>()
            .ForMember(dto => dto.TitleDictionary,
                       m => m.MapFrom(src => src.TourTranslations.ToDictionary(
                                          translation => translation.Language.ToLower(), translation => translation.Title)))
            .ForMember(dto => dto.DescriptionDictionary,
                       m => m.MapFrom(src => src.TourTranslations.ToDictionary(
                                          translation => translation.Language.ToLower(), translation => translation.Description)));


            mapperConfiguration.CreateMap <TourReservationDto, TourReservation>();
            mapperConfiguration.CreateMap <TourReservation, TourReservationDto>();


            mapperConfiguration.CreateMap <TypeDto, Type>();
            mapperConfiguration.CreateMap <Type, TypeDto>()
            .ForMember(dto => dto.TitleDictionary, m => m.MapFrom(src => src.TypeTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.Title)));


            mapperConfiguration.CreateMap <AboutDto, About>();
            mapperConfiguration.CreateMap <About, AboutDto>()
            .ForMember(dto => dto.DescriptionDictionary, m => m.MapFrom(src => src.AboutTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.Description)));



            mapperConfiguration.CreateMap <ContactDto, ContactUs>();
            mapperConfiguration.CreateMap <ContactUs, ContactDto>()
            .ForMember(dto => dto.AddressDictionary, m => m.MapFrom(src => src.ContactUsTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.Address)));


            mapperConfiguration.CreateMap <ContactDto, ContactUs>();
            mapperConfiguration.CreateMap <ContactUs, ContactDto>()
            .ForMember(dto => dto.AddressDictionary, m => m.MapFrom(src => src.ContactUsTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.Address)));


            mapperConfiguration.CreateMap <NewsLetterDto, NewsLetter>();
            mapperConfiguration.CreateMap <NewsLetter, NewsLetterDto>();

            mapperConfiguration.CreateMap <ContactFormDto, Inquery>();
            mapperConfiguration.CreateMap <Inquery, ContactFormDto>();


            Mapper.Initialize(mapperConfiguration);
        }
        public static void RegisterMappings(MapperConfigurationExpression mapperConfiguration)
        {
            mapperConfiguration.CreateMap <User, UserDto>();
            mapperConfiguration.CreateMap <ReceptionistDto, Receptionist>();

            mapperConfiguration.CreateMap <Receptionist, ReceptionistDto>()
            .ForMember(dto => dto.Password, m => m.MapFrom(src => PasswordHelper.Decrypt(src.Password)));
            mapperConfiguration.CreateMap <RefreshToken, RefreshTokenDto>().ReverseMap();

            mapperConfiguration.CreateMap <FeatureDetailDto, FeatureDetail>()
            .ForMember(dto => dto.FeatureDetailTranslations, m => m.MapFrom(src => src.DescriptionDictionary.Select(x => new FeatureDetailTranslation {
                Description = x.Value, Language = x.Key
            }).ToList()));
            mapperConfiguration.CreateMap <FeatureDetail, FeatureDetailDto>()
            .ForMember(dto => dto.FeatureId, m => m.MapFrom(src => src.FeatureControl.FeatureId))
            .ForMember(dto => dto.DescriptionDictionary, m => m.MapFrom(src => src.FeatureDetailTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.Description)))
            .ForMember(dto => dto.Availables, m => m.MapFrom(src => src.Availables.Where(x => !x.IsDeleted).ToList()));

            mapperConfiguration.CreateMap <FeatureDto, Feature>()
            .ForMember(dto => dto.FeatureTranslations, m => m.MapFrom(src => src.FeatureNameDictionary.Select(x => new FeatureTranslation {
                FeatureName = x.Value, Language = x.Key
            }).ToList()))
            // .ForMember(dto => dto.FeatureDetails, m => m.MapFrom(src => src.FeatureDetails))
            .ForMember(dto => dto.Restaurants, m => m.Ignore());
            mapperConfiguration.CreateMap <Feature, FeatureDto>()
            .ForMember(dto => dto.FeatureNameDictionary, m => m.MapFrom(src => src.FeatureTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.FeatureName)))
            //.ForMember(dto => dto.FeatureDetails, m => m.MapFrom(src => src.FeatureDetails.Where(x=>!x.IsDeleted)))
            .ForMember(dto => dto.FeatureControl, m => m.MapFrom(src => src.FeatureControls.Where(x => x.IsActive).OrderBy(x => x.Order)))
            .ForMember(dto => dto.Restaurants, m => m.MapFrom(src => src.Restaurants.Where(x => !x.IsDeleted)));

            mapperConfiguration.CreateMap <FeatureControl, FeatureControlDetailDto>()
            .ForMember(dto => dto.FeatureDetails, m => m.MapFrom(src => src.FeatureDetails.Where(x => !x.IsDeleted).ToList()));


            mapperConfiguration.CreateMap <Feature, FeatureInfoDto>()
            .ForMember(dto => dto.FeatureNameDictionary, m => m.MapFrom(src => src.FeatureTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.FeatureName)))
            .ForMember(dto => dto.FeatureControl, m => m.MapFrom(src => src.FeatureControls.Where(x => x.IsActive).OrderBy(x => x.Order)));

            mapperConfiguration.CreateMap <Supervisor, SupervisorDto>()
            .ForMember(dto => dto.Password, m => m.MapFrom(src => PasswordHelper.Decrypt(src.Password)))
            .ForMember(dto => dto.Features, m => m.MapFrom(src => src.SupervisorFeatures.Where(x => !x.Feature.IsDeleted && x.Feature.IsActive).Select(x => x.Feature).ToList()));
            mapperConfiguration.CreateMap <SupervisorDto, Supervisor>();


            mapperConfiguration.CreateMap <RoomDto, Room>()
            .ForMember(dto => dto.UserName, m => m.MapFrom(src => src.RoomName))
            .ForMember(dto => dto.UserId, m => m.MapFrom(src => src.RoomId));
            mapperConfiguration.CreateMap <Room, RoomDto>()
            .ForMember(dto => dto.Password, m => m.MapFrom(src => PasswordHelper.Decrypt(src.Password)))
            .ForMember(dto => dto.RoomName, m => m.MapFrom(src => src.UserName))
            .ForMember(dto => dto.RoomId, m => m.MapFrom(src => src.UserId))
            .ForMember(dto => dto.BuildingName, m => m.MapFrom(src => src.Building.BuildingName))
            .ForMember(dto => dto.FloorName, m => m.MapFrom(src => src.Floor.FloorName));

            mapperConfiguration.CreateMap <RequestDto, Request>()
            .ForMember(dto => dto.CreationBy, m => m.MapFrom(src => src.RoomId))
            .ForMember(dto => dto.ModifiedBy, m => m.Ignore());
            mapperConfiguration.CreateMap <Request, RequestDto>()
            .ForMember(dto => dto.FeatureNameDictionary,
                       m => m.MapFrom(src => src.Feature.FeatureTranslations.ToDictionary(
                                          translation => translation.Language.ToLower(), translation => translation.FeatureName)))
            .ForMember(dto => dto.RestaurantName,
                       m => m.MapFrom(src => src.Feature.Type == Enums.FeatureType.Restaurant? src.Restaurant.RestaurantTranslations.ToDictionary(
                                          translation => translation.Language.ToLower(), translation => translation.RestaurantName)
                        : new Dictionary <string, string>()))
            .ForMember(dto => dto.RoomName, m => m.MapFrom(src => src.Creater.UserName))
            .ForMember(dto => dto.RoomId, m => m.MapFrom(src => src.Creater.UserId))
            .ForMember(dto => dto.CreateTime, m => m.MapFrom(src => src.CreateTime))
            .ForMember(dto => dto.ModifyTime, m => m.MapFrom(src => src.ModifyTime))
            .ForMember(dto => dto.Modifier, m => m.MapFrom(src => src.Modifier.UserName))
            .ForMember(dto => dto.RequestDetails, m => m.MapFrom(src => src.RequestDetails))
            .ForMember(dto => dto.Type, m => m.MapFrom(src => src.Feature.Type));


            mapperConfiguration.CreateMap <RequestDetail, RequestDetailDto>()
            .ForMember(dto => dto.DescriptionDictionary,
                       m => m.MapFrom(src => src.Request.Feature.Type == Enums.FeatureType.Normal? src.FeatureDetail.FeatureDetailTranslations.ToDictionary(
                                          translation => translation.Language.ToLower(), translation => translation.Description)
                        : src.ItemSize.Item.ItemTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.ItemName)))
            .ForMember(dto => dto.Price, m => m.MapFrom(src => src.Price));
            //.ForMember(dto => dto.IsFree, m => m.MapFrom(src => src.FeatureDetail.IsFree));
            mapperConfiguration.CreateMap <RequestDetailDto, RequestDetail>();



            mapperConfiguration.CreateMap <RestaurantTypeTranslation, RestaurantTypeDto>();
            mapperConfiguration.CreateMap <RestaurantType, RestaurantTypeDto>()
            .ForMember(dto => dto.TypeNameDictionary, m => m.MapFrom(src => src.RestaurantTypeTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.TypeName)));

            mapperConfiguration.CreateMap <Restaurant, RestaurantDTO>()
            .ForMember(dto => dto.RestaurantName,
                       m => m.MapFrom(src => src.RestaurantTranslations.FirstOrDefault().RestaurantName))
            .ForMember(dto => dto.RestaurantDescription,
                       m => m.MapFrom(src => src.RestaurantTranslations.FirstOrDefault().RestaurantDescription))
            .ForMember(dto => dto.RestaurantTypeName,
                       m => m.MapFrom(src => src.RestaurantType.RestaurantTypeTranslations.FirstOrDefault().TypeName))
            .ForMember(dto => dto.RestaurantAdminPassword,
                       m => m.MapFrom(src => PasswordHelper.Decrypt(src.RestaurantAdmin.Password)))
            .ForMember(dto => dto.Image, m => m.Ignore())
            // .ForMember(dto => dto.ConsumedWaiters,m => m.MapFrom(src => src.RestaurantWaiters.Count(x=>!x.IsDeleted)))
            .ForMember(dto => dto.RestaurantTypeNameDictionary, m => m.MapFrom(src => src.RestaurantType.RestaurantTypeTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.TypeName)))
            .ForMember(dto => dto.RestaurantNameDictionary, m => m.MapFrom(src => src.RestaurantTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.RestaurantName)))
            .ForMember(dto => dto.RestaurantDescriptionDictionary, m => m.MapFrom(src => src.RestaurantTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.RestaurantDescription)));
            //.ForMember(dto => dto.RestaurantAdminUserName,
            //    m => m.MapFrom(src => PasswordHelper.Decrypt(src.RestaurantAdmin.UserName)));

            mapperConfiguration.CreateMap <Restaurant, RestaurantNameDto>()
            .ForMember(dto => dto.RestaurantNameDictionary, m => m.MapFrom(src => src.RestaurantTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.RestaurantName)));

            mapperConfiguration.CreateMap <CategoryDTO, Category>();
            mapperConfiguration.CreateMap <Category, CategoryDTO>()
            .ForMember(dest => dest.CategoryName, m => m.MapFrom(src => src.CategoryTranslations.FirstOrDefault().CategoryName))
            .ForMember(dest => dest.RestaurantId, m => m.MapFrom(src => src.Menu.RestaurantId))
            .ForMember(dto => dto.CategoryNameDictionary, m => m.MapFrom(src => src.CategoryTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.CategoryName)));

            mapperConfiguration.CreateMap <MenuDTO, Menu>();
            mapperConfiguration.CreateMap <Menu, MenuDTO>()
            .ForMember(dest => dest.MenuName, m => m.MapFrom(src => src.MenuTranslations.FirstOrDefault().MenuName))
            .ForMember(dto => dto.MenuNameDictionary, m => m.MapFrom(src => src.MenuTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.MenuName)));

            mapperConfiguration.CreateMap <Menu, MenuWithCategoriesDTO>()
            .ForMember(dest => dest.MenuName, m => m.MapFrom(src => src.MenuTranslations.FirstOrDefault().MenuName))
            .ForMember(dest => dest.Categories, m => m.MapFrom(src => src.Categories));

            mapperConfiguration.CreateMap <ItemSize, SizeDto>()
            .ForMember(dest => dest.SizeName, m => m.MapFrom(src => src.Size.SizeTranslations.FirstOrDefault(x => x.Language.ToLower() == Thread.CurrentThread.CurrentCulture.Name.ToLower()).SizeName))
            .ForMember(dto => dto.SizeNameDictionary, m => m.MapFrom(src => src.Size.SizeTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.SizeName)));
            mapperConfiguration.CreateMap <ItemSideItem, SideItemDTO>()
            .ForMember(dest => dest.SideItemName, m => m.MapFrom(src => src.SideItem.SideItemTranslations.FirstOrDefault(x => x.Language.ToLower() == Thread.CurrentThread.CurrentCulture.Name.ToLower()).SideItemName))
            .ForMember(dest => dest.Value, m => m.MapFrom(src => src.SideItem.Value))
            .ForAllMembers(opts => opts.Condition(src =>
            {
                var sideItemTranslation = src.SideItem.SideItemTranslations
                                          .FirstOrDefault(x => x.Language.ToLower() ==
                                                          Thread.CurrentThread.CurrentCulture.Name.ToLower());
                return(sideItemTranslation != null && sideItemTranslation
                       .SideItemName != null);
            }));
            mapperConfiguration.CreateMap <ItemDTO, Item>();
            mapperConfiguration.CreateMap <Item, ItemDTO>()
            .ForMember(dest => dest.ItemName, m => m.MapFrom(src => src.ItemTranslations.FirstOrDefault().ItemName))
            .ForMember(dest => dest.ItemDescription, m => m.MapFrom(src => src.ItemTranslations.FirstOrDefault().ItemDescription))
            .ForMember(dest => dest.MenuId, m => m.MapFrom(src => src.Category.MenuId))
            .ForMember(dest => dest.RestaurantId, m => m.MapFrom(src => src.Category.Menu.RestaurantId))
            .ForMember(dest => dest.Sizes, m => m.MapFrom(src => src.ItemSizes.Where(x => !x.Size.IsDeleted)))
            .ForMember(dest => dest.ItemSizes, m => m.MapFrom(src => src.ItemSizes.Where(x => !x.Size.IsDeleted)))
            .ForMember(dest => dest.SideItems, m => m.MapFrom(src => src.ItemSideItems.Where(x => !x.SideItem.IsDeleted)))
            .ForMember(dto => dto.ItemNameDictionary, m => m.MapFrom(src => src.ItemTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.ItemName)))
            .ForMember(dto => dto.ItemDescriptionDictionary, m => m.MapFrom(src => src.ItemTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.ItemDescription)));

            mapperConfiguration.CreateMap <ItemSize, ItemSizeDto>()
            .ForMember(dest => dest.SizeName, m => m.MapFrom(src => src.Size.SizeTranslations.FirstOrDefault().SizeName))
            .ForMember(dto => dto.SizeNameDictionary, m => m.MapFrom(src => src.Size.SizeTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.SizeName)));

            mapperConfiguration.CreateMap <SizeDto, Size>();
            mapperConfiguration.CreateMap <Size, SizeDto>()
            .ForMember(dest => dest.SizeName, m => m.MapFrom(src => src.SizeTranslations.FirstOrDefault().SizeName))
            .ForMember(dto => dto.SizeNameDictionary, m => m.MapFrom(src => src.SizeTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.SizeName)));

            mapperConfiguration.CreateMap <SideItemDTO, SideItem>();
            mapperConfiguration.CreateMap <SideItem, SideItemDTO>()
            .ForMember(dest => dest.SideItemName, m => m.MapFrom(src => src.SideItemTranslations.FirstOrDefault().SideItemName));

            mapperConfiguration.CreateMap <Item, ItemNamesDto>()
            .ForMember(dest => dest.ItemName, m => m.MapFrom(src => src.ItemTranslations.FirstOrDefault().ItemName));

            mapperConfiguration.CreateMap <RestaurantWaiterDTO, RestaurantWaiter>();
            mapperConfiguration.CreateMap <RestaurantWaiter, RestaurantWaiterDTO>()
            .ForMember(dto => dto.Password, m => m.MapFrom(src => PasswordHelper.Decrypt(src.Password)))
            .ForMember(dto => dto.BranchTitleDictionary, m => m.MapFrom(src => src.Branch.BranchTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.BranchTitle)));
            //.ForMember(dto => dto.Start, m => m.MapFrom(src => src.Package.Start.Date.ToShortDateString()))
            //.ForMember(dto => dto.End, m => m.MapFrom(src => src.Package.End.Date.ToShortDateString()));

            mapperConfiguration.CreateMap <Background, BackgroundDto>();
            mapperConfiguration.CreateMap <BackgroundDto, Background>();
            mapperConfiguration.CreateMap <Template, TemplateDTO>();

            mapperConfiguration.CreateMap <Category, CategoryNamesDTO>()
            .ForMember(dest => dest.ItemCount, m => m.MapFrom(src => src.Items.Count(x => x.IsActive)))
            .ForMember(dto => dto.CategoryNameDictionary, m => m.MapFrom(src => src.CategoryTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.CategoryName)));

            mapperConfiguration.CreateMap <PageDTO, Page>();

            mapperConfiguration.CreateMap <BranchDto, Branch>();
            mapperConfiguration.CreateMap <Branch, BranchDto>()
            .ForMember(dest => dest.BranchTitle, m => m.MapFrom(src => src.BranchTranslations.FirstOrDefault().BranchTitle))
            .ForMember(dest => dest.BranchAddress, m => m.MapFrom(src => src.BranchTranslations.FirstOrDefault().BranchAddress))
            .ForMember(dto => dto.BranchTitleDictionary, m => m.MapFrom(src => src.BranchTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.BranchTitle)))
            .ForMember(dto => dto.BranchAddressDictionary, m => m.MapFrom(src => src.BranchTranslations.ToDictionary(translation => translation.Language.ToLower(), translation => translation.BranchAddress)));

            mapperConfiguration.CreateMap <FeedBackDto, FeedBack>();
            mapperConfiguration.CreateMap <FeedBack, FeedBackDto>()
            .ForMember(dto => dto.RoomName, m => m.MapFrom(src => src.Creater.UserName));

            mapperConfiguration.CreateMap <BuildingDto, Building>();
            mapperConfiguration.CreateMap <Building, BuildingDto>();

            mapperConfiguration.CreateMap <FloorDto, Floor>();
            mapperConfiguration.CreateMap <Floor, FloorDto>();

            mapperConfiguration.CreateMap <FeaturesBackground, FeaturesBackgroundDto>();
            mapperConfiguration.CreateMap <FeaturesBackgroundDto, FeaturesBackground>();

            mapperConfiguration.CreateMap <Available, AvailableDto>();
            mapperConfiguration.CreateMap <AvailableDto, Available>();
            mapperConfiguration.CreateMap <Room, RoomNameDto>()
            .ForMember(dto => dto.RoomName, m => m.MapFrom(src => src.UserName))
            .ForMember(dto => dto.RoomId, m => m.MapFrom(src => src.UserId));
            mapperConfiguration.CreateMap <Feature, FeatureNameDto>()
            .ForMember(dto => dto.FeatureNameDictionary,
                       m => m.MapFrom(src => src.FeatureTranslations.ToDictionary(
                                          translation => translation.Language.ToLower(), translation => translation.FeatureName)));

            mapperConfiguration.CreateMap <Request, RequestStatusDto>()
            .ForMember(dto => dto.RoomName, m => m.MapFrom(src => src.Creater.UserName))
            .ForMember(dto => dto.RoomId, m => m.MapFrom(src => src.Creater.UserId))
            .ForMember(dto => dto.CreateTime, m => m.MapFrom(src => src.CreateTime))
            .ForMember(dto => dto.ModifyTime, m => m.MapFrom(src => src.ModifyTime));
            //mapperConfiguration.CreateMap<Control, ControlDto>()
            //    .ForMember(dto => dto.NameDictionary,
            //        m => m.MapFrom(src => src.ControlTranslations.ToDictionary(
            //            translation => translation.Language.ToLower(), translation => translation.Name)));

            Mapper.Initialize(mapperConfiguration);
            //Mapper.Initialize(m =>
            //{
            //    m.CreateMap<User, UserDto>();

            //});
        }