123 lines
4.0 KiB
C#
123 lines
4.0 KiB
C#
using GozareshgirProgramManager.Domain.TaskChatAgg.Entities;
|
|
using GozareshgirProgramManager.Domain.TaskChatAgg.Repositories;
|
|
using GozareshgirProgramManager.Infrastructure.Persistence.Context;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace GozareshgirProgramManager.Infrastructure.Persistence.Repositories.TaskChat;
|
|
|
|
public class TaskChatMessageRepository : ITaskChatMessageRepository
|
|
{
|
|
private readonly ProgramManagerDbContext _context;
|
|
|
|
public TaskChatMessageRepository(ProgramManagerDbContext context)
|
|
{
|
|
_context = context;
|
|
}
|
|
|
|
public async Task<TaskChatMessage?> GetByIdAsync(Guid messageId)
|
|
{
|
|
return await _context.TaskChatMessages
|
|
.Include(x => x.ReplyToMessage)
|
|
.FirstOrDefaultAsync(x => x.Id == messageId);
|
|
}
|
|
|
|
public async Task<List<TaskChatMessage>> GetTaskMessagesAsync(Guid taskId, int pageNumber, int pageSize)
|
|
{
|
|
return await _context.TaskChatMessages
|
|
.Where(x => x.TaskId == taskId)
|
|
.Include(x => x.ReplyToMessage)
|
|
.OrderBy(x => x.CreationDate)
|
|
.Skip((pageNumber - 1) * pageSize)
|
|
.Take(pageSize)
|
|
.ToListAsync();
|
|
}
|
|
|
|
public async Task<int> GetTaskMessageCountAsync(Guid taskId)
|
|
{
|
|
return await _context.TaskChatMessages
|
|
.CountAsync(x => x.TaskId == taskId);
|
|
}
|
|
|
|
public async Task<List<TaskChatMessage>> GetPinnedMessagesAsync(Guid taskId)
|
|
{
|
|
return await _context.TaskChatMessages
|
|
.Where(x => x.TaskId == taskId && x.IsPinned)
|
|
.Include(x => x.ReplyToMessage)
|
|
.OrderByDescending(x => x.PinnedDate)
|
|
.ToListAsync();
|
|
}
|
|
|
|
public async Task<TaskChatMessage?> GetLastMessageAsync(Guid taskId)
|
|
{
|
|
return await _context.TaskChatMessages
|
|
.Where(x => x.TaskId == taskId)
|
|
.OrderByDescending(x => x.CreationDate)
|
|
.FirstOrDefaultAsync();
|
|
}
|
|
|
|
public async Task<List<TaskChatMessage>> SearchMessagesAsync(Guid taskId, string searchText, int pageNumber, int pageSize)
|
|
{
|
|
return await _context.TaskChatMessages
|
|
.Where(x => x.TaskId == taskId &&
|
|
x.TextContent != null &&
|
|
x.TextContent.Contains(searchText))
|
|
.Include(x => x.ReplyToMessage)
|
|
.OrderByDescending(x => x.CreationDate)
|
|
.Skip((pageNumber - 1) * pageSize)
|
|
.Take(pageSize)
|
|
.ToListAsync();
|
|
}
|
|
|
|
public async Task<List<TaskChatMessage>> GetUserMessagesAsync(Guid taskId, long userId, int pageNumber, int pageSize)
|
|
{
|
|
return await _context.TaskChatMessages
|
|
.Where(x => x.TaskId == taskId && x.SenderUserId == userId)
|
|
.Include(x => x.ReplyToMessage)
|
|
.OrderByDescending(x => x.CreationDate)
|
|
.Skip((pageNumber - 1) * pageSize)
|
|
.Take(pageSize)
|
|
.ToListAsync();
|
|
}
|
|
|
|
public async Task<List<TaskChatMessage>> GetMediaMessagesAsync(Guid taskId, int pageNumber, int pageSize)
|
|
{
|
|
return await _context.TaskChatMessages
|
|
.Where(x => x.TaskId == taskId && x.FileId != null)
|
|
.Include(x => x.ReplyToMessage)
|
|
.OrderByDescending(x => x.CreationDate)
|
|
.Skip((pageNumber - 1) * pageSize)
|
|
.Take(pageSize)
|
|
.ToListAsync();
|
|
}
|
|
|
|
public async Task<TaskChatMessage> AddAsync(TaskChatMessage message)
|
|
{
|
|
await _context.TaskChatMessages.AddAsync(message);
|
|
return message;
|
|
}
|
|
|
|
public Task UpdateAsync(TaskChatMessage message)
|
|
{
|
|
_context.TaskChatMessages.Update(message);
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public Task DeleteAsync(TaskChatMessage message)
|
|
{
|
|
_context.TaskChatMessages.Remove(message);
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public async Task<int> SaveChangesAsync()
|
|
{
|
|
return await _context.SaveChangesAsync();
|
|
}
|
|
|
|
public async Task<bool> ExistsAsync(Guid messageId)
|
|
{
|
|
return await _context.TaskChatMessages
|
|
.AnyAsync(x => x.Id == messageId);
|
|
}
|
|
}
|
|
|