using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using ServiceStack.OrmLite; using ServiceStack.OrmLite.Dapper; using zero.Extensions; using zero.Models; using zero.Utils; namespace zero.Sqlite; public partial class DbOperations : IDbOperations { /// public virtual async Task Load(string id, string changeVector = null) where T : ZeroIdEntity, new() { if (id.IsNullOrWhiteSpace()) { return null; } if (!changeVector.IsNullOrEmpty()) { //return WhenActive(await GetRevision(changeVector)); // TODO } return WhenActive(await Db.SingleByIdAsync(id)); } /// public virtual async Task> Load(IEnumerable ids) where T : ZeroIdEntity, new() { ids = ids.Distinct().ToArray(); List models = await Db.SelectByIdsAsync(ids); Dictionary result = new(); foreach (string id in ids) { T model = models.FirstOrDefault(x => x.Id == id); result.Add(id, WhenActive(model)); } return result; } /// public virtual async Task> LoadAsList(IEnumerable ids) where T : ZeroIdEntity, new() { ids = ids.Distinct().ToArray(); List models = await Db.SelectByIdsAsync(ids); List result = []; foreach (string id in ids) { T model = models.FirstOrDefault(x => x.Id == id); if (WhenActive(model) != null) { result.Add(model); } } return result; } /// public virtual async Task Any(Expression> querySelector = null) where T : ZeroIdEntity, new() { return await Db.ExistsAsync(querySelector ?? (x => true)); } /// public virtual async Task> Load(Expression> querySelector) where T : ZeroIdEntity, new() { return await Db.SelectAsync(querySelector ?? (x => true)); } /// public virtual async Task Find(Expression> querySelector) where T : ZeroIdEntity, new() { return await Db.SingleAsync(querySelector); } /// public virtual async Task> LoadBySql(Func, SqlExpression> querySelector) where T : ZeroIdEntity, new() { return await Db.SelectAsync(querySelector(Db.From())); } /// public virtual async Task> LoadAll() where T : ZeroIdEntity, new() { return await Db.SelectAsync(x => true); } }