public virtual void Configure(EntityTypeBuilder <TEntity> builder)
        {
            var name = typeof(TEntity).Name;

            builder.ToTable(name);

            builder.HasKey(x => x.Id);
            builder.Property(e => e.Id)
            .ValueGeneratedOnAdd();

            builder.HasQueryFilter(entity => Convert.ToInt32(CustomDbFunctions.JsonValue(entity.Audit, "$[0].t")) != (int)LogTypeEnum.Delete);
        }
        public IQueryable <TSource> AdminSeachConditions <TSource, TSearch>(IQueryable <TSource> query, TSearch searchModel, CurrentUserViewModel currentUser = null) where TSource : BaseEntity where TSearch : BaseSearchModel
        {
            currentUser = currentUser ?? CurrentUser();
            if (currentUser == null)
            {
                return(query);
            }

            if (searchModel == null)
            {
                return(query);
            }

            if (!string.IsNullOrEmpty(searchModel.CreationDateFrom))
            {
                var dateTime = searchModel.CreationDateFrom.PersianToGregorian().ToString("yyyy/MM/dd", new CultureInfo("en-US"));
                query = query.Where(x => CustomDbFunctions.DateDiff("DAY", dateTime, CustomDbFunctions.JsonValue(x.Audit, "$[0].d")) <= 0);
            }

            if (!string.IsNullOrEmpty(searchModel.CreationDateTo))
            {
                var dateTime = searchModel.CreationDateTo.PersianToGregorian().ToString("yyyy/MM/dd", new CultureInfo("en-US"));
                query = query.Where(x => CustomDbFunctions.DateDiff("DAY", dateTime, CustomDbFunctions.JsonValue(x.Audit, "$[0].d")) >= 0);
            }

            if (currentUser.Role == Role.SuperAdmin || currentUser.Role == Role.Admin)
            {
                if (string.IsNullOrEmpty(searchModel.CreatorId))
                {
                    return(query);
                }

                query = query.Where(entity => CustomDbFunctions.JsonValue(entity.Audit, "$[0].i") == searchModel.CreatorId);
            }

            return(query);
        }