//public IResult GetStudent(GetStudentRequest request) //{ // var student = _dataSource.Students.GetStudent(request); // return new Result<Student>(true, student, "Operation completed successfully."); //} public IResult BuyVoucher(BuyVoucherRequest request) { var voucher = _dataSource.Vouchers.GetById(request.VoucherId); if (voucher == null) { return(new Result(false, "Voucher does not exist.")); } if (voucher.Used is true) { return(new Result(false, "Voucher has been used.")); } var student = _dataSource.Students.GetByIndexNumber(request.IndexNumber); if (student is null) { return(new Result(false, "Invalid index number.")); } var transaction = new StudentTransaction { Amount = voucher.Amount, IndexNumber = student.IndexNumber }; var result = _dataSource.Students.BuyVoucher(transaction); _dataSource.Vouchers.UpdateVoucher(request.VoucherId); //_dataSource.Transactions.Add(transaction); return(new Result <float>(true, result.Balance, "Operation completed successfully.")); }
public IActionResult Buy([FromBody] BuyVoucherRequest buyVoucherRequest) { var newVoucherCode = Guid.NewGuid().ToString(); this.voucherEventStore.AppendEvent(newVoucherCode, new VoucherPurchased(buyVoucherRequest.Amount)); return(this.Ok(new BuyVoucherResponse(newVoucherCode))); }
public async Task WhenAVoucherIsPartiallySpentTheCurrentAmountIsCorrect() { var buyRequest = new BuyVoucherRequest(50m); string voucherCode; using (var requestContent = new StringContent(JsonConvert.SerializeObject(buyRequest), Encoding.UTF8, "application/json")) { var buyResponse = await this.client.PostAsync("/api/vouchers/buy", requestContent); var buyVoucherResponse = JsonConvert.DeserializeObject <BuyVoucherResponse>(await buyResponse.Content.ReadAsStringAsync()); voucherCode = buyVoucherResponse.VoucherCode; } var spendRequest = new SpendVoucherRequest(voucherCode, 25); using (var requestContent = new StringContent(JsonConvert.SerializeObject(spendRequest), Encoding.UTF8, "application/json")) { var spendResponse = await this.client.PostAsync("/api/vouchers/spend", requestContent); spendResponse.StatusCode.ShouldBe(HttpStatusCode.OK); } var getResponse = await this.client.GetAsync($"/api/vouchers/{voucherCode}"); getResponse.StatusCode.ShouldBe(HttpStatusCode.OK); var voucher = JsonConvert.DeserializeObject <Voucher>(await getResponse.Content.ReadAsStringAsync()); voucher.VoucherCode.ShouldBe(voucherCode); voucher.OriginalAmount.ShouldBe(50m); voucher.CurrentAmount.ShouldBe(25m); }
public async override Task <Response> BuyVoucher(BuyVoucherRequest request, ServerCallContext context) { var result = _studentService.BuyVoucher(new UTransit.Models.Requests.BuyVoucherRequest { IndexNumber = request.IndexNumber, VoucherId = request.VoucherId }); return(await Task.FromResult(new Response { Issuccessful = result.IsSucessful, Message = result.Message })); }
public IActionResult BuyVoucher([FromBody] BuyVoucherRequest request) { var result = _studentService.BuyVoucher(request); if (result.IsSucessful) { return(Ok(result)); } return(BadRequest(result)); }
public async Task WhenAVoucherIsBoughtTheCodeIsReturned() { var buyRequest = new BuyVoucherRequest(50m); using (var requestContent = new StringContent(JsonConvert.SerializeObject(buyRequest), Encoding.UTF8, "application/json")) { var buyResponse = await this.client.PostAsync("/api/vouchers/buy", requestContent); buyResponse.StatusCode.ShouldBe(HttpStatusCode.OK); var buyVoucherResponse = JsonConvert.DeserializeObject <BuyVoucherResponse>(await buyResponse.Content.ReadAsStringAsync()); buyVoucherResponse.VoucherCode.ShouldNotBeNullOrEmpty(); } }
public async Task <List <BuyVoucherResponse> > BuyVoucher(BuyVoucherRequest buyVoucher) { Url = Session.BaseUrl + BasePath.BuyVoucher; StringContent formBody = new StringContent(JsonConvert.SerializeObject(buyVoucher), Encoding.UTF8, "application/json"); var response = await Session.SEVClient.PostAsync(Url, formBody); if (response.IsSuccessStatusCode) { var str = await response.Content.ReadAsStringAsync(); return(JsonConvert.DeserializeObject <List <BuyVoucherResponse> >(str));; } return(null); }