80 lines
2.1 KiB
C#
80 lines
2.1 KiB
C#
|
|
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<List<ClubListDto>> GetMyClubsAsync()
|
||
|
|
{
|
||
|
|
var userIdClaim = _httpContextAccessor.HttpContext?.User.FindFirst("sub")?.Value;
|
||
|
|
if (string.IsNullOrEmpty(userIdClaim))
|
||
|
|
{
|
||
|
|
return new List<ClubListDto>();
|
||
|
|
}
|
||
|
|
|
||
|
|
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<ClubListDto>();
|
||
|
|
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<ClubDetailDto?> 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
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|