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; } } }