147 lines
5.4 KiB
C#
147 lines
5.4 KiB
C#
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
|
|
{
|
|
//=======================================================================
|
|
public class SaxSessionData_Online : SaxSessionData_Web
|
|
{
|
|
//-------------------------------------------------------------------
|
|
// Construction.
|
|
[JsonConstructor]
|
|
private SaxSessionData_Online(SaxSessionContext sessionContext) : this(sessionContext, null, null) { }
|
|
/// <summary>
|
|
/// SessionData construction.
|
|
/// <para>SessionContext and UserAccount must be supplied.</para>
|
|
/// <para>Organisation is optional.</para>
|
|
/// </summary>
|
|
public SaxSessionData_Online(SaxSessionContext sessionContext, SaxUserAccount userAccount, List<SaxUserRole> userRoles) :
|
|
base(sessionContext, userAccount, userRoles)
|
|
{
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Security.
|
|
/// <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
|
|
{
|
|
/// <summary>Id for currently selected Organisation.</summary>
|
|
public SysId OrganisationId { get; set; }
|
|
/// <summary>Display text for currently selected Organisation.</summary>
|
|
public String OrganisationCaption { get; set; }
|
|
/// <summary>
|
|
/// Store the properties for the currently selected Organisation.
|
|
/// </summary>
|
|
public bool SetOrganisation(SaxOrganisation organisation)
|
|
{
|
|
if (organisation == null) return false;
|
|
if (!organisation.IsStatusActive) return false;
|
|
OrganisationId = organisation.Id;
|
|
OrganisationCaption = organisation.Name;
|
|
return true;
|
|
}
|
|
/// <summary>Id for currently selected Organisation of which the user is a member.</summary>
|
|
public SysId OrganisationIdMember { get; set; }
|
|
/// <summary>Display text for currently selected Organisation of which the user is a member.</summary>
|
|
public String OrganisationCaptionMember { get; set; }
|
|
/// <summary>
|
|
/// Store the properties for the currently selected Organisation for which the User is a member.
|
|
/// </summary>
|
|
public bool SetMemberOrganisation(SaxOrganisation organisation)
|
|
{
|
|
if (organisation == null) return false;
|
|
if (!organisation.IsStatusActive) return false;
|
|
OrganisationIdMember = organisation.Id;
|
|
OrganisationCaptionMember = organisation.Name;
|
|
return true;
|
|
}
|
|
}
|
|
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());
|
|
}
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|