Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using AutoMapper;
- using Contracts;
- using Entities;
- using Entities.Exceptions;
- using Microsoft.AspNetCore.Mvc;
- using Service.Contracts;
- using Shared.DataTransferObjects;
- namespace Service;
- public class LikeService : ILikeService
- {
- private readonly IRepositoryManager _repository;
- private readonly IMapper _mapper;
- public LikeService(IRepositoryManager repository, IMapper mapper)
- {
- _repository = repository;
- _mapper = mapper;
- }
- public async Task<IEnumerable<LikeDto>> GetLikesAsync(Guid entityId, string entityType, bool trackChanges)
- {
- var likes = await _repository.Like.GetLikesAsync(entityId, entityType, trackChanges);
- var likesDto = _mapper.Map<IEnumerable<LikeDto>>(likes);
- return likesDto;
- }
- public async Task<LikeDto> GetLikeByIdAsync(Guid likeId, bool trackChanges)
- {
- var like = await _repository.Like.GetLikeByIdAsync(likeId, trackChanges);
- var likeDto = _mapper.Map<LikeDto>(like);
- return likeDto;
- }
- public async Task<LikeDto> CreateLikeAsync(string userId, string displayName, LikeForCreationDto likeForCreation)
- {
- var likeEntity = _mapper.Map<Like>(likeForCreation);
- _repository.Like.CreateLike(userId, displayName, likeEntity);
- await _repository.SaveAsync();
- var likeDto = _mapper.Map<LikeDto>(likeEntity);
- return likeDto;
- }
- public async Task DeleteLikeAsync(Guid likeId, bool trackChanges)
- {
- var likeEntity = await _repository.Like.GetLikeByIdAsync(likeId, trackChanges);
- _repository.Like.DeleteLike(likeEntity);
- await _repository.SaveAsync();
- }
- public async Task DeleteLikeAndUpdatePostAsync(Guid likeId)
- {
- var like = await _repository.Like.GetLikeByIdAsync(likeId, trackChanges: true);
- if (like == null)
- {
- throw new LikeNotFoundException(likeId);
- }
- if (like.PostId.HasValue)
- {
- var post = await _repository.Post.GetPostByIdAsync(like.PostId.Value, trackChanges: true);
- if (post != null)
- {
- post.LikeCount--;
- await _repository.SaveAsync();
- }
- }
- _repository.Like.DeleteLike(like);
- await _repository.SaveAsync();
- }
- }
Add Comment
Please, Sign In to add comment