aboutsummaryrefslogtreecommitdiff
path: root/src/DevHive.Services
diff options
context:
space:
mode:
Diffstat (limited to 'src/DevHive.Services')
-rw-r--r--src/DevHive.Services/Configurations/Mapping/UserMappings.cs6
-rw-r--r--src/DevHive.Services/Interfaces/IUserService.cs1
-rw-r--r--src/DevHive.Services/Models/Identity/User/ProfilePictureServiceModel.cs7
-rw-r--r--src/DevHive.Services/Models/Identity/User/UpdateProfilePictureServiceModel.cs12
-rw-r--r--src/DevHive.Services/Models/Identity/User/UpdateUserServiceModel.cs2
-rw-r--r--src/DevHive.Services/Models/Identity/User/UserServiceModel.cs2
-rw-r--r--src/DevHive.Services/Services/UserService.cs29
7 files changed, 56 insertions, 3 deletions
diff --git a/src/DevHive.Services/Configurations/Mapping/UserMappings.cs b/src/DevHive.Services/Configurations/Mapping/UserMappings.cs
index 5223d84..6922cd7 100644
--- a/src/DevHive.Services/Configurations/Mapping/UserMappings.cs
+++ b/src/DevHive.Services/Configurations/Mapping/UserMappings.cs
@@ -22,10 +22,12 @@ namespace DevHive.Services.Configurations.Mapping
CreateMap<UpdateFriendServiceModel, User>();
CreateMap<User, UserServiceModel>()
- .ForMember(dest => dest.Friends, src => src.MapFrom(p => p.MyFriends));
+ .ForMember(dest => dest.Friends, src => src.MapFrom(p => p.MyFriends))
+ .ForMember(dest => dest.ProfilePictureURL, src => src.MapFrom(p => p.ProfilePicture.PictureURL));
// .ForMember(dest => dest.Friends, src => src.MapFrom(p => p.Friends));
CreateMap<User, UpdateUserServiceModel>()
- .ForMember(x => x.Password, opt => opt.Ignore());
+ .ForMember(x => x.Password, opt => opt.Ignore())
+ .ForMember(dest => dest.ProfilePictureURL, src => src.MapFrom(p => p.ProfilePicture.PictureURL));
CreateMap<User, FriendServiceModel>();
CreateMap<UserFriend, FriendServiceModel>()
diff --git a/src/DevHive.Services/Interfaces/IUserService.cs b/src/DevHive.Services/Interfaces/IUserService.cs
index b701e4a..9e2b4e3 100644
--- a/src/DevHive.Services/Interfaces/IUserService.cs
+++ b/src/DevHive.Services/Interfaces/IUserService.cs
@@ -14,6 +14,7 @@ namespace DevHive.Services.Interfaces
Task<UserServiceModel> GetUserById(Guid id);
Task<UserServiceModel> UpdateUser(UpdateUserServiceModel updateModel);
+ Task<ProfilePictureServiceModel> UpdateProfilePicture(UpdateProfilePictureServiceModel updateProfilePictureServiceModel);
Task<bool> DeleteUser(Guid id);
diff --git a/src/DevHive.Services/Models/Identity/User/ProfilePictureServiceModel.cs b/src/DevHive.Services/Models/Identity/User/ProfilePictureServiceModel.cs
new file mode 100644
index 0000000..ad81057
--- /dev/null
+++ b/src/DevHive.Services/Models/Identity/User/ProfilePictureServiceModel.cs
@@ -0,0 +1,7 @@
+namespace DevHive.Services.Models.Identity.User
+{
+ public class ProfilePictureServiceModel
+ {
+ public string ProfilePictureURL { get; set; }
+ }
+}
diff --git a/src/DevHive.Services/Models/Identity/User/UpdateProfilePictureServiceModel.cs b/src/DevHive.Services/Models/Identity/User/UpdateProfilePictureServiceModel.cs
new file mode 100644
index 0000000..8563953
--- /dev/null
+++ b/src/DevHive.Services/Models/Identity/User/UpdateProfilePictureServiceModel.cs
@@ -0,0 +1,12 @@
+using System;
+using Microsoft.AspNetCore.Http;
+
+namespace DevHive.Services.Models.Identity.User
+{
+ public class UpdateProfilePictureServiceModel
+ {
+ public Guid UserId { get; set; }
+
+ public IFormFile Picture { get; set; }
+ }
+}
diff --git a/src/DevHive.Services/Models/Identity/User/UpdateUserServiceModel.cs b/src/DevHive.Services/Models/Identity/User/UpdateUserServiceModel.cs
index 5b197e4..b4e4400 100644
--- a/src/DevHive.Services/Models/Identity/User/UpdateUserServiceModel.cs
+++ b/src/DevHive.Services/Models/Identity/User/UpdateUserServiceModel.cs
@@ -12,6 +12,8 @@ namespace DevHive.Services.Models.Identity.User
public string Password { get; set; }
+ public string ProfilePictureURL { get; set; }
+
public HashSet<UpdateRoleServiceModel> Roles { get; set; } = new HashSet<UpdateRoleServiceModel>();
public HashSet<UpdateFriendServiceModel> Friends { get; set; } = new HashSet<UpdateFriendServiceModel>();
diff --git a/src/DevHive.Services/Models/Identity/User/UserServiceModel.cs b/src/DevHive.Services/Models/Identity/User/UserServiceModel.cs
index 5bf58ec..ac7bba2 100644
--- a/src/DevHive.Services/Models/Identity/User/UserServiceModel.cs
+++ b/src/DevHive.Services/Models/Identity/User/UserServiceModel.cs
@@ -8,6 +8,8 @@ namespace DevHive.Services.Models.Identity.User
{
public class UserServiceModel : BaseUserServiceModel
{
+ public string ProfilePictureURL { get; set; }
+
public HashSet<RoleServiceModel> Roles { get; set; } = new();
public HashSet<FriendServiceModel> Friends { get; set; } = new();
diff --git a/src/DevHive.Services/Services/UserService.cs b/src/DevHive.Services/Services/UserService.cs
index 40e894d..b3a4987 100644
--- a/src/DevHive.Services/Services/UserService.cs
+++ b/src/DevHive.Services/Services/UserService.cs
@@ -15,6 +15,7 @@ using DevHive.Data.Interfaces.Repositories;
using System.Linq;
using DevHive.Common.Models.Misc;
using DevHive.Data.RelationModels;
+using Microsoft.AspNetCore.Http;
namespace DevHive.Services.Services
{
@@ -26,13 +27,15 @@ namespace DevHive.Services.Services
private readonly ITechnologyRepository _technologyRepository;
private readonly IMapper _userMapper;
private readonly JWTOptions _jwtOptions;
+ private readonly ICloudService _cloudService;
public UserService(IUserRepository userRepository,
ILanguageRepository languageRepository,
IRoleRepository roleRepository,
ITechnologyRepository technologyRepository,
IMapper mapper,
- JWTOptions jwtOptions)
+ JWTOptions jwtOptions,
+ ICloudService cloudService)
{
this._userRepository = userRepository;
this._roleRepository = roleRepository;
@@ -40,6 +43,7 @@ namespace DevHive.Services.Services
this._jwtOptions = jwtOptions;
this._languageRepository = languageRepository;
this._technologyRepository = technologyRepository;
+ this._cloudService = cloudService;
}
#region Authentication
@@ -66,6 +70,7 @@ namespace DevHive.Services.Services
User user = this._userMapper.Map<User>(registerModel);
user.PasswordHash = PasswordModifications.GeneratePasswordHash(registerModel.Password);
+ user.ProfilePicture = new ProfilePicture() { PictureURL = String.Empty };
// Make sure the default role exists
//TODO: Move when project starts
@@ -119,6 +124,28 @@ namespace DevHive.Services.Services
User newUser = await this._userRepository.GetByIdAsync(user.Id);
return this._userMapper.Map<UserServiceModel>(newUser);
}
+
+ public async Task<ProfilePictureServiceModel> UpdateProfilePicture(UpdateProfilePictureServiceModel updateProfilePictureServiceModel)
+ {
+ User user = await this._userRepository.GetByIdAsync(updateProfilePictureServiceModel.UserId);
+
+ if (!String.IsNullOrEmpty(user.ProfilePicture.PictureURL))
+ {
+ bool success = await _cloudService.RemoveFilesFromCloud(new List<string> { user.ProfilePicture.PictureURL });
+ if (!success)
+ throw new InvalidCastException("Could not delete old profile picture!");
+ }
+
+ string fileUrl = (await this._cloudService.UploadFilesToCloud(new List<IFormFile> { updateProfilePictureServiceModel.Picture }))[0] ??
+ throw new ArgumentNullException("Unable to upload profile picture to cloud");
+
+ bool successful = await this._userRepository.UpdateProfilePicture(updateProfilePictureServiceModel.UserId, fileUrl);
+
+ if (!successful)
+ throw new InvalidOperationException("Unable to change profile picture!");
+
+ return new ProfilePictureServiceModel() { ProfilePictureURL = fileUrl };
+ }
#endregion
#region Delete