using MediatR; using Microsoft.EntityFrameworkCore; using Sledgemapper.Api.Commands; using Sledgemapper.Api.Infrastructure.Data; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using Sentry; using Session = Sledgemapper.Shared.Entities.Session; namespace Sledgemapper.Api.Handlers { public class GetCampaignMapsCommandHandler : IRequestHandler> { private readonly IMediator _mediator; private readonly SledgemapperDbContext _dbcontext; public GetCampaignMapsCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext) { _mediator = mediator; _dbcontext = dbcontext; } public async Task> Handle(GetCampaignMapsCommand command, CancellationToken cancellationToken) { try { var user = await _dbcontext.Users.FindAsync(new[] { command.UserId }, cancellationToken: cancellationToken); _dbcontext.Attach(user); var campaign = await _dbcontext .Campaigns .Where(campaign => campaign.CampaignId == command.CampaignId) .Include(c => c.InvitedUsers) .Include(c => c.Maps) .Include(c => c.Owner) .Where(campaign => campaign.OwnerId == command.UserId || campaign.InvitedUsers.Contains(user)).FirstAsync(cancellationToken); //var campaign = await _dbcontext.Campaigns.Where(campaign => campaign.CampaignId == command.CampaignId && campaign.OwnerId == command.UserId).Include(campaign => campaign.Maps).FirstAsync(); var maps = campaign.Maps.Select(session => new Session { SessionName = session.SessionName, SessionId = session.SessionId }).ToList(); return maps; } catch (Exception ex) { SentrySdk.CaptureException(ex); } return null; } } }