//using AsbCloudApp.Data;
//using AsbCloudApp.Services;
//using AsbCloudDb.Model;
//using AsbCloudInfrastructure.Services.Cache;
//using Mapster;
//using Microsoft.EntityFrameworkCore;
//using System;
//using System.Linq;
//using System.Threading;
//using System.Threading.Tasks;

//namespace AsbCloudInfrastructure.Services
//{
//    public class _CachedCrudService<Tdto, TModel> : ICachedCrudService<Tdto>
//        where TModel : class, AsbCloudDb.Model.IId
//        where Tdto : AsbCloudApp.Data.IId
//    {
//        private readonly CacheTable<TModel> cache;

//        public _CachedCrudService(IAsbCloudDbContext db, Cache.CacheDb cacheDb)
//        {
//            cache = cacheDb.GetCachedTable<TModel>((DbContext)db);
//        }

//        public virtual async Task<PaginationContainer<Tdto>> GetAsync(int skip = 0, int take = 32, CancellationToken token = default)
//        {
//            var count = cache.Count();
//            var result = new PaginationContainer<Tdto> { Skip = skip, Take = take, Count = count };
//            if (count <= skip)
//                return result;

//            var items = await cache.WhereAsync(token).ConfigureAwait(false);

//            result.Items.AddRange(items.OrderBy(i => i.Id).Skip(skip).Take(take).Select(i => Convert(i)));

//            return result;
//        }

//        public virtual Task<Tdto> GetAsync(int id, CancellationToken token = default)
//        {
//            throw new NotImplementedException();
//        }

//        public virtual Tdto Convert(TModel src) => src.Adapt<Tdto>();

//        public virtual TModel Convert(Tdto src) => src.Adapt<TModel>();
//    }
//}