aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortranstrike <transtrike@gmail.com>2020-12-18 10:12:07 +0200
committertranstrike <transtrike@gmail.com>2020-12-18 10:12:07 +0200
commitc50dd1608bff971cd052b375a3c2e618bc98f1c2 (patch)
tree0b9903a1ae284048569c9aa97c5e994e85ead894 /src
parent12408f43a7a954042358196ee080439aa7aed700 (diff)
parent7acec816fe021db4a3922b70ce9b3f50e7600c79 (diff)
downloadDevHive-c50dd1608bff971cd052b375a3c2e618bc98f1c2.tar
DevHive-c50dd1608bff971cd052b375a3c2e618bc98f1c2.tar.gz
DevHive-c50dd1608bff971cd052b375a3c2e618bc98f1c2.zip
Merge branch 'dev' of github.com:Team-Kaleidoscope/DevHive into dev
Diffstat (limited to 'src')
-rw-r--r--src/DevHive.Services/Configurations/Mapping/LanguageMappings.cs1
-rw-r--r--src/DevHive.Services/Configurations/Mapping/TechnologyMappings.cs15
-rw-r--r--src/DevHive.Services/Models/Language/LanguageServiceModel.cs2
-rw-r--r--src/DevHive.Services/Models/Technology/TechnologyServiceModel.cs7
-rw-r--r--src/DevHive.Services/Models/Technology/UpdateTechnologyServiceModel.cs9
-rw-r--r--src/DevHive.Services/Services/LanguageService.cs1
-rw-r--r--src/DevHive.Services/Services/TechnologyService.cs67
-rw-r--r--src/DevHive.Services/Services/UserService.cs7
-rw-r--r--src/DevHive.Web/Configurations/Mapping/TechnolofyMappings.cs16
-rw-r--r--src/DevHive.Web/Controllers/TechnologyController.cs72
-rw-r--r--src/DevHive.Web/Models/Technology/TechnologyWebModel.cs7
-rw-r--r--src/DevHive.Web/Models/Technology/UpdateTechnologyWebModel.cs9
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