This commit is contained in:
@@ -65,13 +65,13 @@ namespace AyaNova.Biz
|
|||||||
//
|
//
|
||||||
internal async Task<LoanUnit> DuplicateAsync(long id)
|
internal async Task<LoanUnit> DuplicateAsync(long id)
|
||||||
{
|
{
|
||||||
LoanUnit dbObject = await GetAsync(id, false);
|
var dbObject = await GetAsync(id, false);
|
||||||
if (dbObject == null)
|
if (dbObject == null)
|
||||||
{
|
{
|
||||||
AddError(ApiErrorCode.NOT_FOUND, "id");
|
AddError(ApiErrorCode.NOT_FOUND, "id");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
LoanUnit newObject = new LoanUnit();
|
var newObject = new LoanUnit();
|
||||||
CopyObject.Copy(dbObject, newObject, "Wiki");
|
CopyObject.Copy(dbObject, newObject, "Wiki");
|
||||||
string newUniqueName = string.Empty;
|
string newUniqueName = string.Empty;
|
||||||
bool NotUnique = true;
|
bool NotUnique = true;
|
||||||
@@ -98,7 +98,7 @@ namespace AyaNova.Biz
|
|||||||
//
|
//
|
||||||
internal async Task<LoanUnit> GetAsync(long id, bool logTheGetEvent = true)
|
internal async Task<LoanUnit> GetAsync(long id, bool logTheGetEvent = true)
|
||||||
{
|
{
|
||||||
var ret = await ct.LoanUnit.SingleOrDefaultAsync(z => z.Id == id);
|
var ret = await ct.LoanUnit.AsNoTracking().SingleOrDefaultAsync(z => z.Id == id);
|
||||||
if (logTheGetEvent && ret != null)
|
if (logTheGetEvent && ret != null)
|
||||||
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, BizType, AyaEvent.Retrieved), ct);
|
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, BizType, AyaEvent.Retrieved), ct);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -109,20 +109,18 @@ namespace AyaNova.Biz
|
|||||||
//
|
//
|
||||||
internal async Task<LoanUnit> PutAsync(LoanUnit putObject)
|
internal async Task<LoanUnit> PutAsync(LoanUnit putObject)
|
||||||
{
|
{
|
||||||
LoanUnit dbObject = await ct.LoanUnit.SingleOrDefaultAsync(z => z.Id == putObject.Id);
|
var dbObject = await GetAsync(putObject.Id, false);
|
||||||
if (dbObject == null)
|
if (dbObject == null)
|
||||||
{
|
{
|
||||||
AddError(ApiErrorCode.NOT_FOUND, "id");
|
AddError(ApiErrorCode.NOT_FOUND, "id");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
LoanUnit SnapshotOfOriginalDBObj = new LoanUnit();
|
|
||||||
CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj);
|
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
|
||||||
CopyObject.Copy(putObject, dbObject, "Id");
|
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
|
||||||
dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags);
|
await ValidateAsync(putObject, dbObject);
|
||||||
dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields);
|
|
||||||
ct.Entry(dbObject).OriginalValues["Concurrency"] = putObject.Concurrency;
|
|
||||||
await ValidateAsync(dbObject, SnapshotOfOriginalDBObj);
|
|
||||||
if (HasErrors) return null;
|
if (HasErrors) return null;
|
||||||
|
ct.Replace(dbObject, putObject);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await ct.SaveChangesAsync();
|
await ct.SaveChangesAsync();
|
||||||
@@ -136,9 +134,9 @@ namespace AyaNova.Biz
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct);
|
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct);
|
||||||
await SearchIndexAsync(dbObject, false);
|
await SearchIndexAsync(putObject, false);
|
||||||
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags);
|
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
|
||||||
await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj);
|
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
|
||||||
return dbObject;
|
return dbObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,7 +149,7 @@ namespace AyaNova.Biz
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
LoanUnit dbObject = await ct.LoanUnit.SingleOrDefaultAsync(z => z.Id == id);
|
LoanUnit dbObject = await GetAsync(id, false);
|
||||||
if (dbObject == null)
|
if (dbObject == null)
|
||||||
{
|
{
|
||||||
AddError(ApiErrorCode.NOT_FOUND);
|
AddError(ApiErrorCode.NOT_FOUND);
|
||||||
@@ -197,7 +195,7 @@ namespace AyaNova.Biz
|
|||||||
|
|
||||||
public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id)
|
public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id)
|
||||||
{
|
{
|
||||||
var obj = await ct.LoanUnit.SingleOrDefaultAsync(z => z.Id == id);
|
var obj = await GetAsync(id, false);
|
||||||
var SearchParams = new Search.SearchIndexProcessObjectParameters();
|
var SearchParams = new Search.SearchIndexProcessObjectParameters();
|
||||||
DigestSearchText(obj, SearchParams);
|
DigestSearchText(obj, SearchParams);
|
||||||
return SearchParams;
|
return SearchParams;
|
||||||
@@ -280,7 +278,7 @@ namespace AyaNova.Biz
|
|||||||
var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE);
|
var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE);
|
||||||
idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray();
|
idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray();
|
||||||
//query for this batch, comes back in db natural order unfortunately
|
//query for this batch, comes back in db natural order unfortunately
|
||||||
var batchResults = await ct.LoanUnit.Where(z => batch.Contains(z.Id)).ToArrayAsync();
|
var batchResults = await ct.LoanUnit.AsNoTracking().Where(z => batch.Contains(z.Id)).ToArrayAsync();
|
||||||
//order the results back into original
|
//order the results back into original
|
||||||
var orderedList = from id in batch join z in batchResults on id equals z.Id select z;
|
var orderedList = from id in batch join z in batchResults on id equals z.Id select z;
|
||||||
foreach (LoanUnit w in orderedList)
|
foreach (LoanUnit w in orderedList)
|
||||||
@@ -369,7 +367,7 @@ namespace AyaNova.Biz
|
|||||||
if (jobData.ContainsKey("idList"))
|
if (jobData.ContainsKey("idList"))
|
||||||
idList = ((JArray)jobData["idList"]).ToObject<List<long>>();
|
idList = ((JArray)jobData["idList"]).ToObject<List<long>>();
|
||||||
else
|
else
|
||||||
idList = await ct.LoanUnit.Select(z => z.Id).ToListAsync();
|
idList = await ct.LoanUnit.AsNoTracking().Select(z => z.Id).ToListAsync();
|
||||||
bool SaveIt = false;
|
bool SaveIt = false;
|
||||||
foreach (long id in idList)
|
foreach (long id in idList)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -62,46 +62,12 @@ namespace AyaNova.Biz
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// //DUPLICATE
|
|
||||||
// //
|
|
||||||
// internal async Task<Memo> DuplicateAsync(long id)
|
|
||||||
// {
|
|
||||||
// Memo dbObject = await GetAsync(id, false);
|
|
||||||
// if (dbObject == null)
|
|
||||||
// {
|
|
||||||
// AddError(ApiErrorCode.NOT_FOUND, "id");
|
|
||||||
// return null;
|
|
||||||
// }
|
|
||||||
// Memo newObject = new Memo();
|
|
||||||
// CopyObject.Copy(dbObject, newObject, "Wiki");
|
|
||||||
// string newUniqueName = string.Empty;
|
|
||||||
// bool NotUnique = true;
|
|
||||||
// long l = 1;
|
|
||||||
// do
|
|
||||||
// {
|
|
||||||
// newUniqueName = Util.StringUtil.UniqueNameBuilder(dbObject.Name, l++, 255);
|
|
||||||
// NotUnique = await ct.Memo.AnyAsync(m => m.Name == newUniqueName);
|
|
||||||
// } while (NotUnique);
|
|
||||||
// newObject.Name = newUniqueName;
|
|
||||||
// newObject.Id = 0;
|
|
||||||
// newObject.Concurrency = 0;
|
|
||||||
// await ct.Memo.AddAsync(newObject);
|
|
||||||
// await ct.SaveChangesAsync();
|
|
||||||
// await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, BizType, AyaEvent.Created), ct);
|
|
||||||
// await SearchIndexAsync(newObject, true);
|
|
||||||
// await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null);
|
|
||||||
// await NotifyEventProcessor.HandlePotentialNotificationEvent(AyaEvent.Created, newObject);
|
|
||||||
// return newObject;
|
|
||||||
// }
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
//GET
|
//GET
|
||||||
//
|
//
|
||||||
internal async Task<Memo> GetAsync(long id, bool logTheGetEvent = true)
|
internal async Task<Memo> GetAsync(long id, bool logTheGetEvent = true)
|
||||||
{
|
{
|
||||||
var ret = await ct.Memo.SingleOrDefaultAsync(m => m.Id == id && m.ToId == UserId);//## SECURITY, if need general purpose then make new method
|
var ret = await ct.Memo.AsNoTracking().SingleOrDefaultAsync(m => m.Id == id && m.ToId == UserId);//## SECURITY, if need general purpose then make new method
|
||||||
if (logTheGetEvent && ret != null)
|
if (logTheGetEvent && ret != null)
|
||||||
{
|
{
|
||||||
//Hijack this method to also flag as read
|
//Hijack this method to also flag as read
|
||||||
@@ -125,20 +91,18 @@ namespace AyaNova.Biz
|
|||||||
//
|
//
|
||||||
internal async Task<Memo> PutAsync(Memo putObject)
|
internal async Task<Memo> PutAsync(Memo putObject)
|
||||||
{
|
{
|
||||||
Memo dbObject = await ct.Memo.SingleOrDefaultAsync(m => m.Id == putObject.Id);
|
var dbObject = await GetAsync(putObject.Id, false);
|
||||||
if (dbObject == null)
|
if (dbObject == null)
|
||||||
{
|
{
|
||||||
AddError(ApiErrorCode.NOT_FOUND, "id");
|
AddError(ApiErrorCode.NOT_FOUND, "id");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
Memo SnapshotOfOriginalDBObj = new Memo();
|
|
||||||
CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj);
|
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
|
||||||
CopyObject.Copy(putObject, dbObject, "Id");
|
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
|
||||||
dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags);
|
|
||||||
dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields);
|
|
||||||
ct.Entry(dbObject).OriginalValues["Concurrency"] = putObject.Concurrency;
|
ct.Replace(dbObject, putObject);
|
||||||
await ValidateAsync(dbObject);
|
|
||||||
if (HasErrors) return null;
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await ct.SaveChangesAsync();
|
await ct.SaveChangesAsync();
|
||||||
@@ -152,9 +116,9 @@ namespace AyaNova.Biz
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct);
|
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct);
|
||||||
await SearchIndexAsync(dbObject, false);
|
await SearchIndexAsync(putObject, false);
|
||||||
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags);
|
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
|
||||||
await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj);
|
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
|
||||||
return dbObject;
|
return dbObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,7 +131,7 @@ namespace AyaNova.Biz
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Memo dbObject = await ct.Memo.SingleOrDefaultAsync(m => m.Id == id);
|
var dbObject = await GetAsync(id, false);
|
||||||
if (dbObject == null)
|
if (dbObject == null)
|
||||||
{
|
{
|
||||||
AddError(ApiErrorCode.NOT_FOUND);
|
AddError(ApiErrorCode.NOT_FOUND);
|
||||||
@@ -213,7 +177,7 @@ namespace AyaNova.Biz
|
|||||||
|
|
||||||
public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id)
|
public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id)
|
||||||
{
|
{
|
||||||
var obj = await ct.Memo.SingleOrDefaultAsync(z => z.Id == id);
|
var obj = await GetAsync(id, false);
|
||||||
var SearchParams = new Search.SearchIndexProcessObjectParameters();
|
var SearchParams = new Search.SearchIndexProcessObjectParameters();
|
||||||
DigestSearchText(obj, SearchParams);
|
DigestSearchText(obj, SearchParams);
|
||||||
return SearchParams;
|
return SearchParams;
|
||||||
@@ -308,7 +272,7 @@ namespace AyaNova.Biz
|
|||||||
var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE);
|
var batch = idList.Take(IReportAbleObject.REPORT_DATA_BATCH_SIZE);
|
||||||
idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray();
|
idList = idList.Skip(IReportAbleObject.REPORT_DATA_BATCH_SIZE).ToArray();
|
||||||
//query for this batch, comes back in db natural order unfortunately
|
//query for this batch, comes back in db natural order unfortunately
|
||||||
var batchResults = await ct.Memo.Where(z => batch.Contains(z.Id)).ToArrayAsync();
|
var batchResults = await ct.Memo.AsNoTracking().Where(z => batch.Contains(z.Id)).ToArrayAsync();
|
||||||
//order the results back into original
|
//order the results back into original
|
||||||
var orderedList = from id in batch join z in batchResults on id equals z.Id select z;
|
var orderedList = from id in batch join z in batchResults on id equals z.Id select z;
|
||||||
foreach (Memo w in orderedList)
|
foreach (Memo w in orderedList)
|
||||||
@@ -397,7 +361,7 @@ namespace AyaNova.Biz
|
|||||||
if (jobData.ContainsKey("idList"))
|
if (jobData.ContainsKey("idList"))
|
||||||
idList = ((JArray)jobData["idList"]).ToObject<List<long>>();
|
idList = ((JArray)jobData["idList"]).ToObject<List<long>>();
|
||||||
else
|
else
|
||||||
idList = await ct.Memo.Select(z => z.Id).ToListAsync();
|
idList = await ct.Memo.AsNoTracking().Select(z => z.Id).ToListAsync();
|
||||||
bool SaveIt = false;
|
bool SaveIt = false;
|
||||||
foreach (long id in idList)
|
foreach (long id in idList)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,13 +1,8 @@
|
|||||||
using System;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using System.Linq;
|
|
||||||
using EnumsNET;
|
|
||||||
using AyaNova.Util;
|
using AyaNova.Util;
|
||||||
using AyaNova.Api.ControllerHelpers;
|
using AyaNova.Api.ControllerHelpers;
|
||||||
using AyaNova.Models;
|
using AyaNova.Models;
|
||||||
using Newtonsoft.Json.Linq;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace AyaNova.Biz
|
namespace AyaNova.Biz
|
||||||
{
|
{
|
||||||
@@ -63,7 +58,7 @@ namespace AyaNova.Biz
|
|||||||
internal async Task<NotifySubscription> DuplicateAsync(long id)
|
internal async Task<NotifySubscription> DuplicateAsync(long id)
|
||||||
{
|
{
|
||||||
|
|
||||||
NotifySubscription dbObject = await GetAsync(id, false);
|
var dbObject = await GetAsync(id, false);
|
||||||
if (dbObject == null)
|
if (dbObject == null)
|
||||||
{
|
{
|
||||||
AddError(ApiErrorCode.NOT_FOUND, "id");
|
AddError(ApiErrorCode.NOT_FOUND, "id");
|
||||||
@@ -87,7 +82,7 @@ namespace AyaNova.Biz
|
|||||||
//
|
//
|
||||||
internal async Task<NotifySubscription> GetAsync(long id, bool logTheGetEvent = true)
|
internal async Task<NotifySubscription> GetAsync(long id, bool logTheGetEvent = true)
|
||||||
{
|
{
|
||||||
var ret = await ct.NotifySubscription.SingleOrDefaultAsync(z => z.Id == id && z.UserId == UserId);
|
var ret = await ct.NotifySubscription.AsNoTracking().SingleOrDefaultAsync(z => z.Id == id && z.UserId == UserId);
|
||||||
if (logTheGetEvent && ret != null)
|
if (logTheGetEvent && ret != null)
|
||||||
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, BizType, AyaEvent.Retrieved), ct);
|
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, BizType, AyaEvent.Retrieved), ct);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -100,19 +95,16 @@ namespace AyaNova.Biz
|
|||||||
{
|
{
|
||||||
//TODO: Must remove all prior events and replace them
|
//TODO: Must remove all prior events and replace them
|
||||||
|
|
||||||
NotifySubscription dbObject = await ct.NotifySubscription.SingleOrDefaultAsync(z => z.Id == putObject.Id);
|
var dbObject = await GetAsync(putObject.Id, false);
|
||||||
if (dbObject == null)
|
if (dbObject == null)
|
||||||
{
|
{
|
||||||
AddError(ApiErrorCode.NOT_FOUND, "id");
|
AddError(ApiErrorCode.NOT_FOUND, "id");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
NotifySubscription SnapshotOfOriginalDBObj = new NotifySubscription();
|
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
|
||||||
CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj);
|
await ValidateAsync(putObject);
|
||||||
CopyObject.Copy(putObject, dbObject, "Id");//can update serial
|
if (HasErrors) return null;
|
||||||
dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags);
|
ct.Replace(dbObject, putObject);
|
||||||
|
|
||||||
ct.Entry(dbObject).OriginalValues["Concurrency"] = putObject.Concurrency;
|
|
||||||
await ValidateAsync(dbObject);
|
|
||||||
if (HasErrors) return null;
|
if (HasErrors) return null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -127,7 +119,7 @@ namespace AyaNova.Biz
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct);
|
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct);
|
||||||
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags);
|
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
|
||||||
return dbObject;
|
return dbObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,7 +133,7 @@ namespace AyaNova.Biz
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
NotifySubscription dbObject = await ct.NotifySubscription.SingleOrDefaultAsync(z => z.Id == id);
|
var dbObject = await GetAsync(id, false);
|
||||||
if (dbObject == null)
|
if (dbObject == null)
|
||||||
{
|
{
|
||||||
AddError(ApiErrorCode.NOT_FOUND);
|
AddError(ApiErrorCode.NOT_FOUND);
|
||||||
|
|||||||
Reference in New Issue
Block a user