From df52b1068e16adc50ffd365e2e8b8ea19b59fac3 Mon Sep 17 00:00:00 2001 From: transtrike Date: Tue, 26 Jan 2021 11:44:41 +0200 Subject: UserUpdate does not allow updating roles if not admin; HTTP Put now works properly; UserUpdate validates properly --- src/DevHive.Web/Configurations/Mapping/RoleMappings.cs | 4 ++-- src/DevHive.Web/Configurations/Mapping/UserMappings.cs | 14 ++++---------- src/DevHive.Web/Controllers/RoleController.cs | 2 +- .../Models/Identity/Role/UpdateRoleWebModel.cs | 6 ++++-- src/DevHive.Web/Models/Identity/User/FriendWebModel.cs | 16 ---------------- .../Models/Identity/User/UpdateUserWebModel.cs | 2 +- src/DevHive.Web/Models/Identity/User/UserWebModel.cs | 2 +- src/DevHive.Web/Models/Identity/User/UsernameWebModel.cs | 16 ++++++++++++++++ 8 files changed, 29 insertions(+), 33 deletions(-) delete mode 100644 src/DevHive.Web/Models/Identity/User/FriendWebModel.cs create mode 100644 src/DevHive.Web/Models/Identity/User/UsernameWebModel.cs (limited to 'src/DevHive.Web') diff --git a/src/DevHive.Web/Configurations/Mapping/RoleMappings.cs b/src/DevHive.Web/Configurations/Mapping/RoleMappings.cs index 2f01f77..2ea2742 100644 --- a/src/DevHive.Web/Configurations/Mapping/RoleMappings.cs +++ b/src/DevHive.Web/Configurations/Mapping/RoleMappings.cs @@ -11,11 +11,11 @@ namespace DevHive.Web.Configurations.Mapping CreateMap(); CreateMap() .ForMember(src => src.Id, dest => dest.Ignore()); - CreateMap(); + CreateMap(); CreateMap(); CreateMap(); - CreateMap(); + CreateMap(); } } } diff --git a/src/DevHive.Web/Configurations/Mapping/UserMappings.cs b/src/DevHive.Web/Configurations/Mapping/UserMappings.cs index e80a69a..1b26cc9 100644 --- a/src/DevHive.Web/Configurations/Mapping/UserMappings.cs +++ b/src/DevHive.Web/Configurations/Mapping/UserMappings.cs @@ -2,8 +2,6 @@ using AutoMapper; using DevHive.Services.Models.Identity.User; using DevHive.Web.Models.Identity.User; using DevHive.Common.Models.Identity; -using DevHive.Web.Models.Language; -using DevHive.Web.Models.Technology; namespace DevHive.Web.Configurations.Mapping { @@ -21,16 +19,12 @@ namespace DevHive.Web.Configurations.Mapping CreateMap(); //Update - CreateMap() - .ForMember(src => src.Id, dest => dest.Ignore()); - CreateMap() - .ForMember(src => src.Id, dest => dest.Ignore()); - CreateMap() - .ForMember(src => src.Id, dest => dest.Ignore()) - .ForMember(src => src.Name, dest => dest.MapFrom(p => p.UserName)); + CreateMap(); + CreateMap(); + CreateMap(); CreateMap(); - CreateMap(); + CreateMap(); } } } diff --git a/src/DevHive.Web/Controllers/RoleController.cs b/src/DevHive.Web/Controllers/RoleController.cs index d8bb60c..c68a32b 100644 --- a/src/DevHive.Web/Controllers/RoleController.cs +++ b/src/DevHive.Web/Controllers/RoleController.cs @@ -40,7 +40,7 @@ namespace DevHive.Web.Controllers [Authorize(Policy = "User")] public async Task GetById(Guid id) { - ReadRoleServiceModel roleServiceModel = await this._roleService.GetRoleById(id); + RoleServiceModel roleServiceModel = await this._roleService.GetRoleById(id); RoleWebModel roleWebModel = this._roleMapper.Map(roleServiceModel); return new OkObjectResult(roleWebModel); diff --git a/src/DevHive.Web/Models/Identity/Role/UpdateRoleWebModel.cs b/src/DevHive.Web/Models/Identity/Role/UpdateRoleWebModel.cs index 254affc..3870481 100644 --- a/src/DevHive.Web/Models/Identity/Role/UpdateRoleWebModel.cs +++ b/src/DevHive.Web/Models/Identity/Role/UpdateRoleWebModel.cs @@ -4,10 +4,12 @@ using System.Diagnostics.CodeAnalysis; namespace DevHive.Web.Models.Identity.Role { - public class UpdateRoleWebModel : RoleWebModel + public class UpdateRoleWebModel { [NotNull] [Required] - public Guid Id { get; set; } + [MinLength(3)] + [MaxLength(50)] + public string Name { get; set; } } } diff --git a/src/DevHive.Web/Models/Identity/User/FriendWebModel.cs b/src/DevHive.Web/Models/Identity/User/FriendWebModel.cs deleted file mode 100644 index d59bff5..0000000 --- a/src/DevHive.Web/Models/Identity/User/FriendWebModel.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using System.Diagnostics.CodeAnalysis; -using DevHive.Web.Attributes; - -namespace DevHive.Web.Models.Identity.User -{ - public class FriendWebModel - { - [NotNull] - [Required] - [MinLength(3)] - [MaxLength(50)] - [OnlyAlphanumerics(ErrorMessage = "Username can only contain letters and digits!")] - public string UserName { get; set; } - } -} diff --git a/src/DevHive.Web/Models/Identity/User/UpdateUserWebModel.cs b/src/DevHive.Web/Models/Identity/User/UpdateUserWebModel.cs index 30c66fb..62901f6 100644 --- a/src/DevHive.Web/Models/Identity/User/UpdateUserWebModel.cs +++ b/src/DevHive.Web/Models/Identity/User/UpdateUserWebModel.cs @@ -17,7 +17,7 @@ namespace DevHive.Web.Models.Identity.User [NotNull] [Required] - public HashSet Friends { get; set; } + public HashSet Friends { get; set; } [NotNull] [Required] diff --git a/src/DevHive.Web/Models/Identity/User/UserWebModel.cs b/src/DevHive.Web/Models/Identity/User/UserWebModel.cs index 5b80ba3..4097901 100644 --- a/src/DevHive.Web/Models/Identity/User/UserWebModel.cs +++ b/src/DevHive.Web/Models/Identity/User/UserWebModel.cs @@ -15,7 +15,7 @@ namespace DevHive.Web.Models.Identity.User [NotNull] [Required] - public HashSet Friends { get; set; } = new HashSet(); + public HashSet Friends { get; set; } = new HashSet(); [NotNull] [Required] diff --git a/src/DevHive.Web/Models/Identity/User/UsernameWebModel.cs b/src/DevHive.Web/Models/Identity/User/UsernameWebModel.cs new file mode 100644 index 0000000..a20c1bf --- /dev/null +++ b/src/DevHive.Web/Models/Identity/User/UsernameWebModel.cs @@ -0,0 +1,16 @@ +using System.ComponentModel.DataAnnotations; +using System.Diagnostics.CodeAnalysis; +using DevHive.Web.Attributes; + +namespace DevHive.Web.Models.Identity.User +{ + public class UsernameWebModel + { + [NotNull] + [Required] + [MinLength(3)] + [MaxLength(50)] + [OnlyAlphanumerics(ErrorMessage = "Username can only contain letters and digits!")] + public string UserName { get; set; } + } +} -- cgit v1.2.3 From 93c14acb17f4b845c9e2b6781a6a3c10e23b6bf5 Mon Sep 17 00:00:00 2001 From: transtrike Date: Tue, 26 Jan 2021 15:00:34 +0200 Subject: Attributes changed to use Roles, not Policy --- src/DevHive.Web/Controllers/FeedController.cs | 2 ++ src/DevHive.Web/Controllers/LanguageController.cs | 6 ++++-- src/DevHive.Web/Controllers/PostController.cs | 1 + src/DevHive.Web/Controllers/RoleController.cs | 8 ++++---- src/DevHive.Web/Controllers/TechnologyController.cs | 6 ++++-- 5 files changed, 15 insertions(+), 8 deletions(-) (limited to 'src/DevHive.Web') diff --git a/src/DevHive.Web/Controllers/FeedController.cs b/src/DevHive.Web/Controllers/FeedController.cs index 7d0269b..9d3693b 100644 --- a/src/DevHive.Web/Controllers/FeedController.cs +++ b/src/DevHive.Web/Controllers/FeedController.cs @@ -4,12 +4,14 @@ using AutoMapper; using DevHive.Services.Interfaces; using DevHive.Services.Models; using DevHive.Web.Models.Feed; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace DevHive.Web.Controllers { [ApiController] [Route("/api/[controller]")] + [Authorize(Roles = "User,Admin")] public class FeedController { private readonly IFeedService _feedService; diff --git a/src/DevHive.Web/Controllers/LanguageController.cs b/src/DevHive.Web/Controllers/LanguageController.cs index c0c5fd1..de6bf15 100644 --- a/src/DevHive.Web/Controllers/LanguageController.cs +++ b/src/DevHive.Web/Controllers/LanguageController.cs @@ -11,7 +11,6 @@ namespace DevHive.Web.Controllers { [ApiController] [Route("/api/[controller]")] - [Authorize(Policy = "Administrator")] public class LanguageController { private readonly ILanguageService _languageService; @@ -24,6 +23,7 @@ namespace DevHive.Web.Controllers } [HttpPost] + [Authorize(Roles = "Admin")] public async Task Create([FromBody] CreateLanguageWebModel createLanguageWebModel) { CreateLanguageServiceModel languageServiceModel = this._languageMapper.Map(createLanguageWebModel); @@ -36,7 +36,7 @@ namespace DevHive.Web.Controllers } [HttpGet] - [Authorize(Policy = "User")] + [Authorize(Roles = "User,Admin")] public async Task GetById(Guid id) { ReadLanguageServiceModel languageServiceModel = await this._languageService.GetLanguageById(id); @@ -46,6 +46,7 @@ namespace DevHive.Web.Controllers } [HttpPut] + [Authorize(Roles = "Admin")] public async Task Update(Guid id, [FromBody] UpdateLanguageWebModel updateModel) { UpdateLanguageServiceModel updatelanguageServiceModel = this._languageMapper.Map(updateModel); @@ -60,6 +61,7 @@ namespace DevHive.Web.Controllers } [HttpDelete] + [Authorize(Roles = "Admin")] public async Task Delete(Guid id) { bool result = await this._languageService.DeleteLanguage(id); diff --git a/src/DevHive.Web/Controllers/PostController.cs b/src/DevHive.Web/Controllers/PostController.cs index 151c688..8bb1d66 100644 --- a/src/DevHive.Web/Controllers/PostController.cs +++ b/src/DevHive.Web/Controllers/PostController.cs @@ -27,6 +27,7 @@ namespace DevHive.Web.Controllers #region Create [HttpPost] + [Authorize(Roles = "Admin")] public async Task Create(Guid userId, [FromBody] CreatePostWebModel createPostWebModel) { CreatePostServiceModel createPostServiceModel = diff --git a/src/DevHive.Web/Controllers/RoleController.cs b/src/DevHive.Web/Controllers/RoleController.cs index c68a32b..0d2a2eb 100644 --- a/src/DevHive.Web/Controllers/RoleController.cs +++ b/src/DevHive.Web/Controllers/RoleController.cs @@ -23,7 +23,7 @@ namespace DevHive.Web.Controllers } [HttpPost] - // [Authorize(Policy = "Administrator")] + [Authorize(Roles = "Admin")] public async Task Create([FromBody] CreateRoleWebModel createRoleWebModel) { CreateRoleServiceModel roleServiceModel = @@ -37,7 +37,7 @@ namespace DevHive.Web.Controllers } [HttpGet] - [Authorize(Policy = "User")] + [Authorize(Roles = "User,Admin")] public async Task GetById(Guid id) { RoleServiceModel roleServiceModel = await this._roleService.GetRoleById(id); @@ -47,7 +47,7 @@ namespace DevHive.Web.Controllers } [HttpPut] - [Authorize(Policy = "Administrator")] + [Authorize(Roles = "Admin")] public async Task Update(Guid id, [FromBody] UpdateRoleWebModel updateRoleWebModel) { UpdateRoleServiceModel updateRoleServiceModel = @@ -63,7 +63,7 @@ namespace DevHive.Web.Controllers } [HttpDelete] - [Authorize(Policy = "Administrator")] + [Authorize(Roles = "Admin")] public async Task Delete(Guid id) { bool result = await this._roleService.DeleteRole(id); diff --git a/src/DevHive.Web/Controllers/TechnologyController.cs b/src/DevHive.Web/Controllers/TechnologyController.cs index 3d7568b..c107c6e 100644 --- a/src/DevHive.Web/Controllers/TechnologyController.cs +++ b/src/DevHive.Web/Controllers/TechnologyController.cs @@ -11,7 +11,6 @@ namespace DevHive.Web.Controllers { [ApiController] [Route("/api/[controller]")] - [Authorize(Policy = "Administrator")] public class TechnologyController { private readonly ITechnologyService _technologyService; @@ -24,6 +23,7 @@ namespace DevHive.Web.Controllers } [HttpPost] + [Authorize(Roles = "Admin")] public async Task Create([FromBody] CreateTechnologyWebModel createTechnologyWebModel) { CreateTechnologyServiceModel technologyServiceModel = this._technologyMapper.Map(createTechnologyWebModel); @@ -36,7 +36,7 @@ namespace DevHive.Web.Controllers } [HttpGet] - [Authorize(Policy = "User")] + [Authorize(Roles = "User,Admin")] public async Task GetById(Guid id) { CreateTechnologyServiceModel createTechnologyServiceModel = await this._technologyService.GetTechnologyById(id); @@ -46,6 +46,7 @@ namespace DevHive.Web.Controllers } [HttpPut] + [Authorize(Roles = "Admin")] public async Task Update(Guid id, [FromBody] UpdateTechnologyWebModel updateModel) { UpdateTechnologyServiceModel updateTechnologyServiceModel = this._technologyMapper.Map(updateModel); @@ -60,6 +61,7 @@ namespace DevHive.Web.Controllers } [HttpDelete] + [Authorize(Roles = "Admin")] public async Task Delete(Guid id) { bool result = await this._technologyService.DeleteTechnology(id); -- cgit v1.2.3 From bddc0b0566bc19e936ccae9d3aa16b6e0116b186 Mon Sep 17 00:00:00 2001 From: transtrike Date: Tue, 26 Jan 2021 15:38:40 +0200 Subject: GetLanguages&GetTechnologies implmenented --- .../Interfaces/Repositories/ILanguageRepository.cs | 5 ++++- .../Interfaces/Repositories/ITechnologyRepository.cs | 5 ++++- src/DevHive.Data/Repositories/LanguageRepository.cs | 7 +++++++ src/DevHive.Data/Repositories/TechnologyRepository.cs | 7 +++++++ .../Configurations/Mapping/TechnologyMappings.cs | 1 + src/DevHive.Services/Interfaces/ILanguageService.cs | 2 ++ src/DevHive.Services/Interfaces/ITechnologyService.cs | 2 ++ src/DevHive.Services/Services/LanguageService.cs | 12 ++++++++---- src/DevHive.Services/Services/TechnologyService.cs | 7 +++++++ src/DevHive.Web/Controllers/LanguageController.cs | 12 ++++++++++++ src/DevHive.Web/Controllers/TechnologyController.cs | 12 ++++++++++++ 11 files changed, 66 insertions(+), 6 deletions(-) (limited to 'src/DevHive.Web') diff --git a/src/DevHive.Data/Interfaces/Repositories/ILanguageRepository.cs b/src/DevHive.Data/Interfaces/Repositories/ILanguageRepository.cs index f1d7248..db2949a 100644 --- a/src/DevHive.Data/Interfaces/Repositories/ILanguageRepository.cs +++ b/src/DevHive.Data/Interfaces/Repositories/ILanguageRepository.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; using DevHive.Data.Models; using DevHive.Data.Repositories.Interfaces; @@ -7,8 +8,10 @@ namespace DevHive.Data.Interfaces.Repositories { public interface ILanguageRepository : IRepository { + HashSet GetLanguages(); + Task GetByNameAsync(string name); + Task DoesLanguageExistAsync(Guid id); Task DoesLanguageNameExistAsync(string languageName); - Task GetByNameAsync(string name); } } diff --git a/src/DevHive.Data/Interfaces/Repositories/ITechnologyRepository.cs b/src/DevHive.Data/Interfaces/Repositories/ITechnologyRepository.cs index fb0ba20..9126bfc 100644 --- a/src/DevHive.Data/Interfaces/Repositories/ITechnologyRepository.cs +++ b/src/DevHive.Data/Interfaces/Repositories/ITechnologyRepository.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; using DevHive.Data.Models; using DevHive.Data.Repositories.Interfaces; @@ -7,8 +8,10 @@ namespace DevHive.Data.Interfaces.Repositories { public interface ITechnologyRepository : IRepository { + Task GetByNameAsync(string name); + HashSet GetTechnologies(); + Task DoesTechnologyExistAsync(Guid id); Task DoesTechnologyNameExistAsync(string technologyName); - Task GetByNameAsync(string name); } } diff --git a/src/DevHive.Data/Repositories/LanguageRepository.cs b/src/DevHive.Data/Repositories/LanguageRepository.cs index c28ef31..f2cc67f 100644 --- a/src/DevHive.Data/Repositories/LanguageRepository.cs +++ b/src/DevHive.Data/Repositories/LanguageRepository.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using DevHive.Data.Interfaces.Repositories; using DevHive.Data.Models; @@ -23,6 +25,11 @@ namespace DevHive.Data.Repositories .AsNoTracking() .FirstOrDefaultAsync(x => x.Name == languageName); } + + public HashSet GetLanguages() + { + return this._context.Languages.ToHashSet(); + } #endregion #region Validations diff --git a/src/DevHive.Data/Repositories/TechnologyRepository.cs b/src/DevHive.Data/Repositories/TechnologyRepository.cs index 87540fb..e03291d 100644 --- a/src/DevHive.Data/Repositories/TechnologyRepository.cs +++ b/src/DevHive.Data/Repositories/TechnologyRepository.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using DevHive.Data.Interfaces.Repositories; using DevHive.Data.Models; @@ -23,6 +25,11 @@ namespace DevHive.Data.Repositories .AsNoTracking() .FirstOrDefaultAsync(x => x.Name == technologyName); } + + public HashSet GetTechnologies() + { + return this._context.Technologies.ToHashSet(); + } #endregion #region Validations diff --git a/src/DevHive.Services/Configurations/Mapping/TechnologyMappings.cs b/src/DevHive.Services/Configurations/Mapping/TechnologyMappings.cs index 0103ccf..85b57f1 100644 --- a/src/DevHive.Services/Configurations/Mapping/TechnologyMappings.cs +++ b/src/DevHive.Services/Configurations/Mapping/TechnologyMappings.cs @@ -14,6 +14,7 @@ namespace DevHive.Services.Configurations.Mapping CreateMap(); CreateMap(); + CreateMap(); CreateMap(); } } diff --git a/src/DevHive.Services/Interfaces/ILanguageService.cs b/src/DevHive.Services/Interfaces/ILanguageService.cs index 0df9a95..fabbec2 100644 --- a/src/DevHive.Services/Interfaces/ILanguageService.cs +++ b/src/DevHive.Services/Interfaces/ILanguageService.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; using DevHive.Services.Models.Language; @@ -9,6 +10,7 @@ namespace DevHive.Services.Interfaces Task CreateLanguage(CreateLanguageServiceModel createLanguageServiceModel); Task GetLanguageById(Guid id); + HashSet GetLanguages(); Task UpdateLanguage(UpdateLanguageServiceModel languageServiceModel); diff --git a/src/DevHive.Services/Interfaces/ITechnologyService.cs b/src/DevHive.Services/Interfaces/ITechnologyService.cs index 9c5661d..1d4fa8b 100644 --- a/src/DevHive.Services/Interfaces/ITechnologyService.cs +++ b/src/DevHive.Services/Interfaces/ITechnologyService.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; using DevHive.Services.Models.Technology; @@ -9,6 +10,7 @@ namespace DevHive.Services.Interfaces Task Create(CreateTechnologyServiceModel technologyServiceModel); Task GetTechnologyById(Guid id); + HashSet GetTechnologies(); Task UpdateTechnology(UpdateTechnologyServiceModel updateTechnologyServiceModel); diff --git a/src/DevHive.Services/Services/LanguageService.cs b/src/DevHive.Services/Services/LanguageService.cs index a602d43..a6364d8 100644 --- a/src/DevHive.Services/Services/LanguageService.cs +++ b/src/DevHive.Services/Services/LanguageService.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; using AutoMapper; using DevHive.Data.Interfaces.Repositories; @@ -20,7 +21,6 @@ namespace DevHive.Services.Services } #region Create - public async Task CreateLanguage(CreateLanguageServiceModel createLanguageServiceModel) { if (await this._languageRepository.DoesLanguageNameExistAsync(createLanguageServiceModel.Name)) @@ -40,7 +40,6 @@ namespace DevHive.Services.Services #endregion #region Read - public async Task GetLanguageById(Guid id) { Language language = await this._languageRepository.GetByIdAsync(id); @@ -50,10 +49,16 @@ namespace DevHive.Services.Services return this._languageMapper.Map(language); } + + public HashSet GetLanguages() + { + HashSet languages = this._languageRepository.GetLanguages(); + + return this._languageMapper.Map>(languages); + } #endregion #region Update - public async Task UpdateLanguage(UpdateLanguageServiceModel languageServiceModel) { bool langExists = await this._languageRepository.DoesLanguageExistAsync(languageServiceModel.Id); @@ -71,7 +76,6 @@ namespace DevHive.Services.Services #endregion #region Delete - public async Task DeleteLanguage(Guid id) { if (!await this._languageRepository.DoesLanguageExistAsync(id)) diff --git a/src/DevHive.Services/Services/TechnologyService.cs b/src/DevHive.Services/Services/TechnologyService.cs index c879ad7..039cd8a 100644 --- a/src/DevHive.Services/Services/TechnologyService.cs +++ b/src/DevHive.Services/Services/TechnologyService.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; using AutoMapper; using DevHive.Data.Interfaces.Repositories; @@ -48,6 +49,12 @@ namespace DevHive.Services.Services return this._technologyMapper.Map(technology); } + public HashSet GetTechnologies() + { + HashSet technologies = this._technologyRepository.GetTechnologies(); + + return this._technologyMapper.Map>(technologies); + } #endregion #region Update diff --git a/src/DevHive.Web/Controllers/LanguageController.cs b/src/DevHive.Web/Controllers/LanguageController.cs index de6bf15..85ec1e1 100644 --- a/src/DevHive.Web/Controllers/LanguageController.cs +++ b/src/DevHive.Web/Controllers/LanguageController.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; using AutoMapper; using DevHive.Services.Interfaces; @@ -45,6 +46,17 @@ namespace DevHive.Web.Controllers return new OkObjectResult(languageWebModel); } + [HttpGet] + [Route("GetLanguages")] + [Authorize(Roles = "User,Admin")] + public IActionResult GetAllExistingLanguages() + { + HashSet languageServiceModels = this._languageService.GetLanguages(); + HashSet languageWebModels = this._languageMapper.Map>(languageServiceModels); + + return new OkObjectResult(languageWebModels); + } + [HttpPut] [Authorize(Roles = "Admin")] public async Task Update(Guid id, [FromBody] UpdateLanguageWebModel updateModel) diff --git a/src/DevHive.Web/Controllers/TechnologyController.cs b/src/DevHive.Web/Controllers/TechnologyController.cs index c107c6e..6453d12 100644 --- a/src/DevHive.Web/Controllers/TechnologyController.cs +++ b/src/DevHive.Web/Controllers/TechnologyController.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; using AutoMapper; using DevHive.Services.Interfaces; @@ -45,6 +46,17 @@ namespace DevHive.Web.Controllers return new OkObjectResult(createTechnologyWebModel); } + [HttpGet] + [Route("GetTechnologies")] + [Authorize(Roles = "User,Admin")] + public IActionResult GetAllExistingTechnologies() + { + HashSet technologyServiceModels = this._technologyService.GetTechnologies(); + HashSet languageWebModels = this._technologyMapper.Map>(technologyServiceModels); + + return new OkObjectResult(languageWebModels); + } + [HttpPut] [Authorize(Roles = "Admin")] public async Task Update(Guid id, [FromBody] UpdateTechnologyWebModel updateModel) -- cgit v1.2.3