This commit is contained in:
2021-02-09 20:17:06 +00:00
parent 42802e7477
commit bfdf3454e6
30 changed files with 167 additions and 42 deletions

View File

@@ -104,17 +104,23 @@ namespace AyaNova.Biz
// //
internal async Task<Contract> PutAsync(Contract putObject) internal async Task<Contract> PutAsync(Contract putObject)
{ {
Contract dbObject = await GetAsync(putObject.Id,false); 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;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(dbObject.Tags); putObject.Tags = TagBiz.NormalizeTags(dbObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields);
await ValidateAsync(putObject, dbObject); await ValidateAsync(putObject, dbObject);
if (HasErrors) return null; if (HasErrors) return null;
ct.Replace(dbObject, putObject); ct.Replace(dbObject, putObject);
try try
{ {
@@ -128,11 +134,11 @@ 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(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
@@ -145,7 +151,8 @@ namespace AyaNova.Biz
try try
{ {
Contract dbObject = await GetAsync(id, false); Contract dbObject = await GetAsync(id, false);
if (dbObject == null){ if (dbObject == null)
{
AddError(ApiErrorCode.NOT_FOUND); AddError(ApiErrorCode.NOT_FOUND);
return false; return false;
} }
@@ -174,13 +181,13 @@ namespace AyaNova.Biz
} }
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//SEARCH //SEARCH
// //
private async Task SearchIndexAsync(Contract obj, bool isNew) private async Task SearchIndexAsync(Contract obj, bool isNew)
{ {
var SearchParams = new Search.SearchIndexProcessObjectParameters(UserTranslationId, obj.Id, BizType); var SearchParams = new Search.SearchIndexProcessObjectParameters(UserTranslationId, obj.Id, BizType);
DigestSearchText(obj,SearchParams); DigestSearchText(obj, SearchParams);
if (isNew) if (isNew)
await Search.ProcessNewObjectKeywordsAsync(SearchParams); await Search.ProcessNewObjectKeywordsAsync(SearchParams);
else else
@@ -189,9 +196,9 @@ namespace AyaNova.Biz
public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id) public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id)
{ {
var obj = await GetAsync(id, false); 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;
} }
@@ -201,8 +208,8 @@ namespace AyaNova.Biz
searchParams.AddText(obj.Notes) searchParams.AddText(obj.Notes)
.AddText(obj.Name) .AddText(obj.Name)
.AddText(obj.Wiki) .AddText(obj.Wiki)
.AddText(obj.Tags) .AddText(obj.Tags)
.AddCustomFields(obj.CustomFields); .AddCustomFields(obj.CustomFields);
} }
@@ -220,7 +227,7 @@ namespace AyaNova.Biz
if (string.IsNullOrWhiteSpace(proposedObj.Name)) if (string.IsNullOrWhiteSpace(proposedObj.Name))
AddError(ApiErrorCode.VALIDATION_REQUIRED, "Name"); AddError(ApiErrorCode.VALIDATION_REQUIRED, "Name");
//If name is otherwise OK, check that name is unique //If name is otherwise OK, check that name is unique
if (!PropertyHasErrors("Name")) if (!PropertyHasErrors("Name"))
@@ -254,14 +261,14 @@ namespace AyaNova.Biz
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
// NOTIFICATION PROCESSING // NOTIFICATION PROCESSING
// //
public async Task HandlePotentialNotificationEvent(AyaEvent ayaEvent, ICoreBizObjectModel proposedObj, ICoreBizObjectModel currentObj=null) public async Task HandlePotentialNotificationEvent(AyaEvent ayaEvent, ICoreBizObjectModel proposedObj, ICoreBizObjectModel currentObj = null)
{ {
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger<ContractBiz>(); ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger<ContractBiz>();
if (ServerBootConfig.SEEDING) return; if (ServerBootConfig.SEEDING) return;

View File

@@ -115,6 +115,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
@@ -137,7 +142,7 @@ namespace AyaNova.Biz
await SearchIndexAsync(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -74,12 +74,17 @@ namespace AyaNova.Biz
// //
internal async Task<CustomerNote> PutAsync(CustomerNote putObject) internal async Task<CustomerNote> PutAsync(CustomerNote putObject)
{ {
CustomerNote dbObject = await GetAsync(putObject.Id,false); CustomerNote 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;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
//no validate required //no validate required
@@ -100,7 +105,7 @@ namespace AyaNova.Biz
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(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -72,6 +72,7 @@ namespace AyaNova.Biz
//put //put
internal async Task<bool> PutAsync(DashboardView dbObject, string theView) internal async Task<bool> PutAsync(DashboardView dbObject, string theView)
{ {
//todo: check this, is it correct to not be using the standard PUT methodology
dbObject.View = theView; dbObject.View = theView;
Validate(dbObject, false); Validate(dbObject, false);
if (HasErrors) if (HasErrors)

View File

@@ -132,6 +132,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
//preserve the owner ID if none was specified //preserve the owner ID if none was specified
if (putObject.UserId == 0) if (putObject.UserId == 0)
@@ -155,7 +160,7 @@ namespace AyaNova.Biz
return null; return null;
} }
return dbObject; return putObject;
} }

View File

@@ -32,7 +32,7 @@ namespace AyaNova.Biz
return new FormCustomBiz(ct, 1, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, AuthorizationRoles.BizAdminFull); return new FormCustomBiz(ct, 1, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, AuthorizationRoles.BizAdminFull);
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//EXISTS //EXISTS
@@ -65,7 +65,7 @@ namespace AyaNova.Biz
//EVENT LOG //EVENT LOG
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, outObj.Id, BizType, AyaEvent.Created), ct); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, outObj.Id, BizType, AyaEvent.Created), ct);
return outObj; return outObj;
} }
@@ -118,6 +118,8 @@ namespace AyaNova.Biz
internal async Task<bool> PutAsync(FormCustom dbObject, FormCustom inObj) internal async Task<bool> PutAsync(FormCustom dbObject, FormCustom inObj)
{ {
//todo: replace with new put methodology
//Replace the db object with the PUT object //Replace the db object with the PUT object
CopyObject.Copy(inObj, dbObject, "Id"); CopyObject.Copy(inObj, dbObject, "Id");
//Set "original" value of concurrency token to input token //Set "original" value of concurrency token to input token
@@ -134,7 +136,7 @@ namespace AyaNova.Biz
//Log modification and save context //Log modification and save context
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct);
return true; return true;
} }

View File

@@ -63,6 +63,11 @@ namespace AyaNova.Biz
if (dbObject == null) if (dbObject == null)
throw new System.Exception("GlobalBizSettingsBiz::PutAsync -> Global settings object not found in database. Contact support immediately!"); throw new System.Exception("GlobalBizSettingsBiz::PutAsync -> Global settings object not found in database. Contact support immediately!");
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
Validate(putObject, dbObject); Validate(putObject, dbObject);
if (HasErrors) return null; if (HasErrors) return null;
ct.Replace(dbObject, putObject); ct.Replace(dbObject, putObject);
@@ -81,7 +86,7 @@ namespace AyaNova.Biz
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, 1, BizType, AyaEvent.Modified), ct); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, 1, BizType, AyaEvent.Modified), ct);
//Update the static copy for the server //Update the static copy for the server
ServerGlobalBizSettings.Initialize(putObject); ServerGlobalBizSettings.Initialize(putObject);
return dbObject; return putObject;
} }

View File

@@ -57,6 +57,7 @@ namespace AyaNova.Biz
//put //put
internal async Task<GlobalOpsBackupSettings> PutAsync(GlobalOpsBackupSettings putObject) internal async Task<GlobalOpsBackupSettings> PutAsync(GlobalOpsBackupSettings putObject)
{ {
//todo: replace with new put methodology?
var dbObject = await ct.GlobalOpsBackupSettings.FirstOrDefaultAsync(m => m.Id == 1); var dbObject = await ct.GlobalOpsBackupSettings.FirstOrDefaultAsync(m => m.Id == 1);
if (dbObject == null) if (dbObject == null)
throw new System.Exception("GlobalOpsBackupSettings::PutAsync -> Global settings object not found in database!!"); throw new System.Exception("GlobalOpsBackupSettings::PutAsync -> Global settings object not found in database!!");

View File

@@ -57,6 +57,7 @@ namespace AyaNova.Biz
//put //put
internal async Task<GlobalOpsNotificationSettings> PutAsync(GlobalOpsNotificationSettings putObject) internal async Task<GlobalOpsNotificationSettings> PutAsync(GlobalOpsNotificationSettings putObject)
{ {
//todo: replace with new put methodology
var dbObject = await ct.GlobalOpsNotificationSettings.FirstOrDefaultAsync(m => m.Id == 1); var dbObject = await ct.GlobalOpsNotificationSettings.FirstOrDefaultAsync(m => m.Id == 1);
if (dbObject == null) if (dbObject == null)
throw new System.Exception("GlobalOpsNotificationSettings::PutAsync -> Settings object not found in database!!"); throw new System.Exception("GlobalOpsNotificationSettings::PutAsync -> Settings object not found in database!!");

View File

@@ -115,6 +115,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
await ValidateAsync(putObject, dbObject); await ValidateAsync(putObject, dbObject);
@@ -136,7 +141,7 @@ namespace AyaNova.Biz
await SearchIndexAsync(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -115,6 +115,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
@@ -137,7 +142,7 @@ namespace AyaNova.Biz
await SearchIndexAsync(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -97,6 +97,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
@@ -119,7 +124,7 @@ namespace AyaNova.Biz
await SearchIndexAsync(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -101,6 +101,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
await ValidateAsync(putObject); await ValidateAsync(putObject);
if (HasErrors) return null; if (HasErrors) return null;
@@ -120,7 +125,7 @@ namespace AyaNova.Biz
} }
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, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -135,6 +135,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);

View File

@@ -115,6 +115,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
@@ -137,7 +142,7 @@ namespace AyaNova.Biz
await SearchIndexAsync(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -115,6 +115,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
@@ -137,7 +142,7 @@ namespace AyaNova.Biz
await SearchIndexAsync(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -115,6 +115,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
@@ -137,7 +142,7 @@ namespace AyaNova.Biz
await SearchIndexAsync(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -101,6 +101,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
@@ -123,7 +128,7 @@ namespace AyaNova.Biz
await SearchIndexAsync(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -115,6 +115,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
@@ -137,7 +142,7 @@ namespace AyaNova.Biz
await SearchIndexAsync(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -174,6 +174,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
await ValidateAsync(putObject, dbObject); await ValidateAsync(putObject, dbObject);
@@ -193,7 +198,7 @@ namespace AyaNova.Biz
} }
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(putObject, false); await SearchIndexAsync(putObject, false);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -115,6 +115,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
@@ -137,7 +142,7 @@ namespace AyaNova.Biz
await SearchIndexAsync(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -115,6 +115,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
@@ -137,7 +142,7 @@ namespace AyaNova.Biz
await SearchIndexAsync(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -115,6 +115,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
@@ -137,7 +142,7 @@ namespace AyaNova.Biz
await SearchIndexAsync(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -44,6 +44,7 @@ namespace AyaNova.Biz
// //
internal async Task<Translation> PutAsync(Translation putObject) internal async Task<Translation> PutAsync(Translation putObject)
{ {
//todo: update to use new PUT methodology?
Translation dbObject = await ct.Translation.Include(z => z.TranslationItems).SingleOrDefaultAsync(z => z.Id == putObject.Id); Translation dbObject = await ct.Translation.Include(z => z.TranslationItems).SingleOrDefaultAsync(z => z.Id == putObject.Id);
if (dbObject == null) if (dbObject == null)
{ {

View File

@@ -115,6 +115,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
@@ -137,7 +142,7 @@ namespace AyaNova.Biz
await SearchIndexAsync(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -115,6 +115,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
@@ -137,7 +142,7 @@ namespace AyaNova.Biz
await SearchIndexAsync(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -116,6 +116,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
@@ -149,7 +154,7 @@ namespace AyaNova.Biz
await SearchIndexAsync(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -359,6 +359,7 @@ namespace AyaNova.Biz
// //
internal async Task<User> PutAsync(User putObject) internal async Task<User> PutAsync(User putObject)
{ {
//todo: update to use the new PUT methodology
var dbObject = await GetAsync(putObject.Id, false); var dbObject = await GetAsync(putObject.Id, false);
if (dbObject == null) if (dbObject == null)
{ {

View File

@@ -40,6 +40,7 @@ namespace AyaNova.Biz
//put //put
internal async Task<bool> PutAsync(UserOptions dbObject, UserOptions inObj) internal async Task<bool> PutAsync(UserOptions dbObject, UserOptions inObj)
{ {
//todo: update to use the new PUT methodology?
//if it's not the user's own options then we need to check it just as for User / Contact objects //if it's not the user's own options then we need to check it just as for User / Contact objects
if (dbObject.Id != UserId) if (dbObject.Id != UserId)
{ {

View File

@@ -115,6 +115,11 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.NOT_FOUND, "id"); AddError(ApiErrorCode.NOT_FOUND, "id");
return null; return null;
} }
if (dbObject.Concurrency != putObject.Concurrency)
{
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
putObject.Tags = TagBiz.NormalizeTags(putObject.Tags); putObject.Tags = TagBiz.NormalizeTags(putObject.Tags);
putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields); putObject.CustomFields = JsonUtil.CompactJson(putObject.CustomFields);
@@ -137,7 +142,7 @@ namespace AyaNova.Biz
await SearchIndexAsync(putObject, false); await SearchIndexAsync(putObject, false);
await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, putObject.Tags, dbObject.Tags);
await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject); await HandlePotentialNotificationEvent(AyaEvent.Modified, putObject, dbObject);
return dbObject; return putObject;
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////