diff options
| author | transtrike <transtrike@gmail.com> | 2021-01-30 18:45:18 +0200 |
|---|---|---|
| committer | transtrike <transtrike@gmail.com> | 2021-01-30 18:45:18 +0200 |
| commit | 866a5a15b8b722bc78d065f73adc0c465f264f55 (patch) | |
| tree | 93e6514e9717f42e9323cc5ebd17261c14eb2748 /src/DevHive.Services | |
| parent | dde27f48caf455f9b342d68b0a4a5c95f302b9f7 (diff) | |
| download | DevHive-866a5a15b8b722bc78d065f73adc0c465f264f55.tar DevHive-866a5a15b8b722bc78d065f73adc0c465f264f55.tar.gz DevHive-866a5a15b8b722bc78d065f73adc0c465f264f55.zip | |
IDFK
Diffstat (limited to 'src/DevHive.Services')
4 files changed, 92 insertions, 0 deletions
diff --git a/src/DevHive.Services/Configurations/Mapping/RatingMappings.cs b/src/DevHive.Services/Configurations/Mapping/RatingMappings.cs new file mode 100644 index 0000000..5da1b0d --- /dev/null +++ b/src/DevHive.Services/Configurations/Mapping/RatingMappings.cs @@ -0,0 +1,12 @@ +using AutoMapper; + +namespace DevHive.Services.Configurations.Mapping +{ + public class RatingMappings : Profile + { + public RatingMappings() + { + + } + } +} diff --git a/src/DevHive.Services/Models/Post/Rating/RatePostServiceModel.cs b/src/DevHive.Services/Models/Post/Rating/RatePostServiceModel.cs new file mode 100644 index 0000000..d4eb7bd --- /dev/null +++ b/src/DevHive.Services/Models/Post/Rating/RatePostServiceModel.cs @@ -0,0 +1,13 @@ +using System; + +namespace DevHive.Services.Models.Post.Rating +{ + public class RatePostServiceModel + { + public Guid UserId { get; set; } + + public Guid PostId { get; set; } + + public bool Liked { get; set; } + } +} diff --git a/src/DevHive.Services/Models/Post/Rating/ReadRatingServiceModel.cs b/src/DevHive.Services/Models/Post/Rating/ReadRatingServiceModel.cs new file mode 100644 index 0000000..b071e74 --- /dev/null +++ b/src/DevHive.Services/Models/Post/Rating/ReadRatingServiceModel.cs @@ -0,0 +1,13 @@ +using System; + +namespace DevHive.Services.Models.Post.Rating +{ + public class ReadRatingServiceModel + { + public Guid PostId { get; set; } + + public int Likes { get; set; } + + public int Dislikes { get; set; } + } +} 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(); + } + } +} |
