| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- using Application.Abstractions.Data;
- using Application.Abstractions.Messaging;
- using Microsoft.EntityFrameworkCore;
- using SharedKernel.Results;
- namespace Application.Features.Api.MyPage.Sns.List;
- internal sealed class Handler(IAppDbContext db) : IQueryHandler<Query, Result<Response>>
- {
- // 지원 예정 provider — 카드 UI 에 'disabled' 로 노출하기 위해 항상 응답에 포함
- private static readonly string[] SupportedProviders = ["Google", "Naver", "Kakao"];
- public async Task<Result<Response>> Handle(Query request, CancellationToken ct)
- {
- var tokens = await db.MemberOAuthToken
- .AsNoTracking()
- .Where(t => t.MemberID == request.MemberID)
- .Select(t => new
- {
- t.Provider,
- t.CreatedAt,
- t.UpdatedAt,
- t.ExpiresAt
- })
- .ToListAsync(ct);
- var now = DateTime.UtcNow;
- var items = SupportedProviders.Select(provider => {
- var token = tokens.FirstOrDefault(t => t.Provider == provider);
- if (token is null)
- {
- return new SnsLinkItem(provider, false, null, null, null, false);
- }
- return new SnsLinkItem(
- provider,
- true,
- token.CreatedAt,
- token.UpdatedAt,
- token.ExpiresAt,
- now >= token.ExpiresAt
- );
- }).ToList();
- return Result.Success(new Response(items));
- }
- }
|