aboutsummaryrefslogtreecommitdiff
path: root/src/DevHive.Services/Services/UserService.cs
diff options
context:
space:
mode:
authorSyndamia <kamen.d.mladenov@protonmail.com>2021-02-03 10:22:37 +0200
committerSyndamia <kamen.d.mladenov@protonmail.com>2021-02-03 10:22:37 +0200
commit01ad75fa5a871a0c9f8cd0c5291312286ae4d52d (patch)
tree4f6b2eaef0424ffbfdd405939fbaa9325cc9d2c8 /src/DevHive.Services/Services/UserService.cs
parent81b3fc43a900857443c3c763f52e0a54719c2fae (diff)
downloadDevHive-01ad75fa5a871a0c9f8cd0c5291312286ae4d52d.tar
DevHive-01ad75fa5a871a0c9f8cd0c5291312286ae4d52d.tar.gz
DevHive-01ad75fa5a871a0c9f8cd0c5291312286ae4d52d.zip
Implemented profile picture table functionality; added models and interfaces for profile picture; added ability for user layers to update the profile picture; added migrations; updated mappings
Diffstat (limited to 'src/DevHive.Services/Services/UserService.cs')
-rw-r--r--src/DevHive.Services/Services/UserService.cs29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/DevHive.Services/Services/UserService.cs b/src/DevHive.Services/Services/UserService.cs
index 09b56c1..d8c4ee5 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
return this._userMapper.Map<UserServiceModel>(
await this._userRepository.GetByIdAsync(user.Id));
}
+
+ 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