aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortranstrike <transtrike@gmail.com>2021-01-26 14:38:21 +0200
committertranstrike <transtrike@gmail.com>2021-01-26 14:38:21 +0200
commitf1515439c5fd26a96817723db5d48b77baa82fb6 (patch)
tree5ee90eefa9e5fde2629d8780b6f800cc39ec695d
parentdf52b1068e16adc50ffd365e2e8b8ea19b59fac3 (diff)
downloadDevHive-f1515439c5fd26a96817723db5d48b77baa82fb6.tar
DevHive-f1515439c5fd26a96817723db5d48b77baa82fb6.tar.gz
DevHive-f1515439c5fd26a96817723db5d48b77baa82fb6.zip
Working on Update User; Currently not updating user in UserRepo
-rw-r--r--src/DevHive.Data/Interfaces/Repositories/IUserRepository.cs9
-rw-r--r--src/DevHive.Data/Repositories/UserRepository.cs54
-rw-r--r--src/DevHive.Services/Services/UserService.cs62
3 files changed, 57 insertions, 68 deletions
diff --git a/src/DevHive.Data/Interfaces/Repositories/IUserRepository.cs b/src/DevHive.Data/Interfaces/Repositories/IUserRepository.cs
index c29669d..4346e9c 100644
--- a/src/DevHive.Data/Interfaces/Repositories/IUserRepository.cs
+++ b/src/DevHive.Data/Interfaces/Repositories/IUserRepository.cs
@@ -10,20 +10,13 @@ namespace DevHive.Data.Interfaces.Repositories
{
//Read
Task<User> GetByUsernameAsync(string username);
- Language GetUserLanguage(User user, Language language);
- HashSet<Language> GetUserLanguages(User user);
- HashSet<Technology> GetUserTechnologies(User user);
- Technology GetUserTechnology(User user, Technology technology);
IEnumerable<User> QueryAll();
//Validations
Task<bool> DoesEmailExistAsync(string email);
Task<bool> DoesUserExistAsync(Guid id);
Task<bool> DoesUserHaveThisFriendAsync(Guid userId, Guid friendId);
- Task<bool> DoesUsernameExistAsync(string username);
- bool DoesUserHaveThisLanguage(User user, Language language);
bool DoesUserHaveThisUsername(Guid id, string username);
- bool DoesUserHaveFriends(User user);
- bool DoesUserHaveThisTechnology(User user, Technology technology);
+ Task<bool> DoesUsernameExistAsync(string username);
}
}
diff --git a/src/DevHive.Data/Repositories/UserRepository.cs b/src/DevHive.Data/Repositories/UserRepository.cs
index a2298db..d319ce7 100644
--- a/src/DevHive.Data/Repositories/UserRepository.cs
+++ b/src/DevHive.Data/Repositories/UserRepository.cs
@@ -8,7 +8,20 @@ using Microsoft.EntityFrameworkCore;
namespace DevHive.Data.Repositories
{
- public class UserRepository : BaseRepository<User>, IUserRepository
+ public interface IUserRepository
+ {
+ Task<bool> DoesEmailExistAsync(string email);
+ Task<bool> DoesUserExistAsync(Guid id);
+ Task<bool> DoesUserHaveThisFriendAsync(Guid userId, Guid friendId);
+ bool DoesUserHaveThisUsername(Guid id, string username);
+ Task<bool> DoesUsernameExistAsync(string username);
+ Task<bool> EditAsync(Guid id, User newEntity);
+ Task<User> GetByIdAsync(Guid id);
+ Task<User> GetByUsernameAsync(string username);
+ IEnumerable<User> QueryAll();
+ }
+
+ public class UserRepository : BaseRepository<User>, IUserRepository, IUserRepository
{
private readonly DevHiveContext _context;
@@ -48,27 +61,17 @@ namespace DevHive.Data.Repositories
.Include(x => x.Technologies)
.FirstOrDefaultAsync(x => x.UserName == username);
}
+ #endregion
- public HashSet<Language> GetUserLanguages(User user)
- {
- return user.Languages;
- }
-
- public Language GetUserLanguage(User user, Language language)
+ #region Update
+ public override async Task<bool> EditAsync(Guid id, User newEntity)
{
- return user.Languages
- .FirstOrDefault(x => x.Id == language.Id);
- }
+ User user = await GetByIdAsync(id);
- public HashSet<Technology> GetUserTechnologies(User user)
- {
- return user.Technologies;
- }
+ this._context.Update(user);
+ user = newEntity;
- public Technology GetUserTechnology(User user, Technology technology)
- {
- return user.Technologies
- .FirstOrDefault(x => x.Id == technology.Id);
+ return await this.SaveChangesAsync(this._context);
}
#endregion
@@ -113,21 +116,6 @@ namespace DevHive.Data.Repositories
.Any(x => x.Id == id &&
x.UserName == username);
}
-
- public bool DoesUserHaveFriends(User user)
- {
- return user.Friends.Count >= 1;
- }
-
- public bool DoesUserHaveThisLanguage(User user, Language language)
- {
- return user.Languages.Contains(language);
- }
-
- public bool DoesUserHaveThisTechnology(User user, Technology technology)
- {
- return user.Technologies.Contains(technology);
- }
#endregion
}
}
diff --git a/src/DevHive.Services/Services/UserService.cs b/src/DevHive.Services/Services/UserService.cs
index 960630e..0e3bf72 100644
--- a/src/DevHive.Services/Services/UserService.cs
+++ b/src/DevHive.Services/Services/UserService.cs
@@ -111,9 +111,7 @@ namespace DevHive.Services.Services
await this.ValidateUserCollections(updateUserServiceModel);
- updateUserServiceModel = await this.PopulateUpdateModelWithIds(updateUserServiceModel);
-
- User user = this._userMapper.Map<User>(updateUserServiceModel);
+ User user = await this.PopulateModel(updateUserServiceModel);
bool successful = await this._userRepository.EditAsync(updateUserServiceModel.Id, user);
@@ -298,49 +296,59 @@ namespace DevHive.Services.Services
return admin.Id;
}
- private async Task<UpdateUserServiceModel> PopulateUpdateModelWithIds(UpdateUserServiceModel updateUserServiceModel)
+ private async Task<User> PopulateModel(UpdateUserServiceModel updateUserServiceModel)
{
- /* Roles */
- int roleCount = updateUserServiceModel.Roles.Count;
- for (int i = 0; i < roleCount; i++)
+ User user = this._userMapper.Map<User>(updateUserServiceModel);
+
+ /* Fetch Roles and replace model's*/
+ HashSet<Role> roles = new();
+ int rolesCount = updateUserServiceModel.Roles.Count;
+ for (int i = 0; i < rolesCount; i++)
{
Role role = await this._roleRepository.GetByNameAsync(updateUserServiceModel.Roles.ElementAt(i).Name) ??
throw new ArgumentException("Invalid role name!");
- updateUserServiceModel.Roles.ElementAt(i).Id = role.Id;
+ roles.Add(role);
}
+ user.Roles = roles;
- /* Languages */
- int langCount = updateUserServiceModel.Languages.Count;
- for (int i = 0; i < langCount; i++)
+ /* Fetch Friends and replace model's*/
+ HashSet<User> friends = new();
+ int friendsCount = updateUserServiceModel.Friends.Count;
+ for (int i = 0; i < friendsCount; i++)
{
- Language language = await this._languageRepository.GetByNameAsync(updateUserServiceModel.Languages.ElementAt(i).Name) ??
- throw new ArgumentException("Invalid language name!");
+ User friend = await this._userRepository.GetByUsernameAsync(updateUserServiceModel.Friends.ElementAt(i).UserName) ??
+ throw new ArgumentException("Invalid friend's username!");
- updateUserServiceModel.Languages.ElementAt(i).Id = language.Id;
+ friends.Add(friend);
}
+ user.Friends = friends;
- /* Technologies */
- int techCount = updateUserServiceModel.Technologies.Count;
- for (int i = 0; i < techCount; i++)
+ /* Fetch Languages and replace model's*/
+ HashSet<Language> languages = new();
+ int languagesCount = updateUserServiceModel.Languages.Count;
+ for (int i = 0; i < languagesCount; i++)
{
- Technology technology = await this._technologyRepository.GetByNameAsync(updateUserServiceModel.Technologies.ElementAt(i).Name) ??
- throw new ArgumentException("Invalid technology name!");
+ Language language = await this._languageRepository.GetByNameAsync(updateUserServiceModel.Languages.ElementAt(i).Name) ??
+ throw new ArgumentException("Invalid language name!");
- updateUserServiceModel.Technologies.ElementAt(i).Id = technology.Id;
+ languages.Add(language);
}
+ user.Languages = languages;
- /* Friends */
- int friendsCount = updateUserServiceModel.Friends.Count;
- for (int i = 0; i < friendsCount; i++)
+ /* Fetch Technologies and replace model's*/
+ HashSet<Technology> technologies = new();
+ int technologiesCount = updateUserServiceModel.Technologies.Count;
+ for (int i = 0; i < technologiesCount; i++)
{
- User friend = await this._userRepository.GetByUsernameAsync(updateUserServiceModel.Friends.ElementAt(i).UserName) ??
- throw new ArgumentException("Invalid friend's username!");
+ Technology technology = await this._technologyRepository.GetByNameAsync(updateUserServiceModel.Technologies.ElementAt(i).Name) ??
+ throw new ArgumentException("Invalid technology name!");
- updateUserServiceModel.Friends.ElementAt(i).Id = friend.Id;
+ technologies.Add(technology);
}
+ user.Technologies = technologies;
- return updateUserServiceModel;
+ return user;
}
#endregion
}