Tell us what’s happening:
Hello there, I wrote the variable SET_TO_TRUE_RESULT as the test wanted but It doesnt accept it. I resetted it closed everything started again but still cant pass it.
I can see the rental date_returned updates in else statement but if I write echo there I cant see it.
It is below the comment
Your code so far
#!/bin/bash
PSQL="psql -X --username=freecodecamp --dbname=bikes --tuples-only -c"
echo -e "\n~~~~~ Bike Rental Shop ~~~~~\n"
MAIN_MENU() {
if [[ $1 ]]
then
echo -e "\n$1"
fi
echo -e "\nHow may I help you?"
echo -e "\n1. Rent a bike\n2. Return a bike\n3. Exit\n"
read MAIN_MENU_SELECTION
}
MAIN_MENU
#$($PSQL "")
RENT_MENU() {
#get available bikes
AVAILABLE_BIKES=$($PSQL "SELECT bike_id, type, size FROM bikes WHERE available=true ORDER BY bike_id")
#if no bikes available
if [[ -z $AVAILABLE_BIKES ]]
then
#send to main menu
MAIN_MENU "\nSorry, we don't have any bikes available right now."
else
#display available bikes
echo -e "\nHere are the bikes we have available:"
echo "$AVAILABLE_BIKES" | while read BIKE_ID BAR TYPE BAR SIZE
do
echo "$BIKE_ID) $SIZE\" $TYPE Bike"
done
#ask for bike to rent
echo -e "\nWhich one would you like to rent?"
read BIKE_ID_TO_RENT
#if input is not a number
if [[ ! $BIKE_ID_TO_RENT =~ ^[0-9]+$ ]]
then
#send to main menu
MAIN_MENU "That is not a valid bike number."
else
#get bike availability
BIKE_AVAILABILITY=$($PSQL "SELECT available FROM bikes WHERE bike_id=$BIKE_ID_TO_RENT AND available=true")
#if not available
if [[ -z $BIKE_AVAILABILITY ]]
then
#send to main menu
MAIN_MENU "That bike is not available."
else
#get customer info
echo -e "\nWhat's your phone number?"
read PHONE_NUMBER
CUSTOMER_NAME=$($PSQL "SELECT name FROM customers WHERE phone='$PHONE_NUMBER'")
#if customer doesn't exist
if [[ -z $CUSTOMER_NAME ]]
then
#get new customer name
echo -e "\nWhat's your name?"
read CUSTOMER_NAME
#insert new customer
INSERT_CUSTOMER_RESULT=$($PSQL "INSERT INTO customers(phone,name) VALUES('$PHONE_NUMBER','$CUSTOMER_NAME')")
fi
# get customer_id
CUSTOMER_ID=$($PSQL "SELECT customer_id FROM customers WHERE phone='$PHONE_NUMBER'")
# insert bike rental
INSERT_RENTAL_RESULT=$($PSQL "INSERT INTO rentals(customer_id,bike_id) VALUES('$CUSTOMER_ID',$BIKE_ID_TO_RENT)")
# set bike availability to false
SET_TO_FALSE_RESULT=$($PSQL "UPDATE bikes SET available=false WHERE bike_id=$BIKE_ID_TO_RENT")
# get bike info
BIKE_INFO=$($PSQL "SELECT size,type FROM bikes WHERE bike_id='$BIKE_ID_TO_RENT'")
BIKE_INFO_FORMATTED=$(echo $BIKE_INFO | sed 's/ |/"/')
# send to main menu
MAIN_MENU "I have put you down for the $BIKE_INFO_FORMATTED Bike, $(echo $CUSTOMER_NAME | sed -r 's/^ *| *$//g')."
fi
fi
fi
}
RETURN_MENU() {
# get customer info
echo -e "\nWhat's your phone number?"
read PHONE_NUMBER
CUSTOMER_ID=$($PSQL "SELECT customer_id FROM customers WHERE phone='$PHONE_NUMBER'")
# if not found
if [[ -z $CUSTOMER_ID ]]
then
# send to main menu
MAIN_MENU "I could not find a record for that phone number."
else
# get customer's rentals
CUSTOMER_RENTALS=$($PSQL "SELECT bike_id,type,size FROM bikes INNER JOIN rentals USING(bike_id) INNER JOIN customers USING (customer_id) WHERE phone='$PHONE_NUMBER' AND date_returned IS NULL ORDER BY bike_id")
# if no rentals
if [[ -z $CUSTOMER_RENTALS ]]
then
# send to main menu
MAIN_MENU "You do not have any bikes rented."
else
# display rented bikes
echo -e "\nHere are your rentals:"
echo "$CUSTOMER_RENTALS" | while read BIKE_ID BAR TYPE BAR SIZE
do
echo "$BIKE_ID) $SIZE\" $TYPE Bike"
done
# ask for bike to return
echo -e "\nWhich one would you like to return?"
read BIKE_ID_TO_RETURN
# if not a number
if [[ ! $BIKE_ID_TO_RETURN =~ ^[0-9]+$ ]]
then
# send to main menu
MAIN_MENU "That is not a valid bike number."
else
# check if input is rented
RENTAL_ID=$($PSQL "select rental_id from rentals inner join customers using(customer_id) where phone='$PHONE_NUMBER' and date_returned is null and bike_id=$BIKE_ID_TO_RETURN")
# if input not rented
if [[ -z $RENTAL_ID ]]
then
# send to main menu
MAIN_MENU "You do not have that bike rented."
else
# update date_returned
RETURN_BIKE_RESULT=$($PSQL "UPDATE rentals SET date_returned=NOW() WHERE rental_id=$RENTAL_ID")
#set bike availability to true
SET_TO_TRUE_RESULT=$($PSQL "UPDATE bikes SET available = true WHERE bike_id = $BIKE_ID_TO_RETURN")
# send to main menu
fi
fi
fi
fi
}
EXIT() {
echo -e "\nThank you for stopping in.\n"
}
case $MAIN_MENU_SELECTION in
1) RENT_MENU;;
2) RETURN_MENU;;
3) EXIT;;
*) MAIN_MENU "Please enter a valid option."
;;
esac
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
Challenge: Learn Bash and SQL by Building a Bike Rental Shop - Build a Bike Rental Shop
Link to the challenge: