This commit is contained in:
@@ -72,7 +72,7 @@ namespace AyaNova.Api.Controllers
|
|||||||
|
|
||||||
if (!ModelState.IsValid)
|
if (!ModelState.IsValid)
|
||||||
return BadRequest(new ApiErrorResponse(ModelState));
|
return BadRequest(new ApiErrorResponse(ModelState));
|
||||||
var o = await biz.GetAsync(id);
|
var o = await biz.GetForPublicAsync(id);
|
||||||
if (o == null)
|
if (o == null)
|
||||||
return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND));
|
return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND));
|
||||||
|
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ namespace AyaNova.Biz
|
|||||||
//
|
//
|
||||||
internal async Task<User> DuplicateAsync(long id)
|
internal async Task<User> DuplicateAsync(long id)
|
||||||
{
|
{
|
||||||
User dbObject = await ct.User.SingleOrDefaultAsync(z => z.Id == id);
|
User dbObject = await GetAsync(id, false);
|
||||||
|
|
||||||
if (dbObject == null)
|
if (dbObject == null)
|
||||||
{
|
{
|
||||||
@@ -238,11 +238,11 @@ namespace AyaNova.Biz
|
|||||||
/// GET
|
/// GET
|
||||||
|
|
||||||
//Get one
|
//Get one
|
||||||
internal async Task<dtUser> GetAsync(long Id, bool logTheGetEvent = true)
|
internal async Task<dtUser> GetForPublicAsync(long Id, bool logTheGetEvent = true)
|
||||||
{
|
{
|
||||||
|
|
||||||
//This is simple so nothing more here, but often will be copying to a different output object or some other ops
|
//This is simple so nothing more here, but often will be copying to a different output object or some other ops
|
||||||
var dbFullUser = await ct.User.SingleOrDefaultAsync(z => z.Id == Id);
|
var dbFullUser = await ct.User.AsNoTracking().SingleOrDefaultAsync(z => z.Id == Id);
|
||||||
if (dbFullUser != null)
|
if (dbFullUser != null)
|
||||||
{
|
{
|
||||||
//Log
|
//Log
|
||||||
@@ -257,6 +257,101 @@ namespace AyaNova.Biz
|
|||||||
else return null;
|
else return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Get one for internal use
|
||||||
|
internal async Task<User> GetAsync(long Id, bool logTheGetEvent = true)
|
||||||
|
{
|
||||||
|
|
||||||
|
//This is simple so nothing more here, but often will be copying to a different output object or some other ops
|
||||||
|
var dbObject = await ct.User.AsNoTracking().SingleOrDefaultAsync(z => z.Id == Id);
|
||||||
|
if (dbObject != null)
|
||||||
|
{
|
||||||
|
//Log
|
||||||
|
if (logTheGetEvent)
|
||||||
|
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, Id, BizType, AyaEvent.Retrieved), ct);
|
||||||
|
return dbObject;
|
||||||
|
}
|
||||||
|
else return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// //UPDATE
|
||||||
|
// //
|
||||||
|
// internal async Task<User> PutAsync(User putObject)
|
||||||
|
// {
|
||||||
|
// User dbObject = await ct.User.SingleOrDefaultAsync(z => z.Id == putObject.Id);
|
||||||
|
// if (dbObject == null)
|
||||||
|
// {
|
||||||
|
// AddError(ApiErrorCode.NOT_FOUND, "id");
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
// //Also used for Contacts (customer type user or ho type user)
|
||||||
|
// //by users with no User right but with Customer rights so need to double check here
|
||||||
|
// if (
|
||||||
|
// (dbObject.IsOutsideUser && !Authorized.HasModifyRole(CurrentUserRoles, AyaType.Customer)) ||
|
||||||
|
// (!dbObject.IsOutsideUser && !Authorized.HasModifyRole(CurrentUserRoles, AyaType.User))
|
||||||
|
// )
|
||||||
|
// {
|
||||||
|
// AddError(ApiErrorCode.NOT_AUTHORIZED);
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// User SnapshotOfOriginalDBObj = new User();
|
||||||
|
// CopyObject.Copy(dbObject, SnapshotOfOriginalDBObj);
|
||||||
|
// CopyObject.Copy(putObject, dbObject, "Id, Salt, CurrentAuthToken, LoginKey, DlKey, DlKeyExpire");
|
||||||
|
// dbObject.Tags = TagBiz.NormalizeTags(dbObject.Tags);
|
||||||
|
// dbObject.CustomFields = JsonUtil.CompactJson(dbObject.CustomFields);
|
||||||
|
|
||||||
|
// //NOTE: It's valid to call this without intending to change login or password (null values)
|
||||||
|
// //Is the user updating the password?
|
||||||
|
// if (!string.IsNullOrWhiteSpace(putObject.Password))
|
||||||
|
// {
|
||||||
|
// //YES password is being updated:
|
||||||
|
// dbObject.Password = Hasher.hash(SnapshotOfOriginalDBObj.Salt, putObject.Password);
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// //No, use the snapshot password value
|
||||||
|
// dbObject.Password = SnapshotOfOriginalDBObj.Password;
|
||||||
|
// dbObject.Salt = SnapshotOfOriginalDBObj.Salt;
|
||||||
|
// }
|
||||||
|
// //Updating login?
|
||||||
|
// if (!string.IsNullOrWhiteSpace(putObject.Login))
|
||||||
|
// {
|
||||||
|
// //YES Login is being updated:
|
||||||
|
// dbObject.Login = putObject.Login;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// //No, use the original value
|
||||||
|
// dbObject.Login = SnapshotOfOriginalDBObj.Login;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// ct.Entry(dbObject).OriginalValues["Concurrency"] = putObject.Concurrency;
|
||||||
|
// await ValidateAsync(dbObject, SnapshotOfOriginalDBObj);
|
||||||
|
// if (HasErrors) return null;
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// await ct.SaveChangesAsync();
|
||||||
|
// }
|
||||||
|
// catch (DbUpdateConcurrencyException)
|
||||||
|
// {
|
||||||
|
// if (!await ExistsAsync(putObject.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;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -264,7 +359,7 @@ namespace AyaNova.Biz
|
|||||||
//
|
//
|
||||||
internal async Task<User> PutAsync(User putObject)
|
internal async Task<User> PutAsync(User putObject)
|
||||||
{
|
{
|
||||||
User dbObject = await ct.User.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");
|
||||||
@@ -338,7 +433,6 @@ namespace AyaNova.Biz
|
|||||||
return dbObject;
|
return dbObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////
|
/////////////////////////////////////////////
|
||||||
//PASSWORD
|
//PASSWORD
|
||||||
//
|
//
|
||||||
@@ -442,7 +536,7 @@ namespace AyaNova.Biz
|
|||||||
|
|
||||||
public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id)
|
public async Task<Search.SearchIndexProcessObjectParameters> GetSearchResultSummary(long id)
|
||||||
{
|
{
|
||||||
var obj = await ct.User.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;
|
||||||
@@ -774,7 +868,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.User.Include(z => z.UserOptions).Where(z => batch.Contains(z.Id)).ToArrayAsync();
|
var batchResults = await ct.User.AsNoTracking().Include(z => z.UserOptions).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 (User w in orderedList)
|
//foreach (User w in orderedList)
|
||||||
@@ -865,7 +959,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.Widget.Select(z => z.Id).ToListAsync();
|
idList = await ct.User.AsNoTracking().Select(z => z.Id).ToListAsync();
|
||||||
bool SaveIt = false;
|
bool SaveIt = false;
|
||||||
foreach (long id in idList)
|
foreach (long id in idList)
|
||||||
{
|
{
|
||||||
@@ -878,7 +972,7 @@ namespace AyaNova.Biz
|
|||||||
User o = null;
|
User o = null;
|
||||||
//save a fetch if it's a delete
|
//save a fetch if it's a delete
|
||||||
if (job.SubType != JobSubType.Delete)
|
if (job.SubType != JobSubType.Delete)
|
||||||
o = await ct.User.SingleOrDefaultAsync(z => z.Id == id);
|
o = await GetAsync(id, false);
|
||||||
switch (job.SubType)
|
switch (job.SubType)
|
||||||
{
|
{
|
||||||
case JobSubType.TagAddAny:
|
case JobSubType.TagAddAny:
|
||||||
@@ -953,7 +1047,7 @@ namespace AyaNova.Biz
|
|||||||
//iterate subs and remove any user shouldn't have
|
//iterate subs and remove any user shouldn't have
|
||||||
var userSubs = await ct.NotifySubscription.Where(z => z.UserId == proposedObj.Id).ToListAsync();
|
var userSubs = await ct.NotifySubscription.Where(z => z.UserId == proposedObj.Id).ToListAsync();
|
||||||
foreach (var sub in userSubs)
|
foreach (var sub in userSubs)
|
||||||
{
|
{
|
||||||
if (sub.AyaType != AyaType.NoType)
|
if (sub.AyaType != AyaType.NoType)
|
||||||
{
|
{
|
||||||
//check if user has rights to it or not still
|
//check if user has rights to it or not still
|
||||||
|
|||||||
Reference in New Issue
Block a user