Ignore:
Timestamp:
09/18/22 18:09:53 (22 months ago)
Author:
Danilo <danilo.najkov@…>
Branches:
master
Parents:
49b0bbd
Message:

vip functionallity + menu fields + alergens filtering + google/fb login + email queueing

Location:
resTools_backend/backend/Services
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • resTools_backend/backend/Services/MenuService.cs

    r49b0bbd r13f1472  
    1010        public Task AddMenu(CreateMenuItemRequest menu);
    1111        public Task RemoveMenu(int id);
     12        public Task UploadImage(int id, IFormFile file);
    1213    }
    1314    public class MenuService : IMenuService
     
    2930                Title = menu.Title,
    3031                Description = menu.Description,
    31                 Price = menu.Price
    32             });
     32                Price = menu.Price,
     33                Alergens = menu.Alergens,
     34                IsVipOnly = menu.IsVipOnly,
     35                Image = Array.Empty<byte>()
     36            }) ;
    3337            _context.Restoraunts.Update(res);
    3438            await _context.SaveChangesAsync();
     
    4246            await _context.SaveChangesAsync();
    4347        }
     48
     49        public async Task UploadImage(int id, IFormFile file)
     50        {
     51            using (var memoryStream = new MemoryStream())
     52            {
     53                await file.CopyToAsync(memoryStream);
     54                var menuItem = await _context.MenuItems.FindAsync(id);
     55                menuItem.Image = memoryStream.ToArray();
     56                _context.MenuItems.Update(menuItem);
     57                _context.SaveChanges();
     58            }
     59        }
    4460    }
    4561}
  • resTools_backend/backend/Services/RestaurantService.cs

    r49b0bbd r13f1472  
    4545                        Title = x.Title,
    4646                        Description = x.Description,
    47                         Price = x.Price
     47                        Price = x.Price,
     48                        Alergens = x.Alergens,
     49                        Image = String.Format("data:image/png;base64,{0}", Convert.ToBase64String(x.Image)),
     50                        IsVipOnly = x.IsVipOnly
    4851                    }).ToList(),
    4952                    Reviews = x.Reviews.Select(x => new ReviewResponse()
     
    5558                        Title = x.Title,
    5659                        Username = x.User == null ? "Anonymous" : x.User.Email
    57                     }).ToList(),
    58                     AverageReview = x.Reviews.Count>0 ? x.Reviews.Select(x => x.Stars).Average() : 0
     60                    }).ToList()
    5961                })
    6062                .FirstOrDefaultAsync();
     63            var reviews = await _context.Reviews.ToListAsync();
     64            res.AverageReview = reviews.Select(x => x.Stars).Sum();
    6165            return res;
    6266        }
  • resTools_backend/backend/Services/ReviewService.cs

    r49b0bbd r13f1472  
    11using backend.Data;
    22using backend.DTOs;
     3using backend.Email;
    34using backend.Entities;
    45using Microsoft.EntityFrameworkCore;
     
    1516    {
    1617        private readonly DataContext _context = null;
     18        private readonly IEmailSender _emailSender;
    1719
    18         public ReviewService(DataContext context)
     20        public ReviewService(DataContext context, IEmailSender emailSender)
    1921        {
    2022            _context = context;
     23            _emailSender = emailSender;
     24
    2125        }
    2226
     
    3943            _context.Restoraunts.Update(res);
    4044            await _context.SaveChangesAsync();
     45
     46            if (review.Stars < 3)
     47            {
     48                var adminUser = await _context.Users.FirstOrDefaultAsync(x => x.IsAdmin);
     49                await _emailSender.SendEmailAsync("Добивте лоша оценка", $"<html><h1>{review.Title}</h1><p>{review.Description}</p></html>", adminUser.Email);
     50            }
    4151        }
    4252
  • resTools_backend/backend/Services/UserService.cs

    r49b0bbd r13f1472  
    2020    Task<AuthenticateResponse> Register(CreateUserRequest req, bool isFirst);
    2121    Task<User> GetById(int id);
     22    Task<User> GetByEmail(string email);
    2223    Task SendEmailConfirmation(string email);
    2324    Task SendPasswordReset(string email);
    2425    Task ConfirmEmail(User user, string checkValid);
    2526    Task ResetPassword(string checkValid, string password);
     27    Task<List<UserResponse>> GetUsers();
     28    Task UpdateVipStatus(int id, bool isVip);
     29
    2630}
    2731
     
    3943    }
    4044
     45    public async Task<User> GetByEmail(string email)
     46    {
     47        return await _context.Users.FirstOrDefaultAsync(x => x.Email == email);
     48    }
     49
    4150    public async Task<AuthenticateResponse> Authenticate(AuthenticateRequest model)
    4251    {
     
    4958        var token = generateJwtToken(user);
    5059
    51         return new AuthenticateResponse { Email = user.Email, Id = user.Id, Token = token, IsAdmin = user.IsAdmin, IsConfirmed = user.IsConfirmed};
     60        return new AuthenticateResponse { Email = user.Email, Id = user.Id, Token = token, IsAdmin = user.IsAdmin, IsConfirmed = user.IsConfirmed, isVip = user.IsVip};
    5261    }
    5362
     
    7584    public async Task<AuthenticateResponse> Register(CreateUserRequest req, bool isFirst)
    7685    {
    77         User user = new User() { Email = req.Email, Password = req.Password, IsAdmin = isFirst, IsConfirmed = false };
     86        var exists = await _context.Users.FirstOrDefaultAsync(x => x.Email == req.Email);
     87        if(exists != null && req.IsConfirmed)
     88        {
     89            return new AuthenticateResponse { Email = exists.Email, Id = exists.Id, IsAdmin = exists.IsAdmin, IsConfirmed = true };
     90        }
     91        User user = new User() { Email = req.Email, Password = req.Password, IsAdmin = isFirst, IsConfirmed = req.IsConfirmed, IsVip = false };
    7892        await _context.Users.AddAsync(user);
    7993        await _context.SaveChangesAsync();
    8094        var token = generateJwtToken(user);
    81         return new AuthenticateResponse { Email = user.Email, Id = user.Id, Token = token, IsAdmin = user.IsAdmin, IsConfirmed = false };
     95        return new AuthenticateResponse { Email = user.Email, Id = user.Id, Token = token, IsAdmin = user.IsAdmin, IsConfirmed = req.IsConfirmed, isVip = user.IsVip };
    8296    }
    8397
     
    125139    }
    126140
     141    public async Task<List<UserResponse>> GetUsers()
     142    {
     143        return await _context.Users.Select(x => new UserResponse()
     144        {
     145            Email = x.Email,
     146            Id = x.Id,
     147            IsVip = x.IsVip
     148        }).OrderBy(x => x.Id).ToListAsync();
     149    }
     150
     151    public async Task UpdateVipStatus(int id, bool isVip)
     152    {
     153        var user = await _context.Users.FindAsync(id);
     154        user.IsVip = isVip;
     155        _context.Users.Update(user);
     156        await _context.SaveChangesAsync();
     157    }
     158
    127159    private string generateJwtToken(User user)
    128160    {
Note: See TracChangeset for help on using the changeset viewer.