diff options
| author | Kamen Mladenov <kamen.d.mladenov@protonmail.com> | 2021-04-09 19:51:35 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-09 19:51:35 +0300 |
| commit | 233f38915ba0079079233eff55434ef349c05c45 (patch) | |
| tree | 6c5f69017865bcab87355e910c87339453da1406 /src/Data/DevHive.Data/Repositories/RatingRepository.cs | |
| parent | f4a70c6430db923af9fa9958a11c2d6612cb52cc (diff) | |
| parent | a992357efcf1bc1ece81b95ecee5e05a0b73bfdc (diff) | |
| download | DevHive-0.2.tar DevHive-0.2.tar.gz DevHive-0.2.zip | |
Merge pull request #28 from Team-Kaleidoscope/devHEADv0.2mainheroku/main
Second stage: Complete
Diffstat (limited to 'src/Data/DevHive.Data/Repositories/RatingRepository.cs')
| -rw-r--r-- | src/Data/DevHive.Data/Repositories/RatingRepository.cs | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/Data/DevHive.Data/Repositories/RatingRepository.cs b/src/Data/DevHive.Data/Repositories/RatingRepository.cs new file mode 100644 index 0000000..2048c3f --- /dev/null +++ b/src/Data/DevHive.Data/Repositories/RatingRepository.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using DevHive.Data.Interfaces; +using DevHive.Data.Models; +using Microsoft.EntityFrameworkCore; + +namespace DevHive.Data.Repositories +{ + public class RatingRepository : BaseRepository<Rating>, IRatingRepository + { + private readonly DevHiveContext _context; + + public RatingRepository(DevHiveContext context) + : base(context) + { + this._context = context; + } + + public override async Task<Rating> GetByIdAsync(Guid id) + { + return await this._context.Rating + .Include(x => x.User) + .Include(x => x.Post) + .FirstOrDefaultAsync(x => x.Id == id); + } + /// <summary> + /// Gets all the ratings for a post. + /// </summary> + /// <param name="postId">Id of the post.</param> + /// <returns></returns> + public async Task<List<Rating>> GetRatingsByPostId(Guid postId) + { + return await this._context.Rating + .Include(x => x.User) + .Include(x => x.Post) + .Where(x => x.Post.Id == postId).ToListAsync(); + } + /// <summary> + /// Checks if a user rated a given post. In DevHive every user has one or no rating for every post. + /// </summary> + /// <param name="userId">Id of the user.</param> + /// <param name="postId">Id of the post.</param> + /// <returns>True if the user has already rated the post and false if he hasn't.</returns> + public async Task<bool> UserRatedPost(Guid userId, Guid postId) + { + return await this._context.Rating + .Where(x => x.Post.Id == postId) + .AnyAsync(x => x.User.Id == userId); + } + /// <summary> + /// Gets a rating by the post to which the rating corresponds and the user who created it. + /// </summary> + /// <param name="userId">Id of the user.</param> + /// <param name="postId">Id of the post.</param> + /// <returns>Rating for the given post by the given user.</returns> + public async Task<Rating> GetRatingByUserAndPostId(Guid userId, Guid postId) + { + return await this._context.Rating + .Include(x => x.User) + .Include(x => x.Post) + .FirstOrDefaultAsync(x => x.Post.Id == postId && x.User.Id == userId); + } + + /// <summary> + /// Checks if a given rating already exist + /// </summary> + /// <param name="id">Id of the rating</param> + /// <returns>True if the rating exists and false if it does not.</returns> + public async Task<bool> DoesRatingExist(Guid id) + { + return await this._context.Rating + .AsNoTracking() + .AnyAsync(r => r.Id == id); + } + } +} + |
