70 lines
2.0 KiB
C#
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));
|
|
}
|
|
}
|
|
}
|