Example #1
0
        public async Task <IActionResult> UpdateDebt(DebtUpdateDTO model)
        {
            try
            {
                var data = await _debtService.UpdateDebtAsync(model);

                return(Ok(new { debt = data }));
            }
            catch (DbUpdateConcurrencyException)
            {
                return(BadRequest(new
                {
                    Message =
                        "The record you attempted to edit was modified by another user after you got the original value"
                }));
            }
            catch (UnauthorizedAccessException)
            {
                return(Unauthorized());
            }
            catch (NoPermissionException e)
            {
                return(BadRequest(new { e.Message }));
            }
            catch (Exception e)
            {
                return(BadRequest(new { e.Message }));
            }
        }
Example #2
0
        public static Debt Update(this Debt debt, DebtUpdateDTO model, Friend friend, Currency currency,
                                  out List <FieldChange> fieldChanges)
        {
            fieldChanges = new List <FieldChange>();

            //debt.Name = debt.Name.HandleChange(model.Name, nameof(debt.Name), out var fieldChange);
            //if (fieldChange != null)
            //    fieldChanges.Add(fieldChange);

            debt.Name = model.Name;

            debt.Description = debt.Description.HandleChange(model.Description, nameof(debt.Description), out var fieldChange);
            if (fieldChange != null)
            {
                fieldChanges.Add(fieldChange);
            }

            debt.Friend = debt.Friend.HandleChange(friend, nameof(debt.Friend), out fieldChange);
            if (fieldChange != null)
            {
                fieldChanges.Add(fieldChange);
            }

            debt.Synchronize = debt.Synchronize.HandleChange(model.Synchronize, nameof(debt.Synchronize), out fieldChange);
            if (fieldChange != null)
            {
                fieldChanges.Add(fieldChange);
            }

            //debt.Value = debt.Value.HandleChange(model.Value, nameof(debt.Value), out fieldChange);
            //if (fieldChange != null)
            //    fieldChanges.Add(fieldChange);

            debt.Value        = model.Value;
            debt.CurrentValue = model.CurrentValue;
            debt.Currency     = currency;

            debt.IsOwnerDebter = debt.IsOwnerDebter.HandleChange(model.IsOwnerDebter, nameof(debt.IsOwnerDebter), out fieldChange);
            if (fieldChange != null)
            {
                fieldChanges.Add(fieldChange);
            }

            debt.DateOfOverdue = debt.DateOfOverdue.HandleChange(model.DateOfOverdue, nameof(debt.DateOfOverdue), out fieldChange);
            if (fieldChange != null)
            {
                fieldChanges.Add(fieldChange);
            }

            debt.IsClosed = debt.IsClosed.HandleChange(model.IsClosed, nameof(debt.IsClosed), out fieldChange);
            if (fieldChange != null)
            {
                fieldChanges.Add(fieldChange);
            }

            debt.IsMoney = debt.IsClosed.HandleChange(model.IsMoney, nameof(debt.IsMoney), out fieldChange);
            if (fieldChange != null)
            {
                fieldChanges.Add(fieldChange);
            }

            debt.RowVersion = model.RowVersion;

            //debt.RowVersion.HandleChange(model.RowVersion, out fieldChange);
            //if (fieldChange != null)
            //    fieldChanges.Add(fieldChange);

            return(debt);
        }
Example #3
0
        public async Task <DebtReturnDTO> UpdateDebtAsync(DebtUpdateDTO model)
        {
            var idClaim = _httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;

            if (!long.TryParse(idClaim, out var ownerId))
            {
                throw new UnauthorizedAccessException();
            }

            var oldDebt = await _debtRepository.GetByIdAsync(model.DebtId, debt => debt.Owner, debt => debt.Friend,
                                                             debt => debt.Currency);

            if (oldDebt.Owner.Id != ownerId)
            {
                throw new NoPermissionException("User is not owner of this debt");
            }
            var friend = await _friendRepository.GetByIdAsync(model.FriendId, friend1 => friend1.FriendUser);

            Currency currency = null;

            if (model.IsMoney)
            {
                if (model.Value == null)
                {
                    throw new ArgumentException("Value can't be null");
                }

                if (model.CurrencyId == null)
                {
                    throw new ArgumentException("Currency id can't be null");
                }

                currency = await _currenciesRepository.GetByIdAsync(model.CurrencyId.Value);
            }

            else if (string.IsNullOrWhiteSpace(model.Name))
            {
                throw new ArgumentException("Thing name can't be empty");
            }

            oldDebt.Update(model, friend, currency, out var listOfFieldChanges);
            if (listOfFieldChanges.Count != 0)
            {
                var change = new Change
                {
                    ChangedBy    = await _userRepository.GetByIdAsync(ownerId),
                    FieldChanges = listOfFieldChanges,
                    ChangedDebt  = oldDebt
                };


                await _changeRepository.InsertAsync(change);
            }

            oldDebt.ModifiedBy = ownerId;

            var updatedDebt = await _debtRepository.UpdateAsync(oldDebt);

            if (friend.FriendUser != null)
            {
                await _hubContext.Clients.User(friend.FriendUser.Id.ToString()).SendAsync("UpdateDebts");
            }
            return(updatedDebt.DebtToReturnDebtDTO());
        }