public async Task <IActionResult> Post([FromBody] DonationSubmissionDto dto) { var donatedAt = _serverTimeZone.TimeZoneNow(); var character = await _context.Characters.FindAsync(dto.CharacterId); if (character is null) { return(NotFound()); } if (!character.TeamId.HasValue) { return(Problem("Donations can only be applied to characters on a raid team.")); } var authResult = await _authorizationService.AuthorizeAsync(User, character.TeamId.Value, AppPolicies.LootMasterOrAdmin); if (!authResult.Succeeded) { return(Unauthorized()); } if (dto.ApplyThisMonth) { if (await _context.Raids.CountAsync(raid => raid.RaidTeamId == character.TeamId.Value && raid.StartedAt.Month == donatedAt.Month && raid.StartedAt.Year == donatedAt.Year) > 0) { return(Problem("Donations can only be applied to the current month before any raid occurs during the month.")); } donatedAt = donatedAt.AddDays(-donatedAt.Day); } _context.Donations.Add(new Donation(_idGenerator.CreateId()) { CopperAmount = dto.CopperAmount, DonatedAt = donatedAt, Character = character, CharacterId = character.Id, EnteredById = User.GetDiscordId().GetValueOrDefault() }); await _context.SaveChangesAsync(); _telemetry.TrackEvent("DonationAdded", User); return(Ok()); }
public async Task <IActionResult> Post([FromBody] DonationSubmissionDto dto) { var character = await _context.Characters.FindAsync(dto.CharacterId); if (character is null) { return(NotFound()); } _context.Donations.Add(new Donation(_idGenerator.CreateId()) { CopperAmount = dto.CopperAmount, DonatedAt = _serverTimeZone.TimeZoneNow(), Character = character, CharacterId = character.Id, EnteredById = User.GetDiscordId().GetValueOrDefault() }); await _context.SaveChangesAsync(); _telemetry.TrackEvent("DonationAdded", User); return(Ok()); }