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); }