From 11bd1d9a9760c7bc6a601d78b3d89ec9028647a2 Mon Sep 17 00:00:00 2001 From: transtrike Date: Tue, 12 Jan 2021 13:16:39 +0200 Subject: Language layers refactored; User implements adding & removing Languages; Migrations added --- .../Models/Language/CreateLanguageServiceModel.cs | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/DevHive.Services/Models/Language/CreateLanguageServiceModel.cs (limited to 'src/DevHive.Services/Models/Language/CreateLanguageServiceModel.cs') diff --git a/src/DevHive.Services/Models/Language/CreateLanguageServiceModel.cs b/src/DevHive.Services/Models/Language/CreateLanguageServiceModel.cs new file mode 100644 index 0000000..75e7714 --- /dev/null +++ b/src/DevHive.Services/Models/Language/CreateLanguageServiceModel.cs @@ -0,0 +1,9 @@ +using System; + +namespace DevHive.Services.Models.Language +{ + public class CreateLanguageServiceModel : LanguageServiceModel + { + public string Name { get; set; } + } +} -- cgit v1.2.3 From 8e11fbaa79ad6fba234e8162c5b291174ed31fbb Mon Sep 17 00:00:00 2001 From: transtrike Date: Tue, 12 Jan 2021 23:07:13 +0200 Subject: Fixed bugs with Lang features, User's GetById, Lang & User mappings; Added more UserService validations --- src/DevHive.Data/Repositories/UserRepository.cs | 9 ++++- .../Configurations/Mapping/LanguageMappings.cs | 5 +++ .../Models/Identity/User/UserServiceModel.cs | 6 +++- .../Models/Language/CreateLanguageServiceModel.cs | 2 +- .../Models/Language/UpdateLanguageServiceModel.cs | 7 +++- src/DevHive.Services/Services/LanguageService.cs | 7 ++-- src/DevHive.Services/Services/UserService.cs | 42 +++++++++++----------- .../Extensions/ConfigureDependencyInjection.cs | 2 -- src/DevHive.Web/Controllers/ErrorController.cs | 3 ++ src/DevHive.Web/Controllers/UserController.cs | 2 ++ .../Models/Identity/User/UserWebModel.cs | 4 +++ .../Models/Language/CreateLanguageWebModel.cs | 2 +- src/DevHive.code-workspace | 3 ++ 13 files changed, 62 insertions(+), 32 deletions(-) (limited to 'src/DevHive.Services/Models/Language/CreateLanguageServiceModel.cs') diff --git a/src/DevHive.Data/Repositories/UserRepository.cs b/src/DevHive.Data/Repositories/UserRepository.cs index e3c1304..64a81ae 100644 --- a/src/DevHive.Data/Repositories/UserRepository.cs +++ b/src/DevHive.Data/Repositories/UserRepository.cs @@ -67,8 +67,10 @@ namespace DevHive.Data.Repositories public async Task GetByIdAsync(Guid id) { return await this._context.Users - .Include(x => x.Roles) .Include(x => x.Friends) + .Include(x => x.Roles) + .Include(x => x.Langauges) + .Include(x => x.Technologies) .FirstOrDefaultAsync(x => x.Id == id); } @@ -218,6 +220,11 @@ namespace DevHive.Data.Repositories { return user.Friends.Count >= 1; } + + public bool DoesUserHaveThisLanguage(User user, Language language) + { + return user.Langauges.Contains(language); + } #endregion } } diff --git a/src/DevHive.Services/Configurations/Mapping/LanguageMappings.cs b/src/DevHive.Services/Configurations/Mapping/LanguageMappings.cs index 0be9ca2..e483fff 100644 --- a/src/DevHive.Services/Configurations/Mapping/LanguageMappings.cs +++ b/src/DevHive.Services/Configurations/Mapping/LanguageMappings.cs @@ -9,7 +9,12 @@ namespace DevHive.Services.Configurations.Mapping public LanguageMappings() { CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); } } } \ No newline at end of file diff --git a/src/DevHive.Services/Models/Identity/User/UserServiceModel.cs b/src/DevHive.Services/Models/Identity/User/UserServiceModel.cs index 953b038..8825f50 100644 --- a/src/DevHive.Services/Models/Identity/User/UserServiceModel.cs +++ b/src/DevHive.Services/Models/Identity/User/UserServiceModel.cs @@ -1,11 +1,15 @@ using System.Collections.Generic; using DevHive.Common.Models.Identity; +using DevHive.Services.Models.Language; +using DevHive.Services.Models.Technology; namespace DevHive.Services.Models.Identity.User { public class UserServiceModel : BaseUserServiceModel { public IList Roles { get; set; } = new List(); - public List Friends { get; set; } = new List(); + public IList Friends { get; set; } = new List(); + public IList Languages { get; set; } = new List(); + public IList TechnologyServiceModels { get; set; } = new List(); } } diff --git a/src/DevHive.Services/Models/Language/CreateLanguageServiceModel.cs b/src/DevHive.Services/Models/Language/CreateLanguageServiceModel.cs index 75e7714..9d66d3e 100644 --- a/src/DevHive.Services/Models/Language/CreateLanguageServiceModel.cs +++ b/src/DevHive.Services/Models/Language/CreateLanguageServiceModel.cs @@ -2,7 +2,7 @@ using System; namespace DevHive.Services.Models.Language { - public class CreateLanguageServiceModel : LanguageServiceModel + public class CreateLanguageServiceModel { public string Name { get; set; } } diff --git a/src/DevHive.Services/Models/Language/UpdateLanguageServiceModel.cs b/src/DevHive.Services/Models/Language/UpdateLanguageServiceModel.cs index fdc309e..8536693 100644 --- a/src/DevHive.Services/Models/Language/UpdateLanguageServiceModel.cs +++ b/src/DevHive.Services/Models/Language/UpdateLanguageServiceModel.cs @@ -1,4 +1,9 @@ +using System; + namespace DevHive.Services.Models.Language { - public class UpdateLanguageServiceModel : CreateLanguageServiceModel { } + public class UpdateLanguageServiceModel : LanguageServiceModel + { + public string Name { get; set; } + } } diff --git a/src/DevHive.Services/Services/LanguageService.cs b/src/DevHive.Services/Services/LanguageService.cs index 127bde4..ccc64fd 100644 --- a/src/DevHive.Services/Services/LanguageService.cs +++ b/src/DevHive.Services/Services/LanguageService.cs @@ -18,12 +18,13 @@ namespace DevHive.Services.Services this._languageMapper = mapper; } - public async Task CreateLanguage(CreateLanguageServiceModel languageServiceModel) + public async Task CreateLanguage(CreateLanguageServiceModel createLanguageServiceModel) { - if (await this._languageRepository.DoesLanguageNameExistAsync(languageServiceModel.Name)) + if (await this._languageRepository.DoesLanguageNameExistAsync(createLanguageServiceModel.Name)) throw new ArgumentException("Language already exists!"); - Language language = this._languageMapper.Map(languageServiceModel); + //TODO: Fix, cuz it breaks + Language language = this._languageMapper.Map(createLanguageServiceModel); bool result = await this._languageRepository.AddAsync(language); return result; diff --git a/src/DevHive.Services/Services/UserService.cs b/src/DevHive.Services/Services/UserService.cs index 4fb18a0..c1de741 100644 --- a/src/DevHive.Services/Services/UserService.cs +++ b/src/DevHive.Services/Services/UserService.cs @@ -111,6 +111,9 @@ namespace DevHive.Services.Services { Tuple tuple = await ValidateUserAndLanguage(userId, languageServiceModel); + if (this._userRepository.DoesUserHaveThisLanguage(tuple.Item1, tuple.Item2)) + throw new ArgumentException("User already has this language!"); + return await this._userRepository.AddLanguageToUserAsync(tuple.Item1, tuple.Item2); } @@ -201,6 +204,9 @@ namespace DevHive.Services.Services { Tuple tuple = await ValidateUserAndLanguage(userId, languageServiceModel); + if (!this._userRepository.DoesUserHaveThisLanguage(tuple.Item1, tuple.Item2)) + throw new ArgumentException("User does not have this language!"); + return await this._userRepository.RemoveLanguageFromUserAsync(tuple.Item1, tuple.Item2); } @@ -293,44 +299,36 @@ namespace DevHive.Services.Services private async Task> ValidateUserAndLanguage(Guid userId, LanguageServiceModel languageServiceModel) { - Task userExists = this._userRepository.DoesUserExistAsync(userId); - Task languageExists = this._languageRepository.DoesLanguageExistAsync(languageServiceModel.Id); + bool userExists = await this._userRepository.DoesUserExistAsync(userId); + bool languageExists = await this._languageRepository.DoesLanguageExistAsync(languageServiceModel.Id); - await Task.WhenAll(userExists, languageExists); - - if (!userExists.Result) + if (!userExists) throw new ArgumentException("User does not exist!"); - if (!languageExists.Result) + if (!languageExists) throw new ArgumentException("Language does not exist!"); - Task user = this._userRepository.GetByIdAsync(userId); - Task language = this._languageRepository.GetByIdAsync(languageServiceModel.Id); - - await Task.WhenAll(user, language); + User user = await this._userRepository.GetByIdAsync(userId); + Language language = await this._languageRepository.GetByIdAsync(languageServiceModel.Id); - return new Tuple(user.Result, language.Result); + return new Tuple(user, language); } private async Task> ValidateUserAndTechnology(Guid userId, TechnologyServiceModel technologyServiceModel) { - Task userExists = this._userRepository.DoesUserExistAsync(userId); - Task technologyExists = this._technologyRepository.DoesTechnologyExistAsync(technologyServiceModel.Id); - - await Task.WhenAll(userExists, technologyExists); + bool userExists = await this._userRepository.DoesUserExistAsync(userId); + bool technologyExists = await this._technologyRepository.DoesTechnologyExistAsync(technologyServiceModel.Id); - if (!userExists.Result) + if (!userExists) throw new ArgumentException("User does not exist!"); - if (!technologyExists.Result) + if (!technologyExists) throw new ArgumentException("Language does not exist!"); - Task user = this._userRepository.GetByIdAsync(userId); - Task technology = this._technologyRepository.GetByIdAsync(technologyServiceModel.Id); - - await Task.WhenAll(user, technology); + User user = await this._userRepository.GetByIdAsync(userId); + Technology technology = await this._technologyRepository.GetByIdAsync(technologyServiceModel.Id); - return new Tuple(user.Result, technology.Result); + return new Tuple(user, technology); } #endregion } diff --git a/src/DevHive.Web/Configurations/Extensions/ConfigureDependencyInjection.cs b/src/DevHive.Web/Configurations/Extensions/ConfigureDependencyInjection.cs index cce5174..46b2591 100644 --- a/src/DevHive.Web/Configurations/Extensions/ConfigureDependencyInjection.cs +++ b/src/DevHive.Web/Configurations/Extensions/ConfigureDependencyInjection.cs @@ -20,8 +20,6 @@ namespace DevHive.Web.Configurations.Extensions services.AddTransient(); services.AddTransient(); services.AddTransient(); - - System.Console.WriteLine(services.Count); } } } \ No newline at end of file diff --git a/src/DevHive.Web/Controllers/ErrorController.cs b/src/DevHive.Web/Controllers/ErrorController.cs index 67a83fe..c3f1e55 100644 --- a/src/DevHive.Web/Controllers/ErrorController.cs +++ b/src/DevHive.Web/Controllers/ErrorController.cs @@ -1,5 +1,6 @@ using System; using System.Diagnostics; +using AutoMapper; using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; @@ -29,6 +30,8 @@ namespace DevHive.Web.Controllers { case ArgumentException _: case InvalidOperationException _: + case AutoMapperMappingException _: + case AutoMapperConfigurationException _: return MessageToObject(exception.Error.Message); default: return MessageToObject(null); diff --git a/src/DevHive.Web/Controllers/UserController.cs b/src/DevHive.Web/Controllers/UserController.cs index c222ba6..0960915 100644 --- a/src/DevHive.Web/Controllers/UserController.cs +++ b/src/DevHive.Web/Controllers/UserController.cs @@ -94,6 +94,7 @@ namespace DevHive.Web.Controllers #endregion #region Read + [HttpGet] public async Task GetById(Guid id, [FromHeader] string authorization) { @@ -135,6 +136,7 @@ namespace DevHive.Web.Controllers #endregion #region Delete + [HttpDelete] public async Task Delete(Guid id, [FromHeader] string authorization) { diff --git a/src/DevHive.Web/Models/Identity/User/UserWebModel.cs b/src/DevHive.Web/Models/Identity/User/UserWebModel.cs index 37d6553..260d34c 100644 --- a/src/DevHive.Web/Models/Identity/User/UserWebModel.cs +++ b/src/DevHive.Web/Models/Identity/User/UserWebModel.cs @@ -1,6 +1,8 @@ using System.Collections.Generic; using DevHive.Common.Models.Identity; using DevHive.Web.Models.Identity.Role; +using DevHive.Web.Models.Language; +using DevHive.Web.Models.Technology; namespace DevHive.Web.Models.Identity.User { @@ -8,5 +10,7 @@ namespace DevHive.Web.Models.Identity.User { public IList Roles { get; set; } = new List(); public IList Friends { get; set; } = new List(); + public IList Languages { get; set; } = new List(); + public IList Technologies { get; set; } = new List(); } } diff --git a/src/DevHive.Web/Models/Language/CreateLanguageWebModel.cs b/src/DevHive.Web/Models/Language/CreateLanguageWebModel.cs index 111beed..d261500 100644 --- a/src/DevHive.Web/Models/Language/CreateLanguageWebModel.cs +++ b/src/DevHive.Web/Models/Language/CreateLanguageWebModel.cs @@ -2,7 +2,7 @@ using System; namespace DevHive.Web.Models.Language { - public class CreateLanguageWebModel : LanguageWebModel + public class CreateLanguageWebModel { public string Name { get; set; } } diff --git a/src/DevHive.code-workspace b/src/DevHive.code-workspace index 8899918..04a9a2f 100644 --- a/src/DevHive.code-workspace +++ b/src/DevHive.code-workspace @@ -57,6 +57,9 @@ "env": { "ASPNETCORE_ENVIRONMENT": "Development" }, + "launchBrowser": { + "enabled": true + } }, ], "compounds": [] -- cgit v1.2.3