264 lines
9.9 KiB
C#
264 lines
9.9 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.Extensions.Logging;
|
|
using Saxonite.Net.Core.Web.Online.Models;
|
|
using Saxonite.Net.Core.Web.Base.App;
|
|
using Saxonite.Net.Core.Web.Base.Controllers;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Saxonite.Net.Standard.Base.Bus;
|
|
using Sarand.Net.Standard.Base.App;
|
|
using Sarand.Net.Standard.Base.Bus;
|
|
using Sarand.Net.Standard.Base.Utils;
|
|
using Sarand.Net.Standard.Base.Core;
|
|
using Sarand.Net.Standard.Base.Dbas;
|
|
|
|
namespace Saxonite.Net.Core.Web.Online.Controllers
|
|
{
|
|
//=======================================================================
|
|
// Online Account Controller - Sports - Ajax actions.
|
|
//=======================================================================
|
|
partial class AccountController
|
|
{
|
|
//-------------------------------------------------------------------
|
|
// Data definitions.
|
|
public class ProfileSportResponseData_List
|
|
{
|
|
public long Id { get; set; }
|
|
public long SportId { get; set; }
|
|
public String SportName { get; set; }
|
|
public String StatusCode { get; set; }
|
|
public String StatusDesc { get; set; }
|
|
}
|
|
public class ProfileSportResponseData_Item : ProfileSportResponseData_List
|
|
{
|
|
public String CreatedOnFmt { get; set; }
|
|
}
|
|
private void PopulateProfileSportResponseData(Model_Account model, SaxUserSport userSport, SaxSport sport, ProfileSportResponseData_Item data)
|
|
{
|
|
data.Id = SysId.ToLong(userSport.Id);
|
|
data.SportId = SysId.ToLong(userSport.SportId);
|
|
data.SportName = sport.Name;
|
|
data.CreatedOnFmt = DateUtil.Format(userSport.CreateStamp.On, "d-MMM-yyyy");
|
|
data.StatusCode = userSport.StatusCode;
|
|
data.StatusDesc = userSport.StatusDesc;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Account - Get Profile Sports.
|
|
//-------------------------------------------------------------------
|
|
public class AjaxResponse_ProfileSportsData : AjaxResponse_Data
|
|
{
|
|
public List<ProfileSportResponseData_List> Sports { get; } = new List<ProfileSportResponseData_List>();
|
|
}
|
|
// Ajax request.
|
|
[HttpPost]
|
|
[Route("Account/Ajax/GetProfileSports")]
|
|
public IActionResult GetProfileSports(Model_Account model)
|
|
{
|
|
String fn = GetType().Name + ".GetProfileSports";
|
|
AjaxResponse_ProfileSportsData responseData = new AjaxResponse_ProfileSportsData();
|
|
String messageTitle = Localiser["account.caption.profile.sports"];
|
|
|
|
// Validate session and referrer.
|
|
if (!ValidReferer)
|
|
return Forbid();
|
|
if (!ValidUserSession)
|
|
return GetAjaxResult_InvalidSession(responseData);
|
|
|
|
// Item filter.
|
|
SaxUserSport.Params prmUserSport = new SaxUserSport.Params();
|
|
prmUserSport.UserAccountIdsIncluded.Add(SessionData.User.UserAccountId);
|
|
prmUserSport.StatusCat = SaxUserSport.StatusCat.NotDeleted;
|
|
model.DataItemTotal = (ulong)AccountMgr.GetUserSportCount(prmUserSport);
|
|
model.PopulatePagingTo(prmUserSport.ResultsPaging);
|
|
|
|
// Item columns.
|
|
ColumnDfn colId = AccountMgr.GetUserSportColumnDfn(SaxUserSport.Column.Id);
|
|
ColumnDfn colSportId = AccountMgr.GetUserSportColumnDfn(SaxUserSport.Column.SportId);
|
|
ColumnDfn colSportName = AccountMgr.GetUserSportColumnDfn(SaxUserSport.Column.Sport_Name);
|
|
ColumnDfn colStatus = AccountMgr.GetUserSportColumnDfn(SaxUserSport.Column.Status);
|
|
List<ColumnDfn> columns = new List<ColumnDfn>()
|
|
{
|
|
colId,
|
|
colSportId, colSportName,
|
|
colStatus,
|
|
};
|
|
|
|
// Sort columns.
|
|
prmUserSport.SortColumns.Add(colSportName);
|
|
|
|
// Query items.
|
|
model.DataItemCount = 0;
|
|
using (DbResultSet resultSet = AccountMgr.ExecuteUserSportQuery(columns, prmUserSport))
|
|
{
|
|
while (resultSet != null && resultSet.HasRows && resultSet.NextRecord())
|
|
{
|
|
model.DataItemCount++;
|
|
NamedValue.Map values = resultSet.GetRecordValues();
|
|
ProfileSportResponseData_List userSportData = new ProfileSportResponseData_List()
|
|
{
|
|
Id = values.GetLong(colId.DataName),
|
|
SportId = values.GetLong(colSportId.DataName),
|
|
SportName = values.GetString(colSportName.DataName),
|
|
StatusCode = values.GetString(colStatus.DataName),
|
|
StatusDesc = SacsSystem.GetStatusDescForCode(values.GetString(colStatus.DataName))
|
|
};
|
|
responseData.Sports.Add(userSportData);
|
|
}
|
|
}
|
|
|
|
// Complete response.
|
|
responseData.SetPaging(model);
|
|
responseData.Success = true;
|
|
return Json(responseData);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Get Profile Sport ajax request.
|
|
//-------------------------------------------------------------------
|
|
public class AjaxResponse_ProfileSport : AjaxResponse_Data
|
|
{
|
|
public ProfileSportResponseData_Item Sport { get; } = new ProfileSportResponseData_Item();
|
|
}
|
|
//-------------------------------------------------------------------
|
|
[HttpPost]
|
|
[Route("Account/Ajax/GetProfileSport")]
|
|
public IActionResult Ajax_GetProfileSport(Model_Account model)
|
|
{
|
|
String fn = GetType().Name + ".Ajax_GetProfileSport";
|
|
String messageTitle = Localiser["account.caption.profile.sport"];
|
|
AjaxResponse_ProfileSport responseData = new AjaxResponse_ProfileSport();
|
|
|
|
// Validate session and referrer.
|
|
if (!ValidReferer)
|
|
return Forbid();
|
|
if (!ValidUserSession)
|
|
return GetAjaxResult_InvalidSession(responseData);
|
|
|
|
// Identify item.
|
|
SysId userSportId = model.UserSportId.ToSysId();
|
|
if (!SysId.IsValid(userSportId))
|
|
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.specified"]));
|
|
|
|
// Retrieve item.
|
|
SaxUserSport userSport = AccountMgr.GetUserSportById(userSportId);
|
|
if (userSport == null)
|
|
{
|
|
SaLogger.Warn(fn + " Failed to retrieve User Sport for Id: '" + model.UserSportId + "'");
|
|
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
|
|
}
|
|
|
|
// Retrieve sport.
|
|
SaxSport sport = ReferenceMgr.GetSportById(userSport.SportId);
|
|
if (sport == null)
|
|
{
|
|
SaLogger.Warn(fn + " Failed to retrieve Sport for Id: '" + userSport.SportId + "'");
|
|
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
|
|
}
|
|
|
|
// Construct response.
|
|
PopulateProfileSportResponseData(model, userSport, sport, responseData.Sport);
|
|
responseData.Success = true;
|
|
return Json(responseData);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Store ProfileSport ajax request.
|
|
//-------------------------------------------------------------------
|
|
[HttpPost]
|
|
[Route("Account/Ajax/StoreProfileSport")]
|
|
public IActionResult Ajax_StoreProfileSport(Model_Account model)
|
|
{
|
|
String fn = GetType().Name + ".Ajax_StoreProfileSport";
|
|
String messageTitle = Localiser["account.caption.profile.sport"];
|
|
AjaxResponse_ProfileSport responseData = new AjaxResponse_ProfileSport();
|
|
|
|
// Validate session and referrer.
|
|
if (!ValidReferer)
|
|
return Forbid();
|
|
if (!ValidUserSession)
|
|
return GetAjaxResult_InvalidSession(responseData);
|
|
|
|
// Validate item properties.
|
|
model.ValidateProfileSportData(responseData);
|
|
if (responseData.HasControlErrors())
|
|
return Json(responseData);
|
|
|
|
// Validate Profile Sport Id against 'Exists' flag.
|
|
SysId userSportId = model.UserSportId.ToSysId();
|
|
bool profileSportExists = StringUtil.ToBool(model.ProfileSportExists);
|
|
if (profileSportExists && !SysId.IsValid(userSportId))
|
|
{
|
|
SaLogger.Warn(fn + " Id not specified for existing Profile Sport.");
|
|
return Json(responseData.SetGoHome(messageTitle, Localiser["msg.error.system"]));
|
|
}
|
|
if (!profileSportExists && SysId.IsValid(userSportId))
|
|
{
|
|
SaLogger.Warn(fn + " Id specified for new Profile Sport: '" + model.UserSportId + "'");
|
|
return Json(responseData.SetGoHome(messageTitle, Localiser["msg.error.system"]));
|
|
}
|
|
|
|
// Retrieve the sport.
|
|
SysId sportId = model.ProfileSportId.ToSysId();
|
|
SaxSport sport = ReferenceMgr.GetSportById(sportId);
|
|
if (sport == null)
|
|
{
|
|
SaLogger.Warn(fn + " Failed to retrieve Sport for Id: " + sportId);
|
|
return Json(responseData.SetGoHome(messageTitle, Localiser["msg.error.system"]));
|
|
}
|
|
|
|
// Retrieve existing item.
|
|
SaxUserSport userSport = AccountMgr.GetUserSportById(userSportId);
|
|
if (userSport == null && SysId.IsValid(userSportId))
|
|
{
|
|
SaLogger.Warn(fn + " Failed to retrieve User Sport for Id: '" + model.UserSportId + "'");
|
|
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.id.not.found"]));
|
|
}
|
|
// Validate user sport properties.
|
|
if (userSport != null)
|
|
{
|
|
if (!userSport.SportId.Equals(sportId))
|
|
{
|
|
SaLogger.Warn(fn + " Inconsistent Sport Id specified for User Sport. Expected: " + userSport.SportId + ". Found: " + sportId);
|
|
return Json(responseData.SetGoHome(messageTitle, Localiser["msg.error.system"]));
|
|
}
|
|
}
|
|
|
|
// Create new item if required.
|
|
if (userSport == null)
|
|
userSport = AccountMgr.CreateUserSport(SessionData.User.UserAccountId, sportId);
|
|
|
|
// Populate item properties.
|
|
|
|
// Store item.
|
|
if (!SysId.IsValid(userSport.Id))
|
|
{
|
|
if (!AccountMgr.InsertUserSport(userSport, DbUpdateInfo))
|
|
{
|
|
SaLogger.Warn(fn + " Failed to insert user sport: " + AccountMgr.ErrorStateMessage);
|
|
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.insert.failed"] + "\n\n" + AccountMgr.ErrorStateMessage));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!AccountMgr.UpdateUserSport(userSport, DbUpdateInfo))
|
|
{
|
|
SaLogger.Warn(fn + " Failed to update user sport [Id:" + SysId.ToString(userSport.Id) + "]: " + AccountMgr.ErrorStateMessage);
|
|
return Json(responseData.SetMessage(messageTitle, Localiser["msg.error.item.update.failed"] + "\n\n" + AccountMgr.ErrorStateMessage));
|
|
}
|
|
}
|
|
|
|
// Construct response.
|
|
PopulateProfileSportResponseData(model, userSport, sport, responseData.Sport);
|
|
responseData.Success = true;
|
|
return Json(responseData);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|