using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json.Linq; using AyaNova.Util; using AyaNova.Api.ControllerHelpers; using AyaNova.Models; namespace AyaNova.Biz { //Only one dashboard view per user and there is always one so no delete method, not create method internal class DashboardViewBiz : BizObject { internal DashboardViewBiz(AyContext dbcontext, long currentUserId, long userTranslationId, AuthorizationRoles UserRoles) { ct = dbcontext; UserId = currentUserId; UserTranslationId = userTranslationId; CurrentUserRoles = UserRoles; BizType = AyaType.DashboardView; } internal static DashboardViewBiz GetBiz(AyContext ct, Microsoft.AspNetCore.Http.HttpContext httpContext = null) { if (httpContext != null) return new DashboardViewBiz(ct, UserIdFromContext.Id(httpContext.Items), UserTranslationIdFromContext.Id(httpContext.Items), UserRolesFromContext.Roles(httpContext.Items)); else return new DashboardViewBiz(ct, 1, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, AuthorizationRoles.BizAdmin); } //////////////////////////////////////////////////////////////////////////////////////////////// //EXISTS internal async Task ExistsAsync() { return await ct.DashboardView.AnyAsync(z => z.UserId == UserId); } //////////////////////////////////////////////////////////////////////////////////////////////// /// GET //Get one - will create if there isn't one to get internal async Task GetAsync() { //This is simple so nothing more here, but often will be copying to a different output object or some other ops var ret = await ct.DashboardView.SingleOrDefaultAsync(z => z.UserId == UserId); if (ret == null) { ret = new DashboardView(); ret.UserId = UserId; ct.DashboardView.Add(ret); await ct.SaveChangesAsync(); } return ret; } //////////////////////////////////////////////////////////////////////////////////////////////// //UPDATE // //put internal async Task PutAsync(DashboardView dbObject, string theView) { //todo: check this, is it correct to not be using the standard PUT methodology dbObject.View = theView; Validate(dbObject, false); if (HasErrors) return false; await ct.SaveChangesAsync(); return true; } //////////////////////////////////////////////////////////////////////////////////////////////// //VALIDATION // //Can save or update? private void Validate(DashboardView inObj, bool isNew) { //Filter json must parse //this is all automated normally so not going to do too much parsing here //just ensure it's basically there if (!string.IsNullOrWhiteSpace(inObj.View)) { try { var v = JArray.Parse(inObj.View); } catch (Newtonsoft.Json.JsonReaderException ex) { AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "DashboardView", "DashboardView is not valid JSON string: " + ex.Message); } } return; } ///////////////////////////////////////////////////////////////////// }//eoc }//eons