Пример #1
0
        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);
        }
Пример #2
0
        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();
        }
Пример #3
0
        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);
        }
Пример #4
0
        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());
        }
Пример #5
0
        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();
        }