Files
raven/server/AyaNova/biz/BizObject.cs
2021-02-20 16:07:56 +00:00

101 lines
2.9 KiB
C#

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AyaNova.Biz
{
/// <summary>
/// Business object base class
/// </summary>
internal abstract class BizObject : IBizObject
{
public BizObject()
{
}
#region common props
internal AyaType BizType { get; set; }
internal AyaNova.Models.AyContext ct { get; set; }
internal long UserId { get; set; }
internal long UserTranslationId { get; set; }
internal AuthorizationRoles CurrentUserRoles { get; set; }
#endregion
internal async Task<string> Translate(string key)
{
return await TranslationBiz.GetTranslationStaticAsync(key, UserTranslationId, ct);
}
#region Error handling
private readonly List<ValidationError> _errors = new List<ValidationError>();
public List<ValidationError> Errors => _errors;
public bool HasErrors => _errors.Any();
public void ClearErrors() => _errors.Clear();
// public void AddvalidationError(ValidationError validationError)
// {
// _errors.Add(validationError);
// }
public bool PropertyHasErrors(string propertyName)
{
if (_errors.Count == 0) return false;
var v = _errors.FirstOrDefault(m => m.Target == propertyName);
return (v != null);
}
public void AddError(ApiErrorCode errorCode, string propertyName = "generalerror", string errorMessage = null)
{
//if Target is generalerror that means show in UI in general error box of form
_errors.Add(new ValidationError() { Code = errorCode, Message = errorMessage, Target = propertyName });
}
//TODO: CHILD COLLECTION MOD add error version for indexed child
// //Add a bunch of errors, generally from a child object failed operastion
// public void AddErrors(List<ValidationError> errors)
// {
// _errors.AddRange(errors);
// }
public string GetErrorsAsString()
{
if (!HasErrors) return string.Empty;
StringBuilder sb = new StringBuilder();
// sb.AppendLine("LT:Errors - ");
foreach (ValidationError e in _errors)
{
var msg = $"LT:{ApiErrorCodeStockMessage.GetTranslationCodeForApiErrorCode(e.Code)}";
if (!string.IsNullOrWhiteSpace(e.Message))
msg += $", {e.Message}";
if (!string.IsNullOrWhiteSpace(e.Target) && e.Target != "generalerror")
msg += $", field: {e.Target}";
sb.AppendLine(msg);
}
return sb.ToString();
}
#endregion error handling
}//eoc
}//eons