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());
        }