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); 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)) if (!this.UserId.Equals(u.UserId, StringComparison.OrdinalIgnoreCase))
throw new ArgumentException("User Id's do not match", "u"); throw new ArgumentException("User Id's do not match", "u");
if (this.Surname != u.Surname) if (this.Surname != u.Surname)
{
this.Surname = u.Surname; this.Surname = u.Surname;
changed = true;
}
if (this.GivenName != u.GivenName) if (this.GivenName != u.GivenName)
{
this.GivenName = u.GivenName; this.GivenName = u.GivenName;
changed = true;
}
if (this.DisplayName != u.DisplayName) if (this.DisplayName != u.DisplayName)
{
this.DisplayName = u.DisplayName; this.DisplayName = u.DisplayName;
changed = true;
}
if (this.EmailAddress != u.EmailAddress) if (this.EmailAddress != u.EmailAddress)
{
this.EmailAddress = u.EmailAddress; this.EmailAddress = u.EmailAddress;
changed = true;
}
if (this.PhoneNumber != u.PhoneNumber) if (this.PhoneNumber != u.PhoneNumber)
{
this.PhoneNumber = u.PhoneNumber; this.PhoneNumber = u.PhoneNumber;
changed = true;
}
return changed;
} }
} }
} }
@@ -33,14 +33,14 @@ namespace Disco.Services.Devices.Exporting
Options.AssignedUserEmailAddress) Options.AssignedUserEmailAddress)
{ {
TaskStatus.UpdateStatus(20, "Updating Assigned User details"); 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 try
{ {
return UserService.GetUser(userId, Database); return UserService.GetUser(user.UserId, Database);
} }
catch (Exception) { return null; } // Ignore Errors catch (Exception) { return null; } // Ignore Errors
}).ToList(); }).ToList();
+7 -2
View File
@@ -273,13 +273,18 @@ namespace Disco.Services.Users
// Update Repository // Update Repository
User existingUser = Database.Users.Find(user.UserId); User existingUser = Database.Users.Find(user.UserId);
if (existingUser == null) if (existingUser == null)
{
Database.Users.Add(user); Database.Users.Add(user);
Database.SaveChanges();
}
else else
{ {
existingUser.UpdateSelf(user); if (existingUser.UpdateSelf(user))
{
Database.SaveChanges();
}
user = existingUser; user = existingUser;
} }
Database.SaveChanges();
var token = AuthorizationToken.BuildToken(user, adAccount.Groups.Select(g => g.Id)); var token = AuthorizationToken.BuildToken(user, adAccount.Groups.Select(g => g.Id));