using Application.Abstractions.Data; using Application.Abstractions.Messaging; using Microsoft.EntityFrameworkCore; using SharedKernel.Results; namespace Application.Features.Api.Member.Follow.GetFollowing; public sealed class Handler(IAppDbContext db) : IQueryHandler> { public async Task> Handle(Query request, CancellationToken ct) { var target = await db.Member.AsNoTracking().Where(x => x.SID == request.MemberSID && !x.IsWithdraw).Select(x => new { x.ID }).FirstOrDefaultAsync(ct); if (target is null) { return Result.Failure(Error.NotFound("Follow.MemberNotFound", "회원을 찾을 수 없습니다.")); } var query = db.MemberFollow.AsNoTracking().Where(x => x.FollowerMemberID == target.ID); var total = await query.LongCountAsync(ct); var skip = (request.Page - 1) * request.PerPage; var list = await query .OrderByDescending(x => x.CreatedAt) .Skip(skip) .Take(request.PerPage) .Select(x => new Response.Row { SID = x.Followee.SID, Name = x.Followee.Name, Thumb = x.Followee.Thumb, Summary = x.Followee.Summary, IsCreator = x.Followee.IsCreator, FollowedAt = x.CreatedAt }) .ToListAsync(ct); return new Response { Total = total, List = list }; } }