aboutsummaryrefslogtreecommitdiff
path: root/src/DevHive.Services/Services
diff options
context:
space:
mode:
authorSyndamia <kamen.d.mladenov@protonmail.com>2021-01-30 11:31:21 +0200
committerSyndamia <kamen.d.mladenov@protonmail.com>2021-01-30 11:31:21 +0200
commitff91162eb83dcf19402240ae8fa06f70cbf2b9e0 (patch)
tree2948559f7326c8221f799d4aaf794c5e00c06bd9 /src/DevHive.Services/Services
parentdde27f48caf455f9b342d68b0a4a5c95f302b9f7 (diff)
downloadDevHive-ff91162eb83dcf19402240ae8fa06f70cbf2b9e0.tar
DevHive-ff91162eb83dcf19402240ae8fa06f70cbf2b9e0.tar.gz
DevHive-ff91162eb83dcf19402240ae8fa06f70cbf2b9e0.zip
Separated comment models, controler and service from post's
Diffstat (limited to 'src/DevHive.Services/Services')
-rw-r--r--src/DevHive.Services/Services/CommentService.cs156
-rw-r--r--src/DevHive.Services/Services/FeedService.cs2
-rw-r--r--src/DevHive.Services/Services/PostService.cs72
3 files changed, 159 insertions, 71 deletions
diff --git a/src/DevHive.Services/Services/CommentService.cs b/src/DevHive.Services/Services/CommentService.cs
new file mode 100644
index 0000000..e0eb88a
--- /dev/null
+++ b/src/DevHive.Services/Services/CommentService.cs
@@ -0,0 +1,156 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using AutoMapper;
+using DevHive.Data.Models;
+using DevHive.Services.Models.Comment;
+using System.IdentityModel.Tokens.Jwt;
+using System.Security.Claims;
+using DevHive.Services.Interfaces;
+using DevHive.Data.Interfaces.Repositories;
+using System.Linq;
+
+namespace DevHive.Services.Services
+{
+ public class CommentService : ICommentService
+ {
+ private readonly IUserRepository _userRepository;
+ private readonly IPostRepository _postRepository;
+ private readonly ICommentRepository _commentRepository;
+ private readonly IMapper _postMapper;
+
+ public CommentService(IUserRepository userRepository, IPostRepository postRepository, ICommentRepository commentRepository, IMapper postMapper)
+ {
+ this._userRepository = userRepository;
+ this._postRepository = postRepository;
+ this._commentRepository = commentRepository;
+ this._postMapper = postMapper;
+ }
+
+ #region Create
+ public async Task<Guid> AddComment(CreateCommentServiceModel createCommentServiceModel)
+ {
+ if (!await this._postRepository.DoesPostExist(createCommentServiceModel.PostId))
+ throw new ArgumentException("Post does not exist!");
+
+ Comment comment = this._postMapper.Map<Comment>(createCommentServiceModel);
+ comment.TimeCreated = DateTime.Now;
+
+ comment.Creator = await this._userRepository.GetByIdAsync(createCommentServiceModel.CreatorId);
+ comment.Post = await this._postRepository.GetByIdAsync(createCommentServiceModel.PostId);
+
+ bool success = await this._commentRepository.AddAsync(comment);
+ if (success)
+ {
+ Comment newComment = await this._commentRepository
+ .GetCommentByIssuerAndTimeCreatedAsync(comment.Creator.Id, comment.TimeCreated);
+
+ return newComment.Id;
+ }
+ else
+ return Guid.Empty;
+ }
+ #endregion
+
+ #region Read
+ public async Task<ReadCommentServiceModel> GetCommentById(Guid id)
+ {
+ Comment comment = await this._commentRepository.GetByIdAsync(id) ??
+ throw new ArgumentException("The comment does not exist");
+
+ User user = await this._userRepository.GetByIdAsync(comment.Creator.Id) ??
+ throw new ArgumentException("The user does not exist");
+
+ ReadCommentServiceModel readCommentServiceModel = this._postMapper.Map<ReadCommentServiceModel>(comment);
+ readCommentServiceModel.IssuerFirstName = user.FirstName;
+ readCommentServiceModel.IssuerLastName = user.LastName;
+ readCommentServiceModel.IssuerUsername = user.UserName;
+
+ return readCommentServiceModel;
+ }
+ #endregion
+
+ #region Update
+ public async Task<Guid> UpdateComment(UpdateCommentServiceModel updateCommentServiceModel)
+ {
+ if (!await this._commentRepository.DoesCommentExist(updateCommentServiceModel.CommentId))
+ throw new ArgumentException("Comment does not exist!");
+
+ Comment comment = this._postMapper.Map<Comment>(updateCommentServiceModel);
+ comment.TimeCreated = DateTime.Now;
+
+ comment.Creator = await this._userRepository.GetByIdAsync(updateCommentServiceModel.CreatorId);
+ comment.Post = await this._postRepository.GetByIdAsync(updateCommentServiceModel.PostId);
+
+ bool result = await this._commentRepository.EditAsync(updateCommentServiceModel.CommentId, comment);
+
+ if (result)
+ return (await this._commentRepository.GetByIdAsync(updateCommentServiceModel.CommentId)).Id;
+ else
+ return Guid.Empty;
+ }
+ #endregion
+
+ #region Delete
+ public async Task<bool> DeleteComment(Guid id)
+ {
+ if (!await this._commentRepository.DoesCommentExist(id))
+ throw new ArgumentException("Comment does not exist!");
+
+ Comment comment = await this._commentRepository.GetByIdAsync(id);
+ return await this._commentRepository.DeleteAsync(comment);
+ }
+ #endregion
+
+ #region Validations
+ public async Task<bool> ValidateJwtForCreating(Guid userId, string rawTokenData)
+ {
+ User user = await this.GetUserForValidation(rawTokenData);
+
+ return user.Id == userId;
+ }
+
+ public async Task<bool> ValidateJwtForComment(Guid commentId, string rawTokenData)
+ {
+ Comment comment = await this._commentRepository.GetByIdAsync(commentId) ??
+ throw new ArgumentException("Comment does not exist!");
+ User user = await this.GetUserForValidation(rawTokenData);
+
+ //If user made the comment
+ if (comment.Creator.Id == user.Id)
+ return true;
+ //If user is admin
+ else if (user.Roles.Any(x => x.Name == Role.AdminRole))
+ return true;
+ else
+ return false;
+ }
+
+ private async Task<User> GetUserForValidation(string rawTokenData)
+ {
+ JwtSecurityToken jwt = new JwtSecurityTokenHandler().ReadJwtToken(rawTokenData.Remove(0, 7));
+
+ Guid jwtUserId = Guid.Parse(this.GetClaimTypeValues("ID", jwt.Claims).First());
+ //HashSet<string> jwtRoleNames = this.GetClaimTypeValues("role", jwt.Claims);
+
+ User user = await this._userRepository.GetByIdAsync(jwtUserId) ??
+ throw new ArgumentException("User does not exist!");
+
+ return user;
+ }
+
+
+ private List<string> GetClaimTypeValues(string type, IEnumerable<Claim> claims)
+ {
+ List<string> toReturn = new();
+
+ foreach (var claim in claims)
+ if (claim.Type == type)
+ toReturn.Add(claim.Value);
+
+ return toReturn;
+ }
+ #endregion
+ }
+}
+
diff --git a/src/DevHive.Services/Services/FeedService.cs b/src/DevHive.Services/Services/FeedService.cs
index 1bddac4..269471e 100644
--- a/src/DevHive.Services/Services/FeedService.cs
+++ b/src/DevHive.Services/Services/FeedService.cs
@@ -7,7 +7,7 @@ using DevHive.Data.Interfaces.Repositories;
using DevHive.Data.Models;
using DevHive.Services.Interfaces;
using DevHive.Services.Models;
-using DevHive.Services.Models.Post.Post;
+using DevHive.Services.Models.Post;
namespace DevHive.Services.Services
{
diff --git a/src/DevHive.Services/Services/PostService.cs b/src/DevHive.Services/Services/PostService.cs
index 7ce7b58..0eaac94 100644
--- a/src/DevHive.Services/Services/PostService.cs
+++ b/src/DevHive.Services/Services/PostService.cs
@@ -3,8 +3,7 @@ using System.Collections.Generic;
using System.Threading.Tasks;
using AutoMapper;
using DevHive.Data.Models;
-using DevHive.Services.Models.Post.Comment;
-using DevHive.Services.Models.Post.Post;
+using DevHive.Services.Models.Post;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using DevHive.Services.Interfaces;
@@ -13,7 +12,7 @@ using System.Linq;
namespace DevHive.Services.Services
{
- public class PostService : IPostService
+ public class PostService : IPostService
{
private readonly ICloudService _cloudService;
private readonly IUserRepository _userRepository;
@@ -55,29 +54,6 @@ namespace DevHive.Services.Services
else
return Guid.Empty;
}
-
- public async Task<Guid> AddComment(CreateCommentServiceModel createCommentServiceModel)
- {
- if (!await this._postRepository.DoesPostExist(createCommentServiceModel.PostId))
- throw new ArgumentException("Post does not exist!");
-
- Comment comment = this._postMapper.Map<Comment>(createCommentServiceModel);
- comment.TimeCreated = DateTime.Now;
-
- comment.Creator = await this._userRepository.GetByIdAsync(createCommentServiceModel.CreatorId);
- comment.Post = await this._postRepository.GetByIdAsync(createCommentServiceModel.PostId);
-
- bool success = await this._commentRepository.AddAsync(comment);
- if (success)
- {
- Comment newComment = await this._commentRepository
- .GetCommentByIssuerAndTimeCreatedAsync(comment.Creator.Id, comment.TimeCreated);
-
- return newComment.Id;
- }
- else
- return Guid.Empty;
- }
#endregion
#region Read
@@ -96,22 +72,6 @@ namespace DevHive.Services.Services
return readPostServiceModel;
}
-
- public async Task<ReadCommentServiceModel> GetCommentById(Guid id)
- {
- Comment comment = await this._commentRepository.GetByIdAsync(id) ??
- throw new ArgumentException("The comment does not exist");
-
- User user = await this._userRepository.GetByIdAsync(comment.Creator.Id) ??
- throw new ArgumentException("The user does not exist");
-
- ReadCommentServiceModel readCommentServiceModel = this._postMapper.Map<ReadCommentServiceModel>(comment);
- readCommentServiceModel.IssuerFirstName = user.FirstName;
- readCommentServiceModel.IssuerLastName = user.LastName;
- readCommentServiceModel.IssuerUsername = user.UserName;
-
- return readCommentServiceModel;
- }
#endregion
#region Update
@@ -146,25 +106,6 @@ namespace DevHive.Services.Services
else
return Guid.Empty;
}
-
- public async Task<Guid> UpdateComment(UpdateCommentServiceModel updateCommentServiceModel)
- {
- if (!await this._commentRepository.DoesCommentExist(updateCommentServiceModel.CommentId))
- throw new ArgumentException("Comment does not exist!");
-
- Comment comment = this._postMapper.Map<Comment>(updateCommentServiceModel);
- comment.TimeCreated = DateTime.Now;
-
- comment.Creator = await this._userRepository.GetByIdAsync(updateCommentServiceModel.CreatorId);
- comment.Post = await this._postRepository.GetByIdAsync(updateCommentServiceModel.PostId);
-
- bool result = await this._commentRepository.EditAsync(updateCommentServiceModel.CommentId, comment);
-
- if (result)
- return (await this._commentRepository.GetByIdAsync(updateCommentServiceModel.CommentId)).Id;
- else
- return Guid.Empty;
- }
#endregion
#region Delete
@@ -185,15 +126,6 @@ namespace DevHive.Services.Services
return await this._postRepository.DeleteAsync(post);
}
-
- public async Task<bool> DeleteComment(Guid id)
- {
- if (!await this._commentRepository.DoesCommentExist(id))
- throw new ArgumentException("Comment does not exist!");
-
- Comment comment = await this._commentRepository.GetByIdAsync(id);
- return await this._commentRepository.DeleteAsync(comment);
- }
#endregion
#region Validations