public async Task <BaseResponse> Update(MonthlyBalanceDto monthlyBalance)
        {
            var response = new BaseResponse();

            if (!monthlyBalance.MonthlyBalanceId.HasValue)
            {
                response.Infos.Errors.Add("Monthly BalanceId is required to update");
                response.StatusCode = HttpStatusCode.UnprocessableEntity;
                return(response);
            }

            var dbBalance = await _monthlyBalanceRepository.GetById(monthlyBalance.MonthlyBalanceId.Value);

            if (dbBalance is null)
            {
                response.Infos.Errors.Add($"BalanceId {monthlyBalance.MonthlyBalanceId} has not been found");
                response.StatusCode = HttpStatusCode.NotFound;
                return(response);
            }

            User currentUser = await _requestDataService.GetCurrentUser();

            if (dbBalance.BalanceUser.UserId != currentUser.UserId)
            {
                response.Infos.Errors.Add("You can only edit balances that belong to you");
                response.StatusCode = HttpStatusCode.Unauthorized;
                return(response);
            }

            MonthlyBalanceDtoValidator validator = new MonthlyBalanceDtoValidator();
            var validationResult = await validator.ValidateAsync(monthlyBalance);

            if (!validationResult.IsValid)
            {
                response.Infos.Errors.AddRange(validationResult.Errors.Select(error => error.ErrorMessage));
                response.StatusCode = HttpStatusCode.UnprocessableEntity;
                return(response);
            }

            dbBalance.AvailableMonthlyBalance = monthlyBalance.AvailableMonthlyBalance;
            dbBalance.ValidUntil = monthlyBalance.ValidUntil;

            if (!await _monthlyBalanceRepository.Update(dbBalance))
            {
                response.Infos.Errors.Add("The update has failed");
                response.StatusCode = HttpStatusCode.InternalServerError;
                return(response);
            }

            response.Data.Add("balance", dbBalance);

            return(response);
        }
        public async Task <BaseResponse> Create(MonthlyBalanceDto monthlyBalance)
        {
            var response = new BaseResponse();

            User currentUser = await _requestDataService.GetCurrentUser();

            var currentMonthlyBalance = await _monthlyBalanceRepository.GetNewestMonthlyBalance(currentUser.UserId);

            if (currentMonthlyBalance != null && currentMonthlyBalance.ValidUntil > DateTime.Now)
            {
                response.Infos.Errors.Add($"You already have a monthly balance until {currentMonthlyBalance.ValidUntil.ToString("dd.MM.yyyy")}. Please delete it first to set a new one.");
                response.StatusCode = HttpStatusCode.Conflict;
                return(response);
            }

            MonthlyBalanceDtoValidator validator = new MonthlyBalanceDtoValidator();
            var result = validator.Validate(monthlyBalance);

            if (!result.IsValid)
            {
                response.Infos.Errors.AddRange(result.Errors.ToList().Select(error => error.ErrorMessage));
                response.StatusCode = HttpStatusCode.UnprocessableEntity;
                return(response);
            }

            var newMonthlyBalance = new MonthlyBalance
            {
                ValidUntil = monthlyBalance.ValidUntil,
                AvailableMonthlyBalance = monthlyBalance.AvailableMonthlyBalance,
                BalanceUser             = currentUser
            };

            var dbBalance = await _monthlyBalanceRepository.Insert(newMonthlyBalance);

            dbBalance.BalanceUser = null;

            response.Data.Add("balance", dbBalance);

            return(response);
        }
Пример #3
0
        public async Task <ActionResult <BaseResponse> > Update(MonthlyBalanceDto monthlyBalance)
        {
            var response = await _monthlyBalanceService.Update(monthlyBalance);

            return(StatusCode((int)response.StatusCode, response));
        }