Skip to content
Snippets Groups Projects
PostMessageService.cs 2.25 KiB
Newer Older
esantangelo's avatar
esantangelo committed
using AutoMapper;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tsi1.BusinessLayer.Dtos;
using Tsi1.BusinessLayer.Helpers;
using Tsi1.BusinessLayer.Interfaces;
using Tsi1.DataLayer;
using Tsi1.DataLayer.Entities;

namespace Tsi1.BusinessLayer.Services
{
    public class PostMessageService : IPostMessageService
    {
        private readonly Tsi1Context _context;

        private readonly IMapper _mapper;

        public PostMessageService(Tsi1Context context, IMapper mapper)
        {
            _context = context;
            _mapper = mapper;
        }

        public async Task<ServiceResult<PostMessage>> Create(PostMessageCreateDto newPostMessage)
        {
            var result = new ServiceResult<PostMessage>();

            var postMessage = _mapper.Map<PostMessage>(newPostMessage);

            postMessage.Date = DateTime.Now;

            _context.PostMessages.Add(postMessage);
            await _context.SaveChangesAsync();

            result.Data = postMessage;

            return result;
        }

        public async Task<ServiceResult<PostMessage>> Delete(int postMessageId)
        {
            var result = new ServiceResult<PostMessage>();

esantangelo's avatar
esantangelo committed
            var postMessage = await _context.PostMessages
                .FirstOrDefaultAsync(x => x.Id == postMessageId);
esantangelo's avatar
esantangelo committed

            if (postMessage == null)
            {
                result.HasError = true;
                result.Message = string.Format(ErrorMessages.PostMessageDoesNotExist, postMessageId);
                return result;
            }

            _context.PostMessages.Remove(postMessage);

            await _context.SaveChangesAsync();

            return result;
        }

        public async Task<ServiceResult<List<PostMessagePreviewDto>>> GetPostMessages(int postId)
        {
            var result = new ServiceResult<List<PostMessagePreviewDto>>();

            var postMessages = await _context.PostMessages
                .Where(x => x.PostId == postId)
                .ToListAsync();

            var postMessageDtos = _mapper.Map<List<PostMessagePreviewDto>>(postMessages);

            result.Data = postMessageDtos;

            return result;
        }
    }
}