public async Task <User> AddBankCard(int userId, BankCardModel cardModel) { var user = await _db.Users.FindAsync(userId); var tokens = await _bankApi.Authenticate(cardModel); user.BankActionToken = tokens.AccessToken; user.BankIdToken = tokens.IdToken; user.CardLastFourDigits = string.Join("", cardModel.CardNumber.Skip(12)); await _db.SaveChangesAsync(); return(user); }
public async Task ClearDebt(int currentUserId, int recipientId) { var myPurchases = await GetCommonPurchases(currentUserId, recipientId); var purchasesWithMe = await GetCommonPurchases(recipientId, currentUserId); var myTotalDebt = purchasesWithMe.Sum(p => p.Sum); var totalDebtWithMe = myPurchases.Sum(p => p.Sum); var sumToPay = (myTotalDebt ?? 0) - (totalDebtWithMe ?? 0); if (sumToPay <= 0) { throw new ApiException(400, "You owe nothing", ErrorCode.InvalidAction); } await _purchasesService.SendMoney(currentUserId, recipientId, sumToPay); foreach (var purchase in myPurchases.Concat(purchasesWithMe)) { purchase.Status = PurchaseStatus.Payed; } await _db.SaveChangesAsync(); }
public async Task <Team> CreateTeam(CreateTeamModel model, int adminId) { var team = new Team { Name = model.Name, AdminId = adminId }; _db.Teams.Add(team); await _db.SaveChangesAsync(); _db.UserTeams.AddRange(model.UserIds.Select(id => new UserTeam { UserId = id, TeamId = team.Id })); _db.UserTeams.Add(new UserTeam { UserId = adminId, TeamId = team.Id }); await _db.SaveChangesAsync(); var userTeams = await _db.UserTeams .Include(ut => ut.User) .Where(ut => ut.TeamId == team.Id) .ToListAsync(); team.UserTeams = userTeams; return(team); }
public async Task <Purchase> CreatePurchase(CreateStoreOrdersModel model, int currentUserId) { var storeOrder = new StoreOrder { StoreId = model.StoreId, IsSubmitted = false }; var purchase = new Purchase { Type = PurchaseType.Store, CreatorId = currentUserId, IsPayedOff = false, Name = model.Name, CreatedAt = DateTime.Now, StoreOrder = storeOrder }; _db.Purchases.Add(purchase); await _db.SaveChangesAsync(); var userPurchases = model.Users .Union(new List <int> { currentUserId }) .Select(u => new UserPurchase { PurchaseId = purchase.Id, UserId = u, Status = PurchaseStatus.New }); _db.UserPurchases.AddRange(userPurchases); await _db.SaveChangesAsync(); return(await _db.Purchases .Include(up => up.StoreOrder) .Include(up => up.UserPurchases) .ThenInclude(p => p.User) .Include(up => up.UserPurchases) .ThenInclude(p => p.Items) .Where(p => p.Id == purchase.Id) .FirstOrDefaultAsync()); }
public async Task UpdatePurchase(int purchaseId, UpdatePurchaseModel model, int currentUserId) { var purchase = await _db.Purchases.FindAsync(purchaseId); if (purchase.CreatorId != currentUserId) { throw new ApiException(401, "Access denied", ErrorCode.AuthError); } purchase.Name = string.IsNullOrWhiteSpace(model.Name) ? purchase.Name : model.Name; await _db.SaveChangesAsync(); }