This commit is contained in:
2021-01-15 00:40:59 +00:00
parent 41f0bcc65c
commit aaec3f8981
4 changed files with 44 additions and 68 deletions

View File

@@ -93,7 +93,7 @@ namespace AyaNova.Biz
// //
internal async Task<Contract> GetAsync(long id, bool logTheGetEvent = true) internal async Task<Contract> GetAsync(long id, bool logTheGetEvent = true)
{ {
var ret = await ct.Contract.SingleOrDefaultAsync(m => m.Id == id); var ret = await ct.Contract.AsNoTracking().SingleOrDefaultAsync(m => m.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;
@@ -104,20 +104,18 @@ namespace AyaNova.Biz
// //
internal async Task<Contract> PutAsync(Contract putObject) internal async Task<Contract> PutAsync(Contract putObject)
{ {
Contract dbObject = await ct.Contract.SingleOrDefaultAsync(m => m.Id == putObject.Id); Contract 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;
} }
Contract SnapshotOfOriginalDBObj = new Contract();
CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); putObject.Tags = TagBiz.NormalizeTags(dbObject.Tags);
CopyObject.Copy(putObject, dbObject, "Id"); putObject.CustomFields = JsonUtil.CompactJson(dbObject.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();
@@ -130,10 +128,10 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.CONCURRENCY_CONFLICT); AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
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;
} }
@@ -146,7 +144,7 @@ namespace AyaNova.Biz
{ {
try try
{ {
Contract dbObject = await ct.Contract.SingleOrDefaultAsync(m => m.Id == id); Contract dbObject = await GetAsync(id, false);
if (dbObject == null){ if (dbObject == null){
AddError(ApiErrorCode.NOT_FOUND); AddError(ApiErrorCode.NOT_FOUND);
return false; return false;
@@ -191,7 +189,7 @@ namespace AyaNova.Biz
public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id) public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id)
{ {
var obj = await ct.Contract.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;

View File

@@ -109,7 +109,7 @@ namespace AyaNova.Biz
// //
internal async Task<Customer> PutAsync(Customer putObject) internal async Task<Customer> PutAsync(Customer putObject)
{ {
Customer dbObject = await GetAsync(putObject.Id, false); var dbObject = await GetAsync(putObject.Id, false);
if (dbObject == null) if (dbObject == null)
{ {
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");

View File

@@ -63,7 +63,7 @@ namespace AyaNova.Biz
// //
internal async Task<CustomerNote> GetAsync(long id, bool logTheGetEvent = true) internal async Task<CustomerNote> GetAsync(long id, bool logTheGetEvent = true)
{ {
var ret = await ct.CustomerNote.SingleOrDefaultAsync(m => m.Id == id); var ret = await ct.CustomerNote.AsNoTracking().SingleOrDefaultAsync(m => m.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;
@@ -80,14 +80,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
CustomerNote SnapshotOfOriginalDBObj = new CustomerNote();
CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj);
CopyObject.Copy(putObject, dbObject, "Id");
dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags);
ct.Entry(dbObject).OriginalValues["Concurrency"] = putObject.Concurrency; putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
//await ValidateAsync(dbObject, SnapshotOfOriginalDBObj); //no validate required
if (HasErrors) return null; if (HasErrors) return null;
ct.Replace(dbObject, putObject);
try try
{ {
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
@@ -101,8 +98,8 @@ 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);
return dbObject; return dbObject;
} }
@@ -118,7 +115,7 @@ namespace AyaNova.Biz
transaction = await ct.Database.BeginTransactionAsync(); transaction = await ct.Database.BeginTransactionAsync();
try try
{ {
CustomerNote dbObject = await ct.CustomerNote.SingleOrDefaultAsync(m => m.Id == id); CustomerNote dbObject = await GetAsync(id, false);
if (dbObject == null) if (dbObject == null)
{ {
AddError(ApiErrorCode.NOT_FOUND); AddError(ApiErrorCode.NOT_FOUND);
@@ -165,7 +162,7 @@ namespace AyaNova.Biz
public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id) public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id)
{ {
var obj = await ct.CustomerNote.SingleOrDefaultAsync(z => z.Id == id); var obj = await GetAsync(id);
var SearchParams = new Search.SearchIndexProcessObjectParameters(); var SearchParams = new Search.SearchIndexProcessObjectParameters();
DigestSearchText(obj, SearchParams); DigestSearchText(obj, SearchParams);
return SearchParams; return SearchParams;
@@ -191,7 +188,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.CustomerNote.Where(z => batch.Contains(z.Id)).ToArrayAsync(); var batchResults = await ct.CustomerNote.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 (CustomerNote w in orderedList) foreach (CustomerNote w in orderedList)

View File

@@ -98,7 +98,7 @@ namespace AyaNova.Biz
// //
internal async Task<CustomerServiceRequest> GetAsync(long id, bool logTheGetEvent = true) internal async Task<CustomerServiceRequest> GetAsync(long id, bool logTheGetEvent = true)
{ {
var ret = await ct.CustomerServiceRequest.SingleOrDefaultAsync(m => m.Id == id); var ret = await ct.CustomerServiceRequest.AsNoTracking().SingleOrDefaultAsync(m => m.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<CustomerServiceRequest> PutAsync(CustomerServiceRequest putObject) internal async Task<CustomerServiceRequest> PutAsync(CustomerServiceRequest putObject)
{ {
CustomerServiceRequest dbObject = await ct.CustomerServiceRequest.SingleOrDefaultAsync(m => m.Id == putObject.Id); var dbObject = await ct.CustomerServiceRequest.SingleOrDefaultAsync(m => m.Id == putObject.Id);
if (dbObject == null) if (dbObject == null)
{ {
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
CustomerServiceRequest SnapshotOfOriginalDBObj = new CustomerServiceRequest();
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
{ {
CustomerServiceRequest dbObject = await ct.CustomerServiceRequest.SingleOrDefaultAsync(m => m.Id == id); CustomerServiceRequest dbObject = await GetAsync(id, false);
if (dbObject == null) if (dbObject == null)
{ {
AddError(ApiErrorCode.NOT_FOUND); AddError(ApiErrorCode.NOT_FOUND);
@@ -189,7 +187,7 @@ namespace AyaNova.Biz
// //
internal async Task<CustomerServiceRequest> AcceptAsync(long csrId, long workorderId) //MIGRATE_OUTSTANDING waiting for workorder to be completed or at least have a customerid which it currently doesn't internal async Task<CustomerServiceRequest> AcceptAsync(long csrId, long workorderId) //MIGRATE_OUTSTANDING waiting for workorder to be completed or at least have a customerid which it currently doesn't
{ {
CustomerServiceRequest dbObject = await ct.CustomerServiceRequest.SingleOrDefaultAsync(m => m.Id == csrId); var dbObject = await GetAsync(csrId, false);
if (dbObject == null) if (dbObject == null)
{ {
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
@@ -197,7 +195,7 @@ namespace AyaNova.Biz
} }
throw new System.NotImplementedException("//MIGRATE_OUTSTANDING CustomerServiceRequestBiz::AcceptAsync - awaiting workorder completion "); throw new System.NotImplementedException("//MIGRATE_OUTSTANDING CustomerServiceRequestBiz::AcceptAsync - awaiting workorder completion ");
// WorkOrder w=null; // WorkOrder w=null;
//if (workorderId==0){WorkOrderBiz.GenerateWorkOrder()} //this is how it would work in theory //if (workorderId==0){WorkOrderBiz.GenerateWorkOrder()} //this is how it would work in theory
@@ -233,33 +231,16 @@ namespace AyaNova.Biz
// //
internal async Task<CustomerServiceRequest> RejectAsync(long csrId) internal async Task<CustomerServiceRequest> RejectAsync(long csrId)
{ {
CustomerServiceRequest dbObject = await ct.CustomerServiceRequest.SingleOrDefaultAsync(m => m.Id == csrId); var dbObject = await GetAsync(csrId, false);
if (dbObject == null) if (dbObject == null)
{ {
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
CustomerServiceRequest SnapshotOfOriginalDBObj = new CustomerServiceRequest();
CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj); //Nothing to validate as it just came from the db and rejecting doesn't require validation
dbObject.Status = CustomerServiceRequestStatus.Declined; dbObject.Status = CustomerServiceRequestStatus.Declined;
await ValidateAsync(dbObject, SnapshotOfOriginalDBObj); await PutAsync(dbObject);
if (HasErrors) return null;
try
{
await ct.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!await ExistsAsync(dbObject.Id))
AddError(ApiErrorCode.NOT_FOUND);
else
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct);
await SearchIndexAsync(dbObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj);
return dbObject; return dbObject;
} }
@@ -280,7 +261,7 @@ namespace AyaNova.Biz
public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id) public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id)
{ {
var obj = await ct.CustomerServiceRequest.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;
@@ -370,7 +351,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.CustomerServiceRequest.Where(z => batch.Contains(z.Id)).ToArrayAsync(); var batchResults = await ct.CustomerServiceRequest.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 (CustomerServiceRequest w in orderedList) foreach (CustomerServiceRequest w in orderedList)
@@ -459,7 +440,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.CustomerServiceRequest.Select(z => z.Id).ToListAsync(); idList = await ct.CustomerServiceRequest.AsNoTracking().Select(z => z.Id).ToListAsync();
bool SaveIt = false; bool SaveIt = false;
foreach (long id in idList) foreach (long id in idList)
{ {