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 | |
| 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')
5 files changed, 94 insertions, 25 deletions
diff --git a/src/DevHive.Services/Models/Technology/CreateTechnologyServiceModel.cs b/src/DevHive.Services/Models/Technology/CreateTechnologyServiceModel.cs new file mode 100644 index 0000000..ca848f9 --- /dev/null +++ b/src/DevHive.Services/Models/Technology/CreateTechnologyServiceModel.cs @@ -0,0 +1,9 @@ +using System; + +namespace DevHive.Services.Models.Technology +{ + public class CreateTechnologyServiceModel : TechnologyServiceModel + { + public string Name { get; set; } + } +}
\ No newline at end of file diff --git a/src/DevHive.Services/Models/Technology/TechnologyServiceModel.cs b/src/DevHive.Services/Models/Technology/TechnologyServiceModel.cs index 6fcc83e..afea6cf 100644 --- a/src/DevHive.Services/Models/Technology/TechnologyServiceModel.cs +++ b/src/DevHive.Services/Models/Technology/TechnologyServiceModel.cs @@ -1,7 +1,9 @@ +using System; + namespace DevHive.Services.Models.Technology { public class TechnologyServiceModel { - public string Name { get; set; } + public Guid Id { get; set; } } }
\ No newline at end of file diff --git a/src/DevHive.Services/Models/Technology/UpdateTechnologyServiceModel.cs b/src/DevHive.Services/Models/Technology/UpdateTechnologyServiceModel.cs index e7ee85b..bfeae51 100644 --- a/src/DevHive.Services/Models/Technology/UpdateTechnologyServiceModel.cs +++ b/src/DevHive.Services/Models/Technology/UpdateTechnologyServiceModel.cs @@ -2,8 +2,5 @@ using System; namespace DevHive.Services.Models.Technology { - public class UpdateTechnologyServiceModel : TechnologyServiceModel - { - public Guid Id { get; set; } - } + public class UpdateTechnologyServiceModel : CreateTechnologyServiceModel {} }
\ No newline at end of file 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 } } |
