aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/DevHive.Data/Interfaces/Repositories/ILanguageRepository.cs5
-rw-r--r--src/DevHive.Data/Interfaces/Repositories/ITechnologyRepository.cs5
-rw-r--r--src/DevHive.Data/Interfaces/Repositories/IUserRepository.cs9
-rw-r--r--src/DevHive.Data/Repositories/LanguageRepository.cs7
-rw-r--r--src/DevHive.Data/Repositories/TechnologyRepository.cs7
-rw-r--r--src/DevHive.Data/Repositories/UserRepository.cs39
-rw-r--r--src/DevHive.Services/Configurations/Mapping/RoleMapings.cs4
-rw-r--r--src/DevHive.Services/Configurations/Mapping/TechnologyMappings.cs1
-rw-r--r--src/DevHive.Services/Configurations/Mapping/UserMappings.cs5
-rw-r--r--src/DevHive.Services/Interfaces/ILanguageService.cs2
-rw-r--r--src/DevHive.Services/Interfaces/IRoleService.cs2
-rw-r--r--src/DevHive.Services/Interfaces/ITechnologyService.cs2
-rw-r--r--src/DevHive.Services/Models/Identity/User/UpdateFriendServiceModel.cs2
-rw-r--r--src/DevHive.Services/Models/Identity/User/UserServiceModel.cs8
-rw-r--r--src/DevHive.Services/Models/Language/UpdateLanguageServiceModel.cs4
-rw-r--r--src/DevHive.Services/Models/Technology/UpdateTechnologyServiceModel.cs4
-rw-r--r--src/DevHive.Services/Services/LanguageService.cs12
-rw-r--r--src/DevHive.Services/Services/RoleService.cs4
-rw-r--r--src/DevHive.Services/Services/TechnologyService.cs7
-rw-r--r--src/DevHive.Services/Services/UserService.cs154
-rw-r--r--src/DevHive.Web/Configurations/Mapping/RoleMappings.cs4
-rw-r--r--src/DevHive.Web/Configurations/Mapping/UserMappings.cs14
-rw-r--r--src/DevHive.Web/Controllers/FeedController.cs2
-rw-r--r--src/DevHive.Web/Controllers/LanguageController.cs18
-rw-r--r--src/DevHive.Web/Controllers/PostController.cs1
-rw-r--r--src/DevHive.Web/Controllers/RoleController.cs10
-rw-r--r--src/DevHive.Web/Controllers/TechnologyController.cs18
-rw-r--r--src/DevHive.Web/Models/Identity/Role/UpdateRoleWebModel.cs6
-rw-r--r--src/DevHive.Web/Models/Identity/User/UpdateUserWebModel.cs2
-rw-r--r--src/DevHive.Web/Models/Identity/User/UserWebModel.cs2
-rw-r--r--src/DevHive.Web/Models/Identity/User/UsernameWebModel.cs (renamed from src/DevHive.Web/Models/Identity/User/FriendWebModel.cs)2
31 files changed, 209 insertions, 153 deletions
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<Language>
{
+ HashSet<Language> GetLanguages();
+ Task<Language> GetByNameAsync(string name);
+
Task<bool> DoesLanguageExistAsync(Guid id);
Task<bool> DoesLanguageNameExistAsync(string languageName);
- Task<Language> 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<Technology>
{
+ Task<Technology> GetByNameAsync(string name);
+ HashSet<Technology> GetTechnologies();
+
Task<bool> DoesTechnologyExistAsync(Guid id);
Task<bool> DoesTechnologyNameExistAsync(string technologyName);
- Task<Technology> GetByNameAsync(string name);
}
}
diff --git a/src/DevHive.Data/Interfaces/Repositories/IUserRepository.cs b/src/DevHive.Data/Interfaces/Repositories/IUserRepository.cs
index c29669d..4346e9c 100644
--- a/src/DevHive.Data/Interfaces/Repositories/IUserRepository.cs
+++ b/src/DevHive.Data/Interfaces/Repositories/IUserRepository.cs
@@ -10,20 +10,13 @@ namespace DevHive.Data.Interfaces.Repositories
{
//Read
Task<User> GetByUsernameAsync(string username);
- Language GetUserLanguage(User user, Language language);
- HashSet<Language> GetUserLanguages(User user);
- HashSet<Technology> GetUserTechnologies(User user);
- Technology GetUserTechnology(User user, Technology technology);
IEnumerable<User> QueryAll();
//Validations
Task<bool> DoesEmailExistAsync(string email);
Task<bool> DoesUserExistAsync(Guid id);
Task<bool> DoesUserHaveThisFriendAsync(Guid userId, Guid friendId);
- Task<bool> DoesUsernameExistAsync(string username);
- bool DoesUserHaveThisLanguage(User user, Language language);
bool DoesUserHaveThisUsername(Guid id, string username);
- bool DoesUserHaveFriends(User user);
- bool DoesUserHaveThisTechnology(User user, Technology technology);
+ Task<bool> DoesUsernameExistAsync(string username);
}
}
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<Language> 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<Technology> GetTechnologies()
+ {
+ return this._context.Technologies.ToHashSet();
+ }
#endregion
#region Validations
diff --git a/src/DevHive.Data/Repositories/UserRepository.cs b/src/DevHive.Data/Repositories/UserRepository.cs
index 34b222e..6d4a175 100644
--- a/src/DevHive.Data/Repositories/UserRepository.cs
+++ b/src/DevHive.Data/Repositories/UserRepository.cs
@@ -47,27 +47,17 @@ namespace DevHive.Data.Repositories
.Include(x => x.Technologies)
.FirstOrDefaultAsync(x => x.UserName == username);
}
+ #endregion
- public HashSet<Language> GetUserLanguages(User user)
+ #region Update
+ public override async Task<bool> EditAsync(Guid id, User newEntity)
{
- return user.Languages;
- }
+ User user = await GetByIdAsync(id);
- public Language GetUserLanguage(User user, Language language)
- {
- return user.Languages
- .FirstOrDefault(x => x.Id == language.Id);
- }
+ this._context.Update(user);
+ user = newEntity;
- public HashSet<Technology> GetUserTechnologies(User user)
- {
- return user.Technologies;
- }
-
- public Technology GetUserTechnology(User user, Technology technology)
- {
- return user.Technologies
- .FirstOrDefault(x => x.Id == technology.Id);
+ return await this.SaveChangesAsync(this._context);
}
#endregion
@@ -111,21 +101,6 @@ namespace DevHive.Data.Repositories
.Any(x => x.Id == id &&
x.UserName == username);
}
-
- public bool DoesUserHaveFriends(User user)
- {
- return user.Friends.Count >= 1;
- }
-
- public bool DoesUserHaveThisLanguage(User user, Language language)
- {
- return user.Languages.Contains(language);
- }
-
- public bool DoesUserHaveThisTechnology(User user, Technology technology)
- {
- return user.Technologies.Contains(technology);
- }
#endregion
}
}
diff --git a/src/DevHive.Services/Configurations/Mapping/RoleMapings.cs b/src/DevHive.Services/Configurations/Mapping/RoleMapings.cs
index 23bd46f..e61a107 100644
--- a/src/DevHive.Services/Configurations/Mapping/RoleMapings.cs
+++ b/src/DevHive.Services/Configurations/Mapping/RoleMapings.cs
@@ -9,10 +9,10 @@ namespace DevHive.Services.Configurations.Mapping
public RoleMappings()
{
CreateMap<CreateRoleServiceModel, Role>();
- CreateMap<ReadRoleServiceModel, Role>();
+ CreateMap<RoleServiceModel, Role>();
CreateMap<UpdateRoleServiceModel, Role>();
- CreateMap<Role, ReadRoleServiceModel>();
+ CreateMap<Role, RoleServiceModel>();
CreateMap<Role, UpdateRoleServiceModel>();
}
}
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<Technology, CreateTechnologyServiceModel>();
CreateMap<Technology, TechnologyServiceModel>();
+ CreateMap<Technology, ReadTechnologyServiceModel>();
CreateMap<Technology, UpdateTechnologyServiceModel>();
}
}
diff --git a/src/DevHive.Services/Configurations/Mapping/UserMappings.cs b/src/DevHive.Services/Configurations/Mapping/UserMappings.cs
index 6797ce1..096af38 100644
--- a/src/DevHive.Services/Configurations/Mapping/UserMappings.cs
+++ b/src/DevHive.Services/Configurations/Mapping/UserMappings.cs
@@ -11,11 +11,10 @@ namespace DevHive.Services.Configurations.Mapping
{
CreateMap<UserServiceModel, User>();
CreateMap<RegisterServiceModel, User>();
+ CreateMap<FriendServiceModel, User>();
CreateMap<UpdateUserServiceModel, User>()
.AfterMap((src, dest) => dest.PasswordHash = PasswordModifications.GeneratePasswordHash(src.Password));
- CreateMap<FriendServiceModel, User>();
- CreateMap<UpdateFriendServiceModel, User>()
- .ForMember(dest => dest.UserName, src => src.MapFrom(p => p.Name));
+ CreateMap<UpdateFriendServiceModel, User>();
CreateMap<User, UserServiceModel>();
CreateMap<User, UpdateUserServiceModel>()
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<Guid> CreateLanguage(CreateLanguageServiceModel createLanguageServiceModel);
Task<ReadLanguageServiceModel> GetLanguageById(Guid id);
+ HashSet<ReadLanguageServiceModel> GetLanguages();
Task<bool> UpdateLanguage(UpdateLanguageServiceModel languageServiceModel);
diff --git a/src/DevHive.Services/Interfaces/IRoleService.cs b/src/DevHive.Services/Interfaces/IRoleService.cs
index d3a45e5..d47728c 100644
--- a/src/DevHive.Services/Interfaces/IRoleService.cs
+++ b/src/DevHive.Services/Interfaces/IRoleService.cs
@@ -8,7 +8,7 @@ namespace DevHive.Services.Interfaces
{
Task<Guid> CreateRole(CreateRoleServiceModel roleServiceModel);
- Task<ReadRoleServiceModel> GetRoleById(Guid id);
+ Task<RoleServiceModel> GetRoleById(Guid id);
Task<bool> UpdateRole(UpdateRoleServiceModel roleServiceModel);
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<Guid> Create(CreateTechnologyServiceModel technologyServiceModel);
Task<CreateTechnologyServiceModel> GetTechnologyById(Guid id);
+ HashSet<ReadTechnologyServiceModel> GetTechnologies();
Task<bool> UpdateTechnology(UpdateTechnologyServiceModel updateTechnologyServiceModel);
diff --git a/src/DevHive.Services/Models/Identity/User/UpdateFriendServiceModel.cs b/src/DevHive.Services/Models/Identity/User/UpdateFriendServiceModel.cs
index 83fcc34..b0efe10 100644
--- a/src/DevHive.Services/Models/Identity/User/UpdateFriendServiceModel.cs
+++ b/src/DevHive.Services/Models/Identity/User/UpdateFriendServiceModel.cs
@@ -5,6 +5,6 @@ namespace DevHive.Services.Models.Identity.User
public class UpdateFriendServiceModel
{
public Guid Id { get; set; }
- public string Name { get; set; }
+ public string UserName { get; set; }
}
}
diff --git a/src/DevHive.Services/Models/Identity/User/UserServiceModel.cs b/src/DevHive.Services/Models/Identity/User/UserServiceModel.cs
index 3e41057..7da54b8 100644
--- a/src/DevHive.Services/Models/Identity/User/UserServiceModel.cs
+++ b/src/DevHive.Services/Models/Identity/User/UserServiceModel.cs
@@ -7,12 +7,12 @@ namespace DevHive.Services.Models.Identity.User
{
public class UserServiceModel : BaseUserServiceModel
{
- public HashSet<ReadRoleServiceModel> Roles { get; set; } = new HashSet<ReadRoleServiceModel>();
+ public HashSet<RoleServiceModel> Roles { get; set; } = new();
- public HashSet<FriendServiceModel> Friends { get; set; } = new HashSet<FriendServiceModel>();
+ public HashSet<FriendServiceModel> Friends { get; set; } = new();
- public HashSet<LanguageServiceModel> Languages { get; set; } = new HashSet<LanguageServiceModel>();
+ public HashSet<LanguageServiceModel> Languages { get; set; } = new();
- public HashSet<TechnologyServiceModel> Technologies { get; set; } = new HashSet<TechnologyServiceModel>();
+ public HashSet<TechnologyServiceModel> Technologies { get; set; } = new();
}
}
diff --git a/src/DevHive.Services/Models/Language/UpdateLanguageServiceModel.cs b/src/DevHive.Services/Models/Language/UpdateLanguageServiceModel.cs
index 8536693..84b7f27 100644
--- a/src/DevHive.Services/Models/Language/UpdateLanguageServiceModel.cs
+++ b/src/DevHive.Services/Models/Language/UpdateLanguageServiceModel.cs
@@ -2,8 +2,10 @@ using System;
namespace DevHive.Services.Models.Language
{
- public class UpdateLanguageServiceModel : LanguageServiceModel
+ public class UpdateLanguageServiceModel
{
+ public Guid Id { get; set; }
+
public string Name { get; set; }
}
}
diff --git a/src/DevHive.Services/Models/Technology/UpdateTechnologyServiceModel.cs b/src/DevHive.Services/Models/Technology/UpdateTechnologyServiceModel.cs
index a18e286..f4c7921 100644
--- a/src/DevHive.Services/Models/Technology/UpdateTechnologyServiceModel.cs
+++ b/src/DevHive.Services/Models/Technology/UpdateTechnologyServiceModel.cs
@@ -2,8 +2,10 @@ using System;
namespace DevHive.Services.Models.Technology
{
- public class UpdateTechnologyServiceModel : TechnologyServiceModel
+ public class UpdateTechnologyServiceModel
{
+ public Guid Id { get; set; }
+
public string Name { get; set; }
}
}
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<Guid> CreateLanguage(CreateLanguageServiceModel createLanguageServiceModel)
{
if (await this._languageRepository.DoesLanguageNameExistAsync(createLanguageServiceModel.Name))
@@ -40,7 +40,6 @@ namespace DevHive.Services.Services
#endregion
#region Read
-
public async Task<ReadLanguageServiceModel> GetLanguageById(Guid id)
{
Language language = await this._languageRepository.GetByIdAsync(id);
@@ -50,10 +49,16 @@ namespace DevHive.Services.Services
return this._languageMapper.Map<ReadLanguageServiceModel>(language);
}
+
+ public HashSet<ReadLanguageServiceModel> GetLanguages()
+ {
+ HashSet<Language> languages = this._languageRepository.GetLanguages();
+
+ return this._languageMapper.Map<HashSet<ReadLanguageServiceModel>>(languages);
+ }
#endregion
#region Update
-
public async Task<bool> 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<bool> DeleteLanguage(Guid id)
{
if (!await this._languageRepository.DoesLanguageExistAsync(id))
diff --git a/src/DevHive.Services/Services/RoleService.cs b/src/DevHive.Services/Services/RoleService.cs
index 9f7a5ac..a8b8e17 100644
--- a/src/DevHive.Services/Services/RoleService.cs
+++ b/src/DevHive.Services/Services/RoleService.cs
@@ -38,12 +38,12 @@ namespace DevHive.Services.Services
}
- public async Task<ReadRoleServiceModel> GetRoleById(Guid id)
+ public async Task<RoleServiceModel> GetRoleById(Guid id)
{
Role role = await this._roleRepository.GetByIdAsync(id)
?? throw new ArgumentException("Role does not exist!");
- return this._roleMapper.Map<ReadRoleServiceModel>(role);
+ return this._roleMapper.Map<RoleServiceModel>(role);
}
public async Task<bool> UpdateRole(UpdateRoleServiceModel updateRoleServiceModel)
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<CreateTechnologyServiceModel>(technology);
}
+ public HashSet<ReadTechnologyServiceModel> GetTechnologies()
+ {
+ HashSet<Technology> technologies = this._technologyRepository.GetTechnologies();
+
+ return this._technologyMapper.Map<HashSet<ReadTechnologyServiceModel>>(technologies);
+ }
#endregion
#region Update
diff --git a/src/DevHive.Services/Services/UserService.cs b/src/DevHive.Services/Services/UserService.cs
index 1beb07f..0e3bf72 100644
--- a/src/DevHive.Services/Services/UserService.cs
+++ b/src/DevHive.Services/Services/UserService.cs
@@ -111,61 +111,7 @@ namespace DevHive.Services.Services
await this.ValidateUserCollections(updateUserServiceModel);
- /* Roles */
- int roleCount = updateUserServiceModel.Roles.Count;
- for (int i = 0; i < roleCount; i++)
- {
- Role role = await this._roleRepository.GetByNameAsync(updateUserServiceModel.Roles.ElementAt(i).Name) ??
- throw new ArgumentException("Invalid role name!");
-
- UpdateRoleServiceModel updateRoleServiceModel = this._userMapper.Map<UpdateRoleServiceModel>(role);
-
- updateUserServiceModel.Roles.Add(updateRoleServiceModel);
- }
-
- /* Languages */
- int langCount = updateUserServiceModel.Languages.Count;
- for (int i = 0; i < langCount; i++)
- {
- Language language = await this._languageRepository.GetByNameAsync(updateUserServiceModel.Languages.ElementAt(i).Name) ??
- throw new ArgumentException("Invalid language name!");
-
- UpdateLanguageServiceModel updateLanguageServiceModel = this._userMapper.Map<UpdateLanguageServiceModel>(language);
-
- updateUserServiceModel.Languages.Add(updateLanguageServiceModel);
- }
- //Clean the already replaced languages
- updateUserServiceModel.Languages.RemoveWhere(x => x.Id == Guid.Empty);
-
- /* Technologies */
- int techCount = updateUserServiceModel.Technologies.Count;
- for (int i = 0; i < techCount; i++)
- {
- Technology technology = await this._technologyRepository.GetByNameAsync(updateUserServiceModel.Technologies.ElementAt(i).Name) ??
- throw new ArgumentException("Invalid technology name!");
-
- UpdateTechnologyServiceModel updateTechnologyServiceModel = this._userMapper.Map<UpdateTechnologyServiceModel>(technology);
-
- updateUserServiceModel.Technologies.Add(updateTechnologyServiceModel);
- }
- //Clean the already replaced technologies
- updateUserServiceModel.Technologies.RemoveWhere(x => x.Id == Guid.Empty);
-
- /* Friends */
- HashSet<User> friends = new();
- int friendsCount = updateUserServiceModel.Friends.Count;
- for (int i = 0; i < friendsCount; i++)
- {
- User friend = await this._userRepository.GetByUsernameAsync(updateUserServiceModel.Friends.ElementAt(i).Name) ??
- throw new ArgumentException("Invalid friend's username!");
-
- friends.Add(friend);
- }
- //Clean the already replaced technologies
- updateUserServiceModel.Friends.RemoveWhere(x => x.Id == Guid.Empty);
-
- User user = this._userMapper.Map<User>(updateUserServiceModel);
- user.Friends = friends;
+ User user = await this.PopulateModel(updateUserServiceModel);
bool successful = await this._userRepository.EditAsync(updateUserServiceModel.Id, user);
@@ -249,30 +195,49 @@ namespace DevHive.Services.Services
private async Task ValidateUserCollections(UpdateUserServiceModel updateUserServiceModel)
{
+ //Do NOT allow a user to change his roles, unless he is an Admin
+ bool isAdmin = (await this._userRepository.GetByIdAsync(updateUserServiceModel.Id))
+ .Roles.Any(r => r.Name == Role.AdminRole);
+
+ if (isAdmin)
+ {
+ // Roles
+ foreach (var role in updateUserServiceModel.Roles)
+ {
+ Role returnedRole = await this._roleRepository.GetByNameAsync(role.Name) ??
+ throw new ArgumentException($"Role {role.Name} does not exist!");
+ }
+ }
+ //Preserve original user roles
+ else
+ {
+ HashSet<Role> roles = (await this._userRepository.GetByIdAsync(updateUserServiceModel.Id)).Roles;
+
+ foreach (var role in roles)
+ {
+ Role returnedRole = await this._roleRepository.GetByNameAsync(role.Name) ??
+ throw new ArgumentException($"Role {role.Name} does not exist!");
+ }
+ }
+
// Friends
foreach (var friend in updateUserServiceModel.Friends)
{
- User returnedFriend = await this._userRepository.GetByUsernameAsync(friend.Name);
-
- if (returnedFriend == null)
- throw new ArgumentException($"User {friend.Name} does not exist!");
+ User returnedFriend = await this._userRepository.GetByUsernameAsync(friend.UserName) ??
+ throw new ArgumentException($"User {friend.UserName} does not exist!");
}
// Languages
foreach (var language in updateUserServiceModel.Languages)
{
- Language returnedLanguage = await this._languageRepository.GetByNameAsync(language.Name);
-
- if (returnedLanguage == null)
+ Language returnedLanguage = await this._languageRepository.GetByNameAsync(language.Name) ??
throw new ArgumentException($"Language {language.Name} does not exist!");
}
// Technology
foreach (var technology in updateUserServiceModel.Technologies)
{
- Technology returnedTechnology = await this._technologyRepository.GetByNameAsync(technology.Name);
-
- if (returnedTechnology == null)
+ Technology returnedTechnology = await this._technologyRepository.GetByNameAsync(technology.Name) ??
throw new ArgumentException($"Technology {technology.Name} does not exist!");
}
}
@@ -306,12 +271,13 @@ namespace DevHive.Services.Services
}
#endregion
+ #region Misc
public async Task<Guid> SuperSecretPromotionToAdmin(Guid userId)
{
User user = await this._userRepository.GetByIdAsync(userId) ??
throw new ArgumentException("User does not exist! Can't promote shit in this country...");
- if(!await this._roleRepository.DoesNameExist("Admin"))
+ if (!await this._roleRepository.DoesNameExist("Admin"))
{
Role adminRole = new()
{
@@ -329,5 +295,61 @@ namespace DevHive.Services.Services
return admin.Id;
}
+
+ private async Task<User> PopulateModel(UpdateUserServiceModel updateUserServiceModel)
+ {
+ User user = this._userMapper.Map<User>(updateUserServiceModel);
+
+ /* Fetch Roles and replace model's*/
+ HashSet<Role> roles = new();
+ int rolesCount = updateUserServiceModel.Roles.Count;
+ for (int i = 0; i < rolesCount; i++)
+ {
+ Role role = await this._roleRepository.GetByNameAsync(updateUserServiceModel.Roles.ElementAt(i).Name) ??
+ throw new ArgumentException("Invalid role name!");
+
+ roles.Add(role);
+ }
+ user.Roles = roles;
+
+ /* Fetch Friends and replace model's*/
+ HashSet<User> friends = new();
+ int friendsCount = updateUserServiceModel.Friends.Count;
+ for (int i = 0; i < friendsCount; i++)
+ {
+ User friend = await this._userRepository.GetByUsernameAsync(updateUserServiceModel.Friends.ElementAt(i).UserName) ??
+ throw new ArgumentException("Invalid friend's username!");
+
+ friends.Add(friend);
+ }
+ user.Friends = friends;
+
+ /* Fetch Languages and replace model's*/
+ HashSet<Language> languages = new();
+ int languagesCount = updateUserServiceModel.Languages.Count;
+ for (int i = 0; i < languagesCount; i++)
+ {
+ Language language = await this._languageRepository.GetByNameAsync(updateUserServiceModel.Languages.ElementAt(i).Name) ??
+ throw new ArgumentException("Invalid language name!");
+
+ languages.Add(language);
+ }
+ user.Languages = languages;
+
+ /* Fetch Technologies and replace model's*/
+ HashSet<Technology> technologies = new();
+ int technologiesCount = updateUserServiceModel.Technologies.Count;
+ for (int i = 0; i < technologiesCount; i++)
+ {
+ Technology technology = await this._technologyRepository.GetByNameAsync(updateUserServiceModel.Technologies.ElementAt(i).Name) ??
+ throw new ArgumentException("Invalid technology name!");
+
+ technologies.Add(technology);
+ }
+ user.Technologies = technologies;
+
+ return user;
+ }
+ #endregion
}
}
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<CreateRoleWebModel, CreateRoleServiceModel>();
CreateMap<UpdateRoleWebModel, UpdateRoleServiceModel>()
.ForMember(src => src.Id, dest => dest.Ignore());
- CreateMap<RoleWebModel, ReadRoleServiceModel>();
+ CreateMap<RoleWebModel, RoleServiceModel>();
CreateMap<CreateRoleServiceModel, CreateRoleWebModel>();
CreateMap<UpdateRoleServiceModel, UpdateRoleWebModel>();
- CreateMap<ReadRoleServiceModel, RoleWebModel>();
+ CreateMap<RoleServiceModel, RoleWebModel>();
}
}
}
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<TokenModel, TokenWebModel>();
//Update
- CreateMap<UpdateUserWebModel, UpdateUserServiceModel>()
- .ForMember(src => src.Id, dest => dest.Ignore());
- CreateMap<FriendWebModel, FriendServiceModel>()
- .ForMember(src => src.Id, dest => dest.Ignore());
- CreateMap<FriendWebModel, UpdateFriendServiceModel>()
- .ForMember(src => src.Id, dest => dest.Ignore())
- .ForMember(src => src.Name, dest => dest.MapFrom(p => p.UserName));
+ CreateMap<UpdateUserWebModel, UpdateUserServiceModel>();
+ CreateMap<UsernameWebModel, FriendServiceModel>();
+ CreateMap<UsernameWebModel, UpdateFriendServiceModel>();
CreateMap<UpdateUserServiceModel, UpdateUserWebModel>();
- CreateMap<FriendServiceModel, FriendWebModel>();
+ CreateMap<FriendServiceModel, UsernameWebModel>();
}
}
}
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..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;
@@ -11,7 +12,6 @@ namespace DevHive.Web.Controllers
{
[ApiController]
[Route("/api/[controller]")]
- [Authorize(Policy = "Administrator")]
public class LanguageController
{
private readonly ILanguageService _languageService;
@@ -24,6 +24,7 @@ namespace DevHive.Web.Controllers
}
[HttpPost]
+ [Authorize(Roles = "Admin")]
public async Task<IActionResult> Create([FromBody] CreateLanguageWebModel createLanguageWebModel)
{
CreateLanguageServiceModel languageServiceModel = this._languageMapper.Map<CreateLanguageServiceModel>(createLanguageWebModel);
@@ -36,7 +37,7 @@ namespace DevHive.Web.Controllers
}
[HttpGet]
- [Authorize(Policy = "User")]
+ [Authorize(Roles = "User,Admin")]
public async Task<IActionResult> GetById(Guid id)
{
ReadLanguageServiceModel languageServiceModel = await this._languageService.GetLanguageById(id);
@@ -45,7 +46,19 @@ namespace DevHive.Web.Controllers
return new OkObjectResult(languageWebModel);
}
+ [HttpGet]
+ [Route("GetLanguages")]
+ [Authorize(Roles = "User,Admin")]
+ public IActionResult GetAllExistingLanguages()
+ {
+ HashSet<ReadLanguageServiceModel> languageServiceModels = this._languageService.GetLanguages();
+ HashSet<ReadLanguageWebModel> languageWebModels = this._languageMapper.Map<HashSet<ReadLanguageWebModel>>(languageServiceModels);
+
+ return new OkObjectResult(languageWebModels);
+ }
+
[HttpPut]
+ [Authorize(Roles = "Admin")]
public async Task<IActionResult> Update(Guid id, [FromBody] UpdateLanguageWebModel updateModel)
{
UpdateLanguageServiceModel updatelanguageServiceModel = this._languageMapper.Map<UpdateLanguageServiceModel>(updateModel);
@@ -60,6 +73,7 @@ namespace DevHive.Web.Controllers
}
[HttpDelete]
+ [Authorize(Roles = "Admin")]
public async Task<IActionResult> 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<IActionResult> 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 d8bb60c..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<IActionResult> Create([FromBody] CreateRoleWebModel createRoleWebModel)
{
CreateRoleServiceModel roleServiceModel =
@@ -37,17 +37,17 @@ namespace DevHive.Web.Controllers
}
[HttpGet]
- [Authorize(Policy = "User")]
+ [Authorize(Roles = "User,Admin")]
public async Task<IActionResult> GetById(Guid id)
{
- ReadRoleServiceModel roleServiceModel = await this._roleService.GetRoleById(id);
+ RoleServiceModel roleServiceModel = await this._roleService.GetRoleById(id);
RoleWebModel roleWebModel = this._roleMapper.Map<RoleWebModel>(roleServiceModel);
return new OkObjectResult(roleWebModel);
}
[HttpPut]
- [Authorize(Policy = "Administrator")]
+ [Authorize(Roles = "Admin")]
public async Task<IActionResult> 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<IActionResult> 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..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;
@@ -11,7 +12,6 @@ namespace DevHive.Web.Controllers
{
[ApiController]
[Route("/api/[controller]")]
- [Authorize(Policy = "Administrator")]
public class TechnologyController
{
private readonly ITechnologyService _technologyService;
@@ -24,6 +24,7 @@ namespace DevHive.Web.Controllers
}
[HttpPost]
+ [Authorize(Roles = "Admin")]
public async Task<IActionResult> Create([FromBody] CreateTechnologyWebModel createTechnologyWebModel)
{
CreateTechnologyServiceModel technologyServiceModel = this._technologyMapper.Map<CreateTechnologyServiceModel>(createTechnologyWebModel);
@@ -36,7 +37,7 @@ namespace DevHive.Web.Controllers
}
[HttpGet]
- [Authorize(Policy = "User")]
+ [Authorize(Roles = "User,Admin")]
public async Task<IActionResult> GetById(Guid id)
{
CreateTechnologyServiceModel createTechnologyServiceModel = await this._technologyService.GetTechnologyById(id);
@@ -45,7 +46,19 @@ namespace DevHive.Web.Controllers
return new OkObjectResult(createTechnologyWebModel);
}
+ [HttpGet]
+ [Route("GetTechnologies")]
+ [Authorize(Roles = "User,Admin")]
+ public IActionResult GetAllExistingTechnologies()
+ {
+ HashSet<ReadTechnologyServiceModel> technologyServiceModels = this._technologyService.GetTechnologies();
+ HashSet<ReadTechnologyWebModel> languageWebModels = this._technologyMapper.Map<HashSet<ReadTechnologyWebModel>>(technologyServiceModels);
+
+ return new OkObjectResult(languageWebModels);
+ }
+
[HttpPut]
+ [Authorize(Roles = "Admin")]
public async Task<IActionResult> Update(Guid id, [FromBody] UpdateTechnologyWebModel updateModel)
{
UpdateTechnologyServiceModel updateTechnologyServiceModel = this._technologyMapper.Map<UpdateTechnologyServiceModel>(updateModel);
@@ -60,6 +73,7 @@ namespace DevHive.Web.Controllers
}
[HttpDelete]
+ [Authorize(Roles = "Admin")]
public async Task<IActionResult> Delete(Guid id)
{
bool result = await this._technologyService.DeleteTechnology(id);
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/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<FriendWebModel> Friends { get; set; }
+ public HashSet<UsernameWebModel> 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<FriendWebModel> Friends { get; set; } = new HashSet<FriendWebModel>();
+ public HashSet<UsernameWebModel> Friends { get; set; } = new HashSet<UsernameWebModel>();
[NotNull]
[Required]
diff --git a/src/DevHive.Web/Models/Identity/User/FriendWebModel.cs b/src/DevHive.Web/Models/Identity/User/UsernameWebModel.cs
index d59bff5..a20c1bf 100644
--- a/src/DevHive.Web/Models/Identity/User/FriendWebModel.cs
+++ b/src/DevHive.Web/Models/Identity/User/UsernameWebModel.cs
@@ -4,7 +4,7 @@ using DevHive.Web.Attributes;
namespace DevHive.Web.Models.Identity.User
{
- public class FriendWebModel
+ public class UsernameWebModel
{
[NotNull]
[Required]