// intentionally not using Automapper. public static BookingModel Map(this BookingRequestWebModel bookingR) { var bookingM = new BookingModel(); if (bookingR != null) { var utcnow = DateTime.UtcNow; bookingM.StartDateUtc = bookingR.StartDateUtc ?? utcnow; bookingM.EndDateUtc = bookingR.EndDateUtc ?? utcnow.AddHours(1); // add defaults bookingM.GarageName = bookingR.GarageName; bookingM.CarLicencePlate = bookingR.LicencePlate; } return(bookingM); }
// it should be FluentValidation or similiar library private bool ValidateRequest(BookingRequestWebModel bookingRequest, out string message) { if (bookingRequest == null) { message = "Value cannot be null"; return(false); } if (string.IsNullOrEmpty(bookingRequest.LicencePlate)) { message = "Licence plate cannot be null or empty"; return(false); } if (string.IsNullOrEmpty(bookingRequest.GarageName)) { message = "Garage name cannot be null or empty"; return(false); } message = string.Empty; return(true); }
[ProducesResponseType(StatusCodes.Status418ImATeapot)] // ;) should be 500 public async Task <IActionResult> PostAsync(BookingRequestWebModel bookingRequest) { if (ValidateRequest(bookingRequest, out string mess)) { return(BadRequest($"{nameof(bookingRequest)} {mess}")); } try { await _bookingProducer.SendRequest(bookingRequest.Map()); return(Accepted()); } catch (ArgumentNullException aex) { return(StatusCode(500)); // allways - 500 } catch (ArgumentException ae) { return(BadRequest(ae.Message)); } }
[ProducesResponseType(StatusCodes.Status418ImATeapot)] // ;) should be 500 public async Task <IActionResult> Post(BookingRequestWebModel bookingRequest) { if (ValidateRequest(bookingRequest, out string mess)) { return(BadRequest($"{nameof(bookingRequest)} {mess}")); } try { var serviceResponse = await _bookingService.PostNewBooking(bookingRequest.Map()); return(Ok(serviceResponse)); } catch (ArgumentNullException aex) { // better error handle! return(StatusCode(418)); // allways - 500 } catch (ArgumentException ae) { return(BadRequest(ae.Message)); } }