Activity index, Db schema validation.
This commit is contained in:
2021-05-31 20:27:40 +01:00
parent 63473c725b
commit 7b0a710b13
36 changed files with 1008 additions and 208 deletions
@@ -1,11 +1,15 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Sarand.Net.Standard.Base.App;
using Sarand.Net.Standard.Base.Bus;
using Sarand.Net.Standard.Base.Core;
using Saxonite.Net.Core.Web.Base.App;
using Saxonite.Net.Standard.Base.App;
using Saxonite.Net.Standard.Base.Bus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Threading.Tasks;
namespace Saxonite.Net.Core.Web.Online.App
@@ -32,6 +36,54 @@ namespace Saxonite.Net.Core.Web.Online.App
/// <summary>User - JSON deserialisation route.</summary>
public new UserData User { get { return base.User; } set { SetUser(value); } }
//-------------------------------------------------------------------
// User Profile.
// Protected constructors & setters for JSON deserialisation.
public class UserProfileData
{
public UserProfileData() { }
// Sports.
public class SportData
{
public SportData(SysId sportId, SaStatus status)
{
SportId = sportId;
Status = status;
}
public SysId SportId { get; protected set; }
public SaStatus Status { get; protected set; }
}
private class SportData_Online : SportData
{
// Internal class to allow values to be updated.
public SportData_Online(SysId sportId, SaStatus status) : base(sportId, status) { }
public SportData_Online(SportData sportData) : base(sportData.SportId, sportData.Status) { }
public void SetSportId(SysId sportId) { SportId = sportId; }
public void SetStatus(SaStatus status) { Status = status; }
}
[JsonIgnore]
private readonly List<SportData_Online> sports = new List<SportData_Online>();
[JsonIgnore]
public int SportCount { get { return sports.Count; } }
public List<SportData> Sports { get { return new List<SportData>(sports); } protected set { sports.Clear(); sports.AddRange(value.Select(item => new SportData_Online(item))); } }
public void AddSport(SysId sportId, SaStatus status)
{
if (!SysId.IsValid(sportId)) throw new NotSupportedException("Session Profile Sport must have a valid Id");
SportData_Online sport = this.sports.Find(item => item.SportId == sportId);
if (sport != null)
{
sport.SetStatus(status);
}
else
this.sports.Add(new SportData_Online(sportId, status));
}
public void ClearSports()
{
this.sports.Clear();
}
}
public UserProfileData Profile { get; protected set; } = new UserProfileData();
//-------------------------------------------------------------------
// Filter properties.
public class FilterData
@@ -69,6 +121,25 @@ namespace Saxonite.Net.Core.Web.Online.App
}
public FilterData Filter { get; private set; } = new FilterData();
//-------------------------------------------------------------------
// JSON Deserialisation.
[JsonExtensionData]
#pragma warning disable IDE0044 // Add readonly modifier
private IDictionary<string, JToken> _additionalData;
#pragma warning restore IDE0044 // Add readonly modifier
[OnDeserialized]
private void OnDeserialized(StreamingContext context)
{
if (_additionalData != null)
{
foreach (String name in _additionalData.Keys)
{
JToken value = _additionalData[name];
SaLogger.Info("OnDeserialized Name: " + name + ". Value: " + value.ToString());
}
}
}
//-------------------------------------------------------------------
}
//=======================================================================