using GroupService.Domain.Entities; using GroupService.Domain.IReposities; using Microsoft.EntityFrameworkCore; namespace GroupService.Infrastructure.Reposities { public class GroupJoinRequestReposity : IGroupRequestReposity { private readonly GroupDbContext db; public GroupJoinRequestReposity(GroupDbContext db) { this.db = db; } public void Create(GroupJoinRequest request) { db.GroupJoinRequests.Add(request); } public async Task> FindByGroupIdAsync(Guid groupId) { return await db.GroupJoinRequests.Where(x => x.GroupId == groupId) .OrderByDescending(o => o.CreationTime) .ToListAsync(); } public async Task FindByIdAsync(Guid id) { return await db.GroupJoinRequests.FirstOrDefaultAsync(x => x.Id == id); } public async Task> FindByUserIdAsync(Guid userId) { return await db.GroupJoinRequests.Where(x => x.UserId == userId || x.OperatorId == userId ).ToListAsync(); } public async Task> FindVisibleToUserAsync(Guid userId) { var managedGroupIds = db.GroupMembers .Where(member => member.UserId == userId && (member.Role == Domain.Enums.GroupMemberRole.Administrator || member.Role == Domain.Enums.GroupMemberRole.Master)) .Select(member => member.GroupId); return await db.GroupJoinRequests .Where(request => request.UserId == userId || managedGroupIds.Contains(request.GroupId)) .OrderByDescending(request => request.CreationTime) .ToListAsync(); } } }