Newer
Older
using AutoMapper;
using MongoDB.Bson;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Tsi1.BusinessLayer.Dtos;
using Tsi1.BusinessLayer.Helpers;
using Tsi1.BusinessLayer.Interfaces;
using Tsi1.DataLayer.Entities;
using Tsi1.DataLayer.MongoDbConfiguration;
namespace Tsi1.BusinessLayer.Services
{
public class MessageService : IMessageService
{
private readonly IMapper _mapper;
private readonly IMongoCollection<Message> _messages;
public MessageService(ITsi1DatabaseSettings settings, IMapper mapper)
{
var client = new MongoClient(settings.ConnectionString);
var database = client.GetDatabase(settings.DatabaseName);
_messages = database.GetCollection<Message>(settings.Tsi1CollectionName);
_mapper = mapper;
}
public async Task<ServiceResult<List<MessagePreviewDto>>> GetMessages(int userId, int otherUserId, int tenantId)
{
var result = new ServiceResult<List<MessagePreviewDto>>();
var sort = Builders<Message>.Sort.Ascending("Date");
var messages = await _messages.Find(m => (m.SenderId == userId && m.ReceiverId == otherUserId && m.TenantId == tenantId)
|| (m.SenderId == otherUserId && m.ReceiverId == userId && m.TenantId == tenantId))
.Sort(sort)
.ToListAsync();
var messagesDto = _mapper.Map<List<MessagePreviewDto>>(messages);
result.Data = messagesDto;
return result;
}
public async Task<ServiceResult<MessagePreviewDto>> Send(MessageCreateDto newMessage)
{
var result = new ServiceResult<MessagePreviewDto>();
var message = _mapper.Map<Message>(newMessage);
message.Date = DateTime.Now;
await _messages.InsertOneAsync(message);
var messageDto = _mapper.Map<MessagePreviewDto>(message);
result.Data = messageDto;
return result;
}
}
}