source: resTools_backend/backend/Services/ReviewService.cs@ 49b0bbd

Last change on this file since 49b0bbd was 63f5ced, checked in by Danilo <danilo.najkov@…>, 23 months ago

reviews pagination

  • Property mode set to 100644
File size: 2.1 KB
Line 
1using backend.Data;
2using backend.DTOs;
3using backend.Entities;
4using Microsoft.EntityFrameworkCore;
5
6namespace backend.Services
7{
8 public interface IReviewService
9 {
10 public Task AddReview(CreateReviewRequest review, int userId);
11 public Task<List<ReviewResponse>> GetReviews(int page, int pageSize);
12 public Task<int> GetCount();
13 }
14 public class ReviewService : IReviewService
15 {
16 private readonly DataContext _context = null;
17
18 public ReviewService(DataContext context)
19 {
20 _context = context;
21 }
22
23 public async Task AddReview(CreateReviewRequest review, int userId)
24 {
25 var user = await _context.Users.FindAsync(userId);
26 var res = await _context.Restoraunts.Include(x => x.Reviews).FirstOrDefaultAsync();
27 if(res.Reviews == null)
28 {
29 res.Reviews = new List<Review>();
30 }
31 res.Reviews.Add(new Review()
32 {
33 Title = review.Title,
34 Description = review.Description,
35 Stars = review.Stars,
36 CreatedAt = DateTime.UtcNow,
37 User = user
38 });
39 _context.Restoraunts.Update(res);
40 await _context.SaveChangesAsync();
41 }
42
43 public async Task<int> GetCount()
44 {
45 return await _context.Reviews.CountAsync();
46 }
47
48 public async Task<List<ReviewResponse>> GetReviews(int page, int pageSize)
49 {
50 return await _context.Reviews
51 .Include(x => x.User)
52 .OrderByDescending(x => x.CreatedAt)
53 .Skip(page * pageSize)
54 .Take(pageSize)
55 .Select(x => new ReviewResponse()
56 {
57 CreatedAt = x.CreatedAt,
58 Description = x.Description,
59 Id = x.Id,
60 Stars = x.Stars,
61 Title = x.Title,
62 Username = x.User == null ? "Anonymous" : x.User.Email
63 })
64 .ToListAsync();
65 }
66 }
67}
Note: See TracBrowser for help on using the repository browser.