aboutsummaryrefslogtreecommitdiff
path: root/src/DevHive.Services/Services
diff options
context:
space:
mode:
authortranstrike <transtrike@gmail.com>2021-01-12 20:45:14 +0200
committertranstrike <transtrike@gmail.com>2021-01-12 20:45:14 +0200
commit56f5578d5f93a56984deb6735dba51551868f6d8 (patch)
tree5f309ba5a79882ad41ed78bf7ae8f18f38be757e /src/DevHive.Services/Services
parentd2a754aa220f37ac28393451e7ad5793687bb999 (diff)
downloadDevHive-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.cs24
-rw-r--r--src/DevHive.Services/Services/UserService.cs77
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
}
}