aboutsummaryrefslogtreecommitdiff
path: root/src/DevHive.Services/Services
diff options
context:
space:
mode:
authortranstrike <transtrike@gmail.com>2021-01-30 18:45:18 +0200
committertranstrike <transtrike@gmail.com>2021-01-30 18:45:18 +0200
commit866a5a15b8b722bc78d065f73adc0c465f264f55 (patch)
tree93e6514e9717f42e9323cc5ebd17261c14eb2748 /src/DevHive.Services/Services
parentdde27f48caf455f9b342d68b0a4a5c95f302b9f7 (diff)
downloadDevHive-866a5a15b8b722bc78d065f73adc0c465f264f55.tar
DevHive-866a5a15b8b722bc78d065f73adc0c465f264f55.tar.gz
DevHive-866a5a15b8b722bc78d065f73adc0c465f264f55.zip
IDFK
Diffstat (limited to 'src/DevHive.Services/Services')
-rw-r--r--src/DevHive.Services/Services/RatingService.cs54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/DevHive.Services/Services/RatingService.cs b/src/DevHive.Services/Services/RatingService.cs
new file mode 100644
index 0000000..2c5a6b6
--- /dev/null
+++ b/src/DevHive.Services/Services/RatingService.cs
@@ -0,0 +1,54 @@
+using System;
+using System.Diagnostics;
+using System.Threading.Tasks;
+using AutoMapper;
+using DevHive.Data.Interfaces.Repositories;
+using DevHive.Data.Models;
+using DevHive.Services.Models.Post.Rating;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+
+namespace DevHive.Services.Services
+{
+ public class RatingService
+ {
+ private readonly IPostRepository _postRepository;
+ private readonly IRatingRepository _ratingRepository;
+ private readonly IMapper _mapper;
+
+ public RatingService(IPostRepository postRepository, IRatingRepository ratingRepository, IMapper mapper)
+ {
+ this._postRepository = postRepository;
+ this._ratingRepository = ratingRepository;
+ this._mapper = mapper;
+ }
+
+ public async Task<ReadRatingServiceModel> RatePost(RatePostServiceModel ratePostServiceModel)
+ {
+ if (!await this._postRepository.DoesPostExist(ratePostServiceModel.PostId))
+ throw new ArgumentNullException("Post does not exist!");
+
+ if (!await this._ratingRepository.HasUserRatedThisPost(ratePostServiceModel.UserId, ratePostServiceModel.PostId))
+ throw new ArgumentException("You can't rate the same post more then one(duh, amigo)");
+
+ Post post = await this._postRepository.GetByIdAsync(ratePostServiceModel.PostId);
+
+ Rating rating = post.Rating;
+ if (ratePostServiceModel.Liked)
+ rating.Likes++;
+ else
+ rating.Dislikes++;
+
+ bool success = await this._ratingRepository.EditAsync(rating.Id, rating);
+ if (!success)
+ throw new InvalidOperationException("Unable to rate the post!");
+
+ Rating newRating = await this._ratingRepository.GetByIdAsync(rating.Id);
+ return this._mapper.Map<ReadRatingServiceModel>(newRating);
+ }
+
+ public async Task<ReadRatingServiceModel> RemoveUserRateFromPost(Guid userId, Guid postId)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}