using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using MPKey = MessagePack.KeyAttribute;
using MPObj = MessagePack.MessagePackObjectAttribute;
using N_JsonProperty = Newtonsoft.Json.JsonPropertyAttribute;
using S_JsonProperty = System.Text.Json.Serialization.JsonPropertyNameAttribute;
namespace System.Application.Models
{
///
[MPObj]
[Serializable]
[DebuggerDisplay("{DebuggerDisplay(),nq}")]
public sealed class PagedModel : IPagedModel, IReadOnlyPagedModel
{
string DebuggerDisplay() => $"Current: {Current}, Total: {Total}, Count: {mDataSource?.Count ?? 0}, PageSize: {PageSize}";
List? mDataSource;
[MPKey(0)]
[N_JsonProperty("0")]
[S_JsonProperty("0")]
public List DataSource
{
get
{
if (mDataSource == null) mDataSource = new List();
return mDataSource;
}
set
{
mDataSource = value;
}
}
[MPKey(1)]
[N_JsonProperty("1")]
[S_JsonProperty("1")]
public int Current { get; set; } = IPagedModel.DefaultCurrent;
[MPKey(2)]
[N_JsonProperty("2")]
[S_JsonProperty("2")]
public int PageSize { get; set; } = IPagedModel.DefaultPageSize;
[MPKey(3)]
[N_JsonProperty("3")]
[S_JsonProperty("3")]
public int Total { get; set; }
bool IExplicitHasValue.ExplicitHasValue()
{
return Total > 0 && PageSize > 0 && Current > 0 &&
Current <= ((IPagedModel)this).PageCount &&
mDataSource.Any_Nullable();
}
IReadOnlyList IReadOnlyPagedModel.DataSource => DataSource;
IList IPagedModel.DataSource
{
get => DataSource;
set => DataSource = value is List list ? list : value.ToList();
}
}
}