diff options
| author | transtrike <transtrike@gmail.com> | 2020-12-18 10:12:07 +0200 |
|---|---|---|
| committer | transtrike <transtrike@gmail.com> | 2020-12-18 10:12:07 +0200 |
| commit | c50dd1608bff971cd052b375a3c2e618bc98f1c2 (patch) | |
| tree | 0b9903a1ae284048569c9aa97c5e994e85ead894 | |
| parent | 12408f43a7a954042358196ee080439aa7aed700 (diff) | |
| parent | 7acec816fe021db4a3922b70ce9b3f50e7600c79 (diff) | |
| download | DevHive-c50dd1608bff971cd052b375a3c2e618bc98f1c2.tar DevHive-c50dd1608bff971cd052b375a3c2e618bc98f1c2.tar.gz DevHive-c50dd1608bff971cd052b375a3c2e618bc98f1c2.zip | |
Merge branch 'dev' of github.com:Team-Kaleidoscope/DevHive into dev
12 files changed, 206 insertions, 7 deletions
diff --git a/src/DevHive.Services/Configurations/Mapping/LanguageMappings.cs b/src/DevHive.Services/Configurations/Mapping/LanguageMappings.cs index 8f83cd9..0be9ca2 100644 --- a/src/DevHive.Services/Configurations/Mapping/LanguageMappings.cs +++ b/src/DevHive.Services/Configurations/Mapping/LanguageMappings.cs @@ -9,6 +9,7 @@ namespace DevHive.Services.Configurations.Mapping public LanguageMappings() { CreateMap<LanguageServiceModel, Language>(); + CreateMap<Language, LanguageServiceModel>(); } } }
\ No newline at end of file diff --git a/src/DevHive.Services/Configurations/Mapping/TechnologyMappings.cs b/src/DevHive.Services/Configurations/Mapping/TechnologyMappings.cs new file mode 100644 index 0000000..6be70d6 --- /dev/null +++ b/src/DevHive.Services/Configurations/Mapping/TechnologyMappings.cs @@ -0,0 +1,15 @@ +using DevHive.Data.Models; +using AutoMapper; +using DevHive.Services.Models.Technology; + +namespace DevHive.Services.Configurations.Mapping +{ + public class TechnologyMappings : Profile + { + public TechnologyMappings() + { + CreateMap<TechnologyServiceModel, Technology>(); + CreateMap<Technology, TechnologyServiceModel>(); + } + } +}
\ No newline at end of file diff --git a/src/DevHive.Services/Models/Language/LanguageServiceModel.cs b/src/DevHive.Services/Models/Language/LanguageServiceModel.cs index 49c82d2..f06ebb6 100644 --- a/src/DevHive.Services/Models/Language/LanguageServiceModel.cs +++ b/src/DevHive.Services/Models/Language/LanguageServiceModel.cs @@ -1,5 +1,3 @@ -using System; - namespace DevHive.Services.Models.Language { public class LanguageServiceModel diff --git a/src/DevHive.Services/Models/Technology/TechnologyServiceModel.cs b/src/DevHive.Services/Models/Technology/TechnologyServiceModel.cs new file mode 100644 index 0000000..6fcc83e --- /dev/null +++ b/src/DevHive.Services/Models/Technology/TechnologyServiceModel.cs @@ -0,0 +1,7 @@ +namespace DevHive.Services.Models.Technology +{ + public class TechnologyServiceModel + { + public string Name { 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 new file mode 100644 index 0000000..e7ee85b --- /dev/null +++ b/src/DevHive.Services/Models/Technology/UpdateTechnologyServiceModel.cs @@ -0,0 +1,9 @@ +using System; + +namespace DevHive.Services.Models.Technology +{ + public class UpdateTechnologyServiceModel : TechnologyServiceModel + { + public Guid Id { get; set; } + } +}
\ No newline at end of file diff --git a/src/DevHive.Services/Services/LanguageService.cs b/src/DevHive.Services/Services/LanguageService.cs index 79d77fd..0454aaf 100644 --- a/src/DevHive.Services/Services/LanguageService.cs +++ b/src/DevHive.Services/Services/LanguageService.cs @@ -4,7 +4,6 @@ using AutoMapper; using DevHive.Data.Models; using DevHive.Data.Repositories; using DevHive.Services.Models.Language; -using Microsoft.AspNetCore.Mvc; namespace DevHive.Services.Services { diff --git a/src/DevHive.Services/Services/TechnologyService.cs b/src/DevHive.Services/Services/TechnologyService.cs new file mode 100644 index 0000000..246ad2c --- /dev/null +++ b/src/DevHive.Services/Services/TechnologyService.cs @@ -0,0 +1,67 @@ +using System; +using System.Threading.Tasks; +using AutoMapper; +using DevHive.Data.Models; +using DevHive.Data.Repositories; +using DevHive.Services.Models.Technology; + +namespace DevHive.Services.Services +{ + public class TechnologyService + { + private readonly TechnologyRepository _technologyRepository; + private readonly IMapper _technologyMapper; + + public TechnologyService(DevHiveContext context, IMapper technologyMapper) + { + this._technologyRepository = new TechnologyRepository(context); + this._technologyMapper = technologyMapper; + } + + public async Task<bool> Create(TechnologyServiceModel technologyServiceModel) + { + if (!await this._technologyRepository.DoesTechnologyNameExist(technologyServiceModel.Name)) + throw new ArgumentException("Technology already exists!"); + + Technology technology = this._technologyMapper.Map<Technology>(technologyServiceModel); + bool result = await this._technologyRepository.AddAsync(technology); + + return result; + } + + public async Task<TechnologyServiceModel> GetTechnologyById(Guid id) + { + Technology technology = await this._technologyRepository.GetByIdAsync(id); + + if(technology == null) + throw new ArgumentException("The technology does not exist"); + + return this._technologyMapper.Map<TechnologyServiceModel>(technology); + } + + public async Task<bool> UpdateTechnology(UpdateTechnologyServiceModel updateTechnologyServiceModel) + { + if (!await this._technologyRepository.DoesTechnologyExist(updateTechnologyServiceModel.Id)) + throw new ArgumentException("Technology does not exist!"); + + if (!await this._technologyRepository.DoesTechnologyNameExist(updateTechnologyServiceModel.Name)) + throw new ArgumentException("Technology name already exists!"); + + Technology technology = this._technologyMapper.Map<Technology>(updateTechnologyServiceModel); + bool result = await this._technologyRepository.EditAsync(technology); + + return result; + } + + public async Task<bool> DeleteTechnology(Guid id) + { + if (!await this._technologyRepository.DoesTechnologyExist(id)) + throw new ArgumentException("Technology does not exist!"); + + Technology technology = await this._technologyRepository.GetByIdAsync(id); + bool result = await this._technologyRepository.DeleteAsync(technology); + + return result; + } + } +}
\ No newline at end of file diff --git a/src/DevHive.Services/Services/UserService.cs b/src/DevHive.Services/Services/UserService.cs index 134a142..d3c0d0d 100644 --- a/src/DevHive.Services/Services/UserService.cs +++ b/src/DevHive.Services/Services/UserService.cs @@ -40,7 +40,7 @@ namespace DevHive.Services.Services if (user.PasswordHash != GeneratePasswordHash(loginModel.Password)) throw new ArgumentException("Incorrect password!"); - return new TokenModel(WriteJWTSecurityToken(user.UserName, user.PasswordHash, user.Roles)); + return new TokenModel(WriteJWTSecurityToken(user.UserName, user.Roles)); } public async Task<TokenModel> RegisterUser(RegisterServiceModel registerModel) @@ -64,7 +64,7 @@ namespace DevHive.Services.Services await this._userRepository.AddAsync(user); - return new TokenModel(WriteJWTSecurityToken(user.UserName, user.PasswordHash, user.Roles)); + return new TokenModel(WriteJWTSecurityToken(user.UserName, user.Roles)); } public async Task<UserServiceModel> GetUserById(Guid id) @@ -110,14 +110,13 @@ namespace DevHive.Services.Services return string.Join(string.Empty, SHA512.HashData(Encoding.ASCII.GetBytes(password))); } - private string WriteJWTSecurityToken(string userName, string passwordHash, IList<Role> roles) + private string WriteJWTSecurityToken(string userName, IList<Role> roles) { byte[] signingKey = Encoding.ASCII.GetBytes(_jwtOptions.Secret); List<Claim> claims = new() { new Claim(ClaimTypes.Name, userName), - new Claim(ClaimTypes.Hash, passwordHash) }; foreach(var role in roles) diff --git a/src/DevHive.Web/Configurations/Mapping/TechnolofyMappings.cs b/src/DevHive.Web/Configurations/Mapping/TechnolofyMappings.cs new file mode 100644 index 0000000..25ce5ca --- /dev/null +++ b/src/DevHive.Web/Configurations/Mapping/TechnolofyMappings.cs @@ -0,0 +1,16 @@ +using AutoMapper; +using DevHive.Web.Models.Technology; +using DevHive.Services.Models.Technology; + +namespace DevHive.Web.Configurations.Mapping +{ + public class TechnologyMappings : Profile + { + public TechnologyMappings() + { + CreateMap<TechnologyWebModel, TechnologyServiceModel>(); + CreateMap<UpdateTechnologyWebModel, TechnologyServiceModel>(); + CreateMap<TechnologyServiceModel, TechnologyWebModel>(); + } + } +}
\ No newline at end of file diff --git a/src/DevHive.Web/Controllers/TechnologyController.cs b/src/DevHive.Web/Controllers/TechnologyController.cs new file mode 100644 index 0000000..9e3cf3c --- /dev/null +++ b/src/DevHive.Web/Controllers/TechnologyController.cs @@ -0,0 +1,72 @@ +using System; +using System.Threading.Tasks; +using AutoMapper; +using DevHive.Data.Repositories; +using DevHive.Services.Models.Technology; +using DevHive.Services.Services; +using DevHive.Web.Models.Technology; +using Microsoft.AspNetCore.Mvc; + +namespace DevHive.Web.Controllers +{ + [ApiController] + [Route("/api/[controller]")] + public class TechnologyController + { + private readonly TechnologyService _technologyService; + private readonly IMapper _technologyMapper; + + public TechnologyController(DevHiveContext context, IMapper mapper) + { + this._technologyService = new TechnologyService(context, mapper); + this._technologyMapper = mapper; + } + + [HttpPost] + public async Task<IActionResult> Create([FromBody] TechnologyWebModel technologyWebModel) + { + TechnologyServiceModel technologyServiceModel = this._technologyMapper.Map<TechnologyServiceModel>(technologyWebModel); + + bool result = await this._technologyService.Create(technologyServiceModel); + + if(!result) + return new BadRequestObjectResult("Could not create the Technology"); + + return new OkResult(); + } + + [HttpGet] + public async Task<IActionResult> GetById(Guid id) + { + TechnologyServiceModel technologyServiceModel = await this._technologyService.GetTechnologyById(id); + TechnologyWebModel technologyWebModel = this._technologyMapper.Map<TechnologyWebModel>(technologyServiceModel); + + return new OkObjectResult(technologyWebModel); + } + + [HttpPut] + public async Task<IActionResult> Update(Guid id, [FromBody] UpdateTechnologyWebModel updateModel) + { + UpdateTechnologyServiceModel updateTechnologyWebModel = this._technologyMapper.Map<UpdateTechnologyServiceModel>(updateModel); + updateTechnologyWebModel.Id = id; + + bool result = await this._technologyService.UpdateTechnology(updateTechnologyWebModel); + + if(!result) + return new BadRequestObjectResult("Could not update Technology"); + + return new OkResult(); + } + + [HttpDelete] + public async Task<IActionResult> Delete(Guid id) + { + bool result = await this._technologyService.DeleteTechnology(id); + + if(!result) + return new BadRequestObjectResult("Could not delete Technology"); + + return new OkResult(); + } + } +}
\ No newline at end of file diff --git a/src/DevHive.Web/Models/Technology/TechnologyWebModel.cs b/src/DevHive.Web/Models/Technology/TechnologyWebModel.cs new file mode 100644 index 0000000..cb6b998 --- /dev/null +++ b/src/DevHive.Web/Models/Technology/TechnologyWebModel.cs @@ -0,0 +1,7 @@ +namespace DevHive.Web.Models.Technology +{ + public class TechnologyWebModel + { + public string Name { get; set; } + } +}
\ No newline at end of file diff --git a/src/DevHive.Web/Models/Technology/UpdateTechnologyWebModel.cs b/src/DevHive.Web/Models/Technology/UpdateTechnologyWebModel.cs new file mode 100644 index 0000000..b94496e --- /dev/null +++ b/src/DevHive.Web/Models/Technology/UpdateTechnologyWebModel.cs @@ -0,0 +1,9 @@ +using System; + +namespace DevHive.Web.Models.Technology +{ + public class UpdateTechnologyWebModel : TechnologyWebModel + { + public Guid Id { get; set; } + } +}
\ No newline at end of file |
