diff options
| -rw-r--r-- | src/DevHive.Data/Interfaces/Repositories/IUserRepository.cs | 9 | ||||
| -rw-r--r-- | src/DevHive.Data/Repositories/UserRepository.cs | 54 | ||||
| -rw-r--r-- | src/DevHive.Services/Services/UserService.cs | 62 |
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 } |
