public IHttpActionResult CreateRental(SaveRentalDto saveRentalDto) { if (!ModelState.IsValid) { return(BadRequest()); } var room = _unitOfWork.Rooms.GetRoom(saveRentalDto.RoomId); if (room == null) { return(NotFound()); } if (room.IsCurrentlyRented) { return(BadRequest("Room is already rented out")); } var tenant = _unitOfWork.Tenants.GetTenant(saveRentalDto.TenantId); if (tenant == null) { return(NotFound()); } var startDate = DateTimeExtensions.ConvertToDateTime(saveRentalDto.StartDate); var endDate = DateTimeExtensions.GetRentalEndDate(saveRentalDto, startDate); var rentalFromMap = Mapper.Map <SaveRentalDto, Rental>(saveRentalDto); var userName = User.Identity.Name; var newRental = new Rental(rentalFromMap.RoomId, rentalFromMap.TenantId, startDate, endDate, userName); room.SetOccupied(); _unitOfWork.Rentals.Add(newRental); _unitOfWork.Complete(); return(Ok()); }