using Newtonsoft.Json;
using Sarand.BusinessMgr.Net.Standard.Base.Core;
using Sarand.Net.Standard.Base.Dbas;
using Sarand.Net.Standard.Base.Helpers;
using System;
namespace Sarand.BusinessMgr.Net.Standard.Base.App
{
//=======================================================================
///
/// Basic user session data, shared by Portal and Control applications.
///
public abstract class SbmSessionData : ISbmUserContext
{
//-------------------------------------------------------------------
// Definitions.
// User.
public class UserData
{
protected UserData() { }
protected UserData(SbmSessionContext sessionContext)
{
}
protected UserData(UserData userData)
{
Title = userData.Title;
FirstName = userData.FirstName;
LastName = userData.LastName;
DisplayName = userData.DisplayName;
EmailAddress = userData.EmailAddress;
}
// Properties.
public String Title { get; protected set; }
public String FirstName { get; protected set; }
public String LastName { get; protected set; }
public String DisplayName { get; protected set; }
public String EmailAddress { get; protected set; }
// Refresh properties.
protected bool Refresh()
{
return true;
}
}
//-------------------------------------------------------------------
// Data members.
private static long sessionIdxNext { get; set; } = SacsRandomHelper.GetInt32(100001, 199999);
private static long dataIdxNext { get; set; } = 1000001;
//-------------------------------------------------------------------
// Construction.
///
/// Constructor to persist the Session index, eg. for deserialisation from Session.
/// - Session index of zero indicates sessionless data, eg. background tasks.
/// - Session index less than zero will assign a new value.
///
protected SbmSessionData(long sessionIdx, SbmSessionContext sessionContext)
{
SessionIdx = sessionIdx >= 0 ? sessionIdx : sessionIdxNext++;
DataIdx = dataIdxNext++;
SessionContext = sessionContext;
}
///
/// Main constructor.
/// - SessionContext must be supplied.
///
protected SbmSessionData(SbmSessionContext sessionContext)
{
SessionIdx = sessionIdxNext++;
DataIdx = dataIdxNext++;
SessionContext = sessionContext;
}
//-------------------------------------------------------------------
// Properties.
///
/// Session Index - assigned in sequence and persistent when data is serialised/deserialised.
///
public long SessionIdx { get; }
///
/// Data Index - assigned in sequence for each object constructed.
///
public long DataIdx { get; }
// Session context.
public SbmSessionContext SessionContext { get; }
// User properties.
[JsonIgnore]
public abstract String UserEmailAddress { get; }
[JsonIgnore]
public abstract String UserDisplayName { get; }
[JsonIgnore]
public abstract bool ValidUser { get; }
[JsonIgnore]
public abstract DbUpdateInfo DbUpdateInfo { get; }
//-------------------------------------------------------------------
}
//=======================================================================
}