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);
}
}