From 4d6aa18095e944efc6e2eba0384538b4a000c824 Mon Sep 17 00:00:00 2001 From: Gary Sharp Date: Wed, 29 Mar 2017 13:00:15 +1100 Subject: [PATCH] Perf: Save only when user updated --- Disco.Models/Repository/User/User.cs | 21 ++++++++++++++++++- .../Devices/Exporting/DeviceExport.cs | 8 +++---- Disco.Services/Users/UserService.cs | 9 ++++++-- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/Disco.Models/Repository/User/User.cs b/Disco.Models/Repository/User/User.cs index 948e1f70..fadbf285 100644 --- a/Disco.Models/Repository/User/User.cs +++ b/Disco.Models/Repository/User/User.cs @@ -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; } } } diff --git a/Disco.Services/Devices/Exporting/DeviceExport.cs b/Disco.Services/Devices/Exporting/DeviceExport.cs index ef25fa71..e65b37a9 100644 --- a/Disco.Services/Devices/Exporting/DeviceExport.cs +++ b/Disco.Services/Devices/Exporting/DeviceExport.cs @@ -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(); diff --git a/Disco.Services/Users/UserService.cs b/Disco.Services/Users/UserService.cs index 85f815cc..ad48c29c 100644 --- a/Disco.Services/Users/UserService.cs +++ b/Disco.Services/Users/UserService.cs @@ -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));