using Microsoft.EntityFrameworkCore; using WorkClub.Application.Clubs.DTOs; using WorkClub.Application.Interfaces; using WorkClub.Infrastructure.Data; namespace WorkClub.Api.Services; public class ClubService { private readonly AppDbContext _context; private readonly ITenantProvider _tenantProvider; private readonly IHttpContextAccessor _httpContextAccessor; public ClubService( AppDbContext context, ITenantProvider tenantProvider, IHttpContextAccessor httpContextAccessor) { _context = context; _tenantProvider = tenantProvider; _httpContextAccessor = httpContextAccessor; } public async Task> GetMyClubsAsync() { var userIdClaim = _httpContextAccessor.HttpContext?.User.FindFirst("sub")?.Value; if (string.IsNullOrEmpty(userIdClaim)) { return new List(); } var memberships = await _context.Members .Where(m => m.ExternalUserId == userIdClaim) .ToListAsync(); var clubIds = memberships.Select(m => m.ClubId).ToList(); var clubs = await _context.Clubs .Where(c => clubIds.Contains(c.Id)) .ToListAsync(); var clubDtos = new List(); foreach (var club in clubs) { var memberCount = await _context.Members .Where(m => m.ClubId == club.Id) .CountAsync(); clubDtos.Add(new ClubListDto( club.Id, club.Name, club.SportType.ToString(), memberCount )); } return clubDtos; } public async Task GetCurrentClubAsync() { var tenantId = _tenantProvider.GetTenantId(); var club = await _context.Clubs .FirstOrDefaultAsync(c => c.TenantId == tenantId); if (club == null) return null; return new ClubDetailDto( club.Id, club.Name, club.SportType.ToString(), club.Description, club.CreatedAt, club.UpdatedAt ); } }