Perf: Save only when user updated

This commit is contained in:
Gary Sharp
2017-03-29 13:00:15 +11:00
parent fdf1bd4bc6
commit 4d6aa18095
3 changed files with 31 additions and 7 deletions
+20 -1
View File
@@ -71,21 +71,40 @@ namespace Disco.Models.Repository
return string.Format("{0} ({1})", this.DisplayName, this.UserId);
}
public void UpdateSelf(User u)
public bool UpdateSelf(User u)
{
var changed = false;
if (!this.UserId.Equals(u.UserId, StringComparison.OrdinalIgnoreCase))
throw new ArgumentException("User Id's do not match", "u");
if (this.Surname != u.Surname)
{
this.Surname = u.Surname;
changed = true;
}
if (this.GivenName != u.GivenName)
{
this.GivenName = u.GivenName;
changed = true;
}
if (this.DisplayName != u.DisplayName)
{
this.DisplayName = u.DisplayName;
changed = true;
}
if (this.EmailAddress != u.EmailAddress)
{
this.EmailAddress = u.EmailAddress;
changed = true;
}
if (this.PhoneNumber != u.PhoneNumber)
{
this.PhoneNumber = u.PhoneNumber;
changed = true;
}
return changed;
}
}
}
@@ -33,14 +33,14 @@ namespace Disco.Services.Devices.Exporting
Options.AssignedUserEmailAddress)
{
TaskStatus.UpdateStatus(20, "Updating Assigned User details");
var users = Devices.Where(d => d.AssignedUserId != null).Select(d => d.AssignedUserId).Distinct().ToList();
var users = Devices.Where(d => d.AssignedUserId != null).Select(d => d.AssignedUser).Distinct().ToList();
users.Select((userId, index) =>
users.Select((user, index) =>
{
TaskStatus.UpdateStatus(20 + (((double)20 / users.Count) * index), string.Format("Updating Assigned User details: {0}", userId));
TaskStatus.UpdateStatus(20 + (((double)20 / users.Count) * index), string.Format("Updating Assigned User details: {0}", user.UserId));
try
{
return UserService.GetUser(userId, Database);
return UserService.GetUser(user.UserId, Database);
}
catch (Exception) { return null; } // Ignore Errors
}).ToList();
+7 -2
View File
@@ -273,13 +273,18 @@ namespace Disco.Services.Users
// Update Repository
User existingUser = Database.Users.Find(user.UserId);
if (existingUser == null)
{
Database.Users.Add(user);
Database.SaveChanges();
}
else
{
existingUser.UpdateSelf(user);
if (existingUser.UpdateSelf(user))
{
Database.SaveChanges();
}
user = existingUser;
}
Database.SaveChanges();
var token = AuthorizationToken.BuildToken(user, adAccount.Groups.Select(g => g.Id));