using System; using InABox.Core; namespace InABox.Clients { public class QueryDef : IQueryDef { public QueryDef(Type type) { Type = type; } public Type Type { get; private set; } public IFilter? Filter { get; set; } public IColumns? Columns { get; set; } public ISortOrder? SortOrder { get; set; } } public class QueryDef : IQueryDef where T : Entity, IRemotable, IPersistent, new() { public QueryDef(Filter? filter = null, Columns? columns = null, SortOrder? sortorder = null) { Type = typeof(T); Filter = filter; Columns = columns; SortOrder = sortorder; } public Type Type { get; } public IFilter? Filter { get; } public IColumns? Columns { get; } public ISortOrder? SortOrder { get; } } public class KeyedQueryDef : QueryDef, IKeyedQueryDef { public string Key { get; } public KeyedQueryDef(string key, Type type, IFilter? filter = null, IColumns? columns = null, ISortOrder? sortOrder = null) : base(type) { Key = key; Filter = filter; Columns = columns; SortOrder = sortOrder; } } public class KeyedQueryDef : QueryDef, IKeyedQueryDef where T : Entity, IRemotable, IPersistent, new() { public string Key { get; } public KeyedQueryDef( string key, Filter? filter = null, Columns? columns = null, SortOrder? sortorder = null): base(filter, columns, sortorder) { Key = key; } public KeyedQueryDef( Filter? filter = null, Columns? columns = null, SortOrder? sortorder = null): base(filter, columns, sortorder) { Key = typeof(T).Name; } } /*public class HeadQueryDef : IQueryDef where T : Entity, new() { public HeadQueryDef(Filter filter, Columns columns, SortOrder sortorder) { Type = typeof(T); Filter = filter; Columns = columns; SortOrder = sortorder; } public Type Type { get; set; } public object Filter { get; set; } public object Columns { get; set; } public object SortOrder { get; set; } } public interface IChildQueryDef : IQueryDef { } public class ChildQueryDef : IChildQueryDef where T : Entity, new() { public ChildQueryDef(Filter filter, Columns columns, SortOrder sortorder) { Type = typeof(T); Filter = filter; Columns = columns; SortOrder = sortorder; } public Type Type { get; set; } public object Filter { get; set; } public object Columns { get; set; } public object SortOrder { get; set; } }*/ }