Files
Core_Be/Repos/ChatRepository.cs
Dhananjaya99 bffc9b1686 first commit
2026-09-28 11:44:26 +05:30

70 lines
2.0 KiB
C#

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<Chat?> GetChatByIdAsync(Guid chatId)
{
return await _context.Chat
.AsNoTracking()
.FirstOrDefaultAsync(c => c.Id == chatId && c.IsAcitve);
}
public async Task<Chat?> 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<List<ChatMessages>> 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<bool> IsUserInChatAsync(Guid chatId, Guid userId)
{
return await _context.Chat
.AsNoTracking()
.AnyAsync(c =>
c.Id == chatId &&
c.IsAcitve &&
(c.FKSenderId == userId || c.FKReceiverId == userId));
}
}
}