using Fitness_core_BE.Interfaces; using Fitness_core_BE.Models; using Microsoft.EntityFrameworkCore; namespace Fitness_core_BE.Repos { public class ChatRepository : IChatRepo { private readonly CentralDbContext _context; public ChatRepository(CentralDbContext context) { _context = context; } public async Task GetChatByIdAsync(Guid chatId) { return await _context.Chat .AsNoTracking() .FirstOrDefaultAsync(c => c.Id == chatId && c.IsAcitve); } public async Task GetChatBetweenUsersAsync(Guid userAId, Guid userBId) { return await _context.Chat .AsNoTracking() .FirstOrDefaultAsync(c => c.IsAcitve && ( (c.FKSenderId == userAId && c.FKReceiverId == userBId) || (c.FKSenderId == userBId && c.FKReceiverId == userAId) )); } public async Task CreateChatAsync(Chat chat) { await _context.Chat.AddAsync(chat); } public async Task AddMessageAsync(ChatMessages message) { await _context.ChatMessages.AddAsync(message); } public async Task> GetMessagesAsync( Guid chatId, int skip, int take) { return await _context.ChatMessages .AsNoTracking() .Where(m => m.FKChatId == chatId && m.IsAcitve) .OrderBy(m => m.CreatedAt) .Skip(skip) .Take(take) .ToListAsync(); } public async Task IsUserInChatAsync(Guid chatId, Guid userId) { return await _context.Chat .AsNoTracking() .AnyAsync(c => c.Id == chatId && c.IsAcitve && (c.FKSenderId == userId || c.FKReceiverId == userId)); } } }