sledgemapper/Sledgemapper.Api/Handlers/InvitePlayerToCampaignCommandHandler.cs
Michele Scandura 73400b5c9f
All checks were successful
continuous-integration/drone/push Build is passing
cleanup
2021-09-30 11:19:38 +01:00

56 lines
No EOL
1.9 KiB
C#

using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MediatR;
using Microsoft.EntityFrameworkCore;
using Sentry;
using Sledgemapper.Api.Commands;
using Sledgemapper.Api.Infrastructure.Data;
namespace Sledgemapper.Api.Handlers
{
public class InvitePlayerToCampaignCommandHandler : IRequestHandler<InvitePlayerToCampaignCommand, bool>
{
private readonly SledgemapperDbContext _dbContext;
private readonly IMediator _mediator;
public InvitePlayerToCampaignCommandHandler(IMediator mediator, SledgemapperDbContext dbContext)
{
_mediator = mediator;
_dbContext = dbContext;
}
public async Task<bool> Handle(InvitePlayerToCampaignCommand command, CancellationToken cancellationToken)
{
try
{
var user = await _dbContext.Users.FindAsync(new[] { command.UserId }, cancellationToken: cancellationToken);
var campaign = await _dbContext
.Campaigns
.Where(campaign => campaign.CampaignId == command.CampaignId)
.Include(c => c.InvitedUsers)
.Where(campaign => campaign.OwnerId == command.UserId || campaign.InvitedUsers.Contains(user))
.FirstAsync(cancellationToken);
var invitedUser =
await _dbContext.Users.FirstOrDefaultAsync(iUser => iUser.Email == command.Email,
cancellationToken);
_dbContext.Attach(invitedUser);
_dbContext.Attach(campaign);
campaign.InvitedUsers.Add(invitedUser);
await _dbContext.SaveChangesAsync(cancellationToken);
return true;
}
catch (Exception ex)
{
SentrySdk.CaptureException(ex);
}
return false;
}
}
}