예제 #1
0
        public async Task <BaseResponse> Authenticate(LoginDto user)
        {
            var response = new BaseResponse();

            var dbUser = await _userRepository.GetByUsername(user.Username);

            if (dbUser is null)
            {
                return(InvalidCredentialsResponse(response));
            }

            if (dbUser.Password != user.Password)
            {
                return(InvalidCredentialsResponse(response));
            }

            response.Data.Add("token", GenerateJSONWebToken(dbUser));

            var monthlyBalance = await _monthlyBalanceRepository.GetNewestMonthlyBalance(dbUser.UserId);

            if (monthlyBalance is null || monthlyBalance.ValidUntil < DateTime.Now)
            {
                response.Data.Add("hasToSetMonthlyBalance", true);
            }

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