private async Task DoProlongationPaymentAsync(ProlongationPayment payment) { var user = await users.Find(_ => _.Id == payment.UserId).FirstOrDefaultAsync(); if (user != null) { TimeSpan?period = null; switch (payment.Type.ToLower()) { case "hour": period = new TimeSpan(1, 5, 0); break; case "day": period = new TimeSpan(1, 1, 0, 0); break; case "week": period = new TimeSpan(7, 1, 0, 0); break; case "month": period = new TimeSpan(32, 0, 0, 0); break; } if (period.HasValue) { if (user.Balance == null) { user.Balance = new UserBalance(); } if (user.Balance.Pays == null) { user.Balance.Pays = new List <UserPay>(); } if (user.Balance.ServiceExpired < DateTime.Now) { user.Balance.ServiceExpired = DateTime.Now; } user.Balance.ServiceExpired = user.Balance.ServiceExpired.Add(period.Value); user.Balance.Pays.Add(new UserPay { Amount = payment.Amount, Type = payment.Type, Description = payment.Description }); var filter = Builders <T> .Filter.Eq(_ => _.Id, user.Id); var update = Builders <T> .Update.Set(_ => _.Balance, user.Balance); await users.UpdateOneAsync(filter, update); logger.Info($"UsersService: added payment for {user.Id} with amount {payment.Amount} and type {payment.Type}"); } else { logger.Error($"UsersService: unknown type {payment.Amount} on payment"); } } else { logger.Error($"UsersService: unknown userid {payment.UserId} on payment"); } }
private void DoProlongationPayment(ProlongationPayment payment) { Task.Run(async() => await DoProlongationPaymentAsync(payment)).GetAwaiter().GetResult(); }