diff options
| author | transtrike <transtrike@gmail.com> | 2021-01-12 20:45:14 +0200 |
|---|---|---|
| committer | transtrike <transtrike@gmail.com> | 2021-01-12 20:45:14 +0200 |
| commit | 56f5578d5f93a56984deb6735dba51551868f6d8 (patch) | |
| tree | 5f309ba5a79882ad41ed78bf7ae8f18f38be757e /src/DevHive.Services/Services | |
| parent | d2a754aa220f37ac28393451e7ad5793687bb999 (diff) | |
| download | DevHive-56f5578d5f93a56984deb6735dba51551868f6d8.tar DevHive-56f5578d5f93a56984deb6735dba51551868f6d8.tar.gz DevHive-56f5578d5f93a56984deb6735dba51551868f6d8.zip | |
Full implementation of Language & Technologies to User
Diffstat (limited to 'src/DevHive.Services/Services')
| -rw-r--r-- | src/DevHive.Services/Services/TechnologyService.cs | 24 | ||||
| -rw-r--r-- | src/DevHive.Services/Services/UserService.cs | 77 |
2 files changed, 81 insertions, 20 deletions
diff --git a/src/DevHive.Services/Services/TechnologyService.cs b/src/DevHive.Services/Services/TechnologyService.cs index 2913a55..883b8c5 100644 --- a/src/DevHive.Services/Services/TechnologyService.cs +++ b/src/DevHive.Services/Services/TechnologyService.cs @@ -17,8 +17,10 @@ namespace DevHive.Services.Services this._technologyRepository = technologyRepository; this._technologyMapper = technologyMapper; } - - public async Task<bool> Create(TechnologyServiceModel technologyServiceModel) + + #region Create + + public async Task<bool> Create(CreateTechnologyServiceModel technologyServiceModel) { if (await this._technologyRepository.DoesTechnologyNameExist(technologyServiceModel.Name)) throw new ArgumentException("Technology already exists!"); @@ -28,7 +30,10 @@ namespace DevHive.Services.Services return result; } - + #endregion + + #region Read + public async Task<TechnologyServiceModel> GetTechnologyById(Guid id) { Technology technology = await this._technologyRepository.GetByIdAsync(id); @@ -38,10 +43,13 @@ namespace DevHive.Services.Services return this._technologyMapper.Map<TechnologyServiceModel>(technology); } + #endregion + + #region Update public async Task<bool> UpdateTechnology(UpdateTechnologyServiceModel updateTechnologyServiceModel) { - if (!await this._technologyRepository.DoesTechnologyExist(updateTechnologyServiceModel.Id)) + if (!await this._technologyRepository.DoesTechnologyExistAsync(updateTechnologyServiceModel.Id)) throw new ArgumentException("Technology does not exist!"); if (await this._technologyRepository.DoesTechnologyNameExist(updateTechnologyServiceModel.Name)) @@ -52,10 +60,13 @@ namespace DevHive.Services.Services return result; } - + #endregion + + #region Delete + public async Task<bool> DeleteTechnology(Guid id) { - if (!await this._technologyRepository.DoesTechnologyExist(id)) + if (!await this._technologyRepository.DoesTechnologyExistAsync(id)) throw new ArgumentException("Technology does not exist!"); Technology technology = await this._technologyRepository.GetByIdAsync(id); @@ -63,5 +74,6 @@ namespace DevHive.Services.Services return result; } + #endregion } }
\ No newline at end of file diff --git a/src/DevHive.Services/Services/UserService.cs b/src/DevHive.Services/Services/UserService.cs index e1f925d..4fb18a0 100644 --- a/src/DevHive.Services/Services/UserService.cs +++ b/src/DevHive.Services/Services/UserService.cs @@ -13,6 +13,7 @@ using System.Collections.Generic; using DevHive.Common.Models.Identity; using DevHive.Services.Models.Language; using DevHive.Data.Repositories; +using DevHive.Services.Models.Technology; namespace DevHive.Services.Services { @@ -108,23 +109,16 @@ namespace DevHive.Services.Services public async Task<bool> AddLanguageToUser(Guid userId, LanguageServiceModel languageServiceModel) { - Task<bool> userExists = this._userRepository.DoesUserExistAsync(userId); - Task<bool> languageExists = this._languageRepository.DoesLanguageExistAsync(languageServiceModel.Id); - - await Task.WhenAll(userExists, languageExists); - - if (!userExists.Result) - throw new ArgumentException("User does not exist!"); + Tuple<User, Language> tuple = await ValidateUserAndLanguage(userId, languageServiceModel); - if (!languageExists.Result) - throw new ArgumentException("Language does not exist!"); - - Task<User> user = this._userRepository.GetByIdAsync(userId); - Task<Language> language = this._languageRepository.GetByIdAsync(languageServiceModel.Id); + return await this._userRepository.AddLanguageToUserAsync(tuple.Item1, tuple.Item2); + } - await Task.WhenAll(user, language); + public async Task<bool> AddTechnologyToUser(Guid userId, TechnologyServiceModel technologyServiceModel) + { + Tuple<User, Technology> tuple = await ValidateUserAndTechnology(userId, technologyServiceModel); - return await this._userRepository.AddLanguageToUserAsync(user.Result, language.Result); + return await this._userRepository.AddTechnologyToUserAsync(tuple.Item1, tuple.Item2); } #endregion @@ -202,6 +196,20 @@ namespace DevHive.Services.Services return await this.RemoveFriend(userId, friendId); } + + public async Task<bool> RemoveLanguageFromUser(Guid userId, LanguageServiceModel languageServiceModel) + { + Tuple<User, Language> tuple = await ValidateUserAndLanguage(userId, languageServiceModel); + + return await this._userRepository.RemoveLanguageFromUserAsync(tuple.Item1, tuple.Item2); + } + + public async Task<bool> RemoveTechnologyFromUser(Guid userId, TechnologyServiceModel technologyServiceModel) + { + Tuple<User, Technology> tuple = await ValidateUserAndTechnology(userId, technologyServiceModel); + + return await this._userRepository.RemoveTechnologyFromUserAsync(tuple.Item1, tuple.Item2); + } #endregion #region Validations @@ -283,6 +291,47 @@ namespace DevHive.Services.Services return string.Join(string.Empty, SHA512.HashData(Encoding.ASCII.GetBytes(password))); } + private async Task<Tuple<User, Language>> ValidateUserAndLanguage(Guid userId, LanguageServiceModel languageServiceModel) + { + Task<bool> userExists = this._userRepository.DoesUserExistAsync(userId); + Task<bool> languageExists = this._languageRepository.DoesLanguageExistAsync(languageServiceModel.Id); + + await Task.WhenAll(userExists, languageExists); + + if (!userExists.Result) + throw new ArgumentException("User does not exist!"); + + if (!languageExists.Result) + throw new ArgumentException("Language does not exist!"); + + Task<User> user = this._userRepository.GetByIdAsync(userId); + Task<Language> language = this._languageRepository.GetByIdAsync(languageServiceModel.Id); + + await Task.WhenAll(user, language); + + return new Tuple<User, Language>(user.Result, language.Result); + } + + private async Task<Tuple<User, Technology>> ValidateUserAndTechnology(Guid userId, TechnologyServiceModel technologyServiceModel) + { + Task<bool> userExists = this._userRepository.DoesUserExistAsync(userId); + Task<bool> technologyExists = this._technologyRepository.DoesTechnologyExistAsync(technologyServiceModel.Id); + + await Task.WhenAll(userExists, technologyExists); + + if (!userExists.Result) + throw new ArgumentException("User does not exist!"); + + if (!technologyExists.Result) + throw new ArgumentException("Language does not exist!"); + + Task<User> user = this._userRepository.GetByIdAsync(userId); + Task<Technology> technology = this._technologyRepository.GetByIdAsync(technologyServiceModel.Id); + + await Task.WhenAll(user, technology); + + return new Tuple<User, Technology>(user.Result, technology.Result); + } #endregion } } |
