Number Guessing Game won't pass the tests

I have been working on the number guessing game project for a couple of days now and, despite my script working in all of my tests, many of the tasks still won’t pass. I’ve tried many different ways and check many other posts of other users who struggled with this project, but I could not find an answer. Any help is appreciated.

Here is my script:

#!/bin/bash

PSQL="psql --username=freecodecamp --dbname=number_guess -t --no-align -c"

NUMBER=$(( RANDOM % 1000 + 1))

MAIN() {
  echo -e "\nEnter your username:\n"
  read USERNAME

  USER_ID=$($PSQL "SELECT user_id FROM users WHERE name = '$USERNAME'")
  if [[ -z $USER_ID ]]
  then
    INSERT_NEW_USERNAME=$($PSQL "INSERT INTO users(name) VALUES('$USERNAME')")
    USER_ID=$($PSQL "SELECT user_id FROM users WHERE name = '$USERNAME'")
  fi

  NUMBER_OF_GAMES=$($PSQL "SELECT COUNT(user_id) FROM games WHERE user_id = $USER_ID AND finished = TRUE")
  BEST_GAME=$($PSQL "SELECT number_of_guesses FROM games WHERE user_id = $USER_ID AND finished = TRUE ORDER BY number_of_guesses LIMIT 1")
  if [ $NUMBER_OF_GAMES -eq 0 ]
  then
    echo -e "\nWelcome, $USERNAME! It looks like this is your first time here."
  else
    echo -e "\nWelcome back, $USERNAME! You have played $NUMBER_OF_GAMES games, and your best game took $BEST_GAME guesses."
  fi

  INSERT_GAME=$($PSQL "INSERT INTO games(user_id, number, finished) VALUES($USER_ID, $NUMBER, FALSE)")
  GAME_ID=$($PSQL "SELECT game_id FROM games ORDER BY game_id DESC LIMIT 1")
  GUESSING
}

GUESSING() {
  echo -e "\nGuess the secret number between 1 and 1000:\n"
  read GUESS

  NUMBER_OF_GUESSES=0

  while true
  do
    if ! [[ $GUESS =~ ^[0-9]+$ ]]
    then
      echo -e "\nThat is not an integer, guess again:\n"
    else
      ((NUMBER_OF_GUESSES++))
      if [ $GUESS -gt $NUMBER ]
      then
        INSERT_INCORRECT=$($PSQL "INSERT INTO guesses(user_id, guess, correct, game_id) VALUES($USER_ID, $GUESS, FALSE, $GAME_ID)")
        echo -e "\nIt's lower than that, guess again:\n"
      elif [ $GUESS -lt $NUMBER ]
      then
        INSERT_INCORRECT=$($PSQL "INSERT INTO guesses(user_id, guess, correct, game_id) VALUES($USER_ID, $GUESS, FALSE, $GAME_ID)")
        echo -e "\nIt's higher than that, guess again:\n"
      else
        INSERT_CORRECT=$($PSQL "INSERT INTO guesses(user_id, guess, correct, game_id) VALUES($USER_ID, $GUESS, TRUE, $GAME_ID)")
        UPDATE_GAME=$($PSQL "UPDATE games SET finished = TRUE, number_of_guesses = $NUMBER_OF_GUESSES WHERE game_id = $GAME_ID")
        echo -e "\nYou guessed it in $NUMBER_OF_GUESSES tries. The secret number was $NUMBER. Nice job!\n"
        break
      fi
    fi
    read GUESS
  done
}

MAIN

And this is the sql dump:

--
-- PostgreSQL database dump
--

-- Dumped from database version 12.9 (Ubuntu 12.9-2.pgdg20.04+1)
-- Dumped by pg_dump version 12.9 (Ubuntu 12.9-2.pgdg20.04+1)

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;

DROP DATABASE number_guess;
--
-- Name: number_guess; Type: DATABASE; Schema: -; Owner: freecodecamp
--

CREATE DATABASE number_guess WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'C.UTF-8' LC_CTYPE = 'C.UTF-8';


ALTER DATABASE number_guess OWNER TO freecodecamp;

\connect number_guess

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;

SET default_tablespace = '';

SET default_table_access_method = heap;

--
-- Name: games; Type: TABLE; Schema: public; Owner: freecodecamp
--

CREATE TABLE public.games (
    game_id integer NOT NULL,
    number_of_guesses integer,
    user_id integer NOT NULL,
    finished boolean
);


ALTER TABLE public.games OWNER TO freecodecamp;

--
-- Name: games_game_id_seq; Type: SEQUENCE; Schema: public; Owner: freecodecamp
--

CREATE SEQUENCE public.games_game_id_seq
    AS integer
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


ALTER TABLE public.games_game_id_seq OWNER TO freecodecamp;

--
-- Name: games_game_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: freecodecamp
--

ALTER SEQUENCE public.games_game_id_seq OWNED BY public.games.game_id;


--
-- Name: guesses; Type: TABLE; Schema: public; Owner: freecodecamp
--

CREATE TABLE public.guesses (
    user_id integer NOT NULL,
    guess integer NOT NULL,
    correct boolean NOT NULL,
    guess_id integer NOT NULL,
    game_id integer NOT NULL
);


ALTER TABLE public.guesses OWNER TO freecodecamp;

--
-- Name: guesses_guess_id_seq; Type: SEQUENCE; Schema: public; Owner: freecodecamp
--

CREATE SEQUENCE public.guesses_guess_id_seq
    AS integer
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


ALTER TABLE public.guesses_guess_id_seq OWNER TO freecodecamp;

--
-- Name: guesses_guess_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: freecodecamp
--

ALTER SEQUENCE public.guesses_guess_id_seq OWNED BY public.guesses.guess_id;


--
-- Name: users; Type: TABLE; Schema: public; Owner: freecodecamp
--

CREATE TABLE public.users (
    name character varying(25) NOT NULL,
    user_id integer NOT NULL
);


ALTER TABLE public.users OWNER TO freecodecamp;

--
-- Name: users_user_id_seq; Type: SEQUENCE; Schema: public; Owner: freecodecamp
--

CREATE SEQUENCE public.users_user_id_seq
    AS integer
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;


ALTER TABLE public.users_user_id_seq OWNER TO freecodecamp;

--
-- Name: users_user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: freecodecamp
--

ALTER SEQUENCE public.users_user_id_seq OWNED BY public.users.user_id;


--
-- Name: games game_id; Type: DEFAULT; Schema: public; Owner: freecodecamp
--

ALTER TABLE ONLY public.games ALTER COLUMN game_id SET DEFAULT nextval('public.games_game_id_seq'::regclass);


--
-- Name: guesses guess_id; Type: DEFAULT; Schema: public; Owner: freecodecamp
--

ALTER TABLE ONLY public.guesses ALTER COLUMN guess_id SET DEFAULT nextval('public.guesses_guess_id_seq'::regclass);


--
-- Name: users user_id; Type: DEFAULT; Schema: public; Owner: freecodecamp
--

ALTER TABLE ONLY public.users ALTER COLUMN user_id SET DEFAULT nextval('public.users_user_id_seq'::regclass);


--
-- Data for Name: games; Type: TABLE DATA; Schema: public; Owner: freecodecamp
--

INSERT INTO public.games VALUES (549, 9, 197, true);
INSERT INTO public.games VALUES (550, 10, 197, true);
INSERT INTO public.games VALUES (551, NULL, 197, false);
INSERT INTO public.games VALUES (552, NULL, 198, false);
INSERT INTO public.games VALUES (553, NULL, 198, false);
INSERT INTO public.games VALUES (554, NULL, 199, false);
INSERT INTO public.games VALUES (555, NULL, 199, false);
INSERT INTO public.games VALUES (556, NULL, 198, false);
INSERT INTO public.games VALUES (557, NULL, 198, false);
INSERT INTO public.games VALUES (558, NULL, 198, false);


--
-- Data for Name: guesses; Type: TABLE DATA; Schema: public; Owner: freecodecamp
--

INSERT INTO public.guesses VALUES (197, 500, false, 4995, 549);
INSERT INTO public.guesses VALUES (197, 750, false, 4996, 549);
INSERT INTO public.guesses VALUES (197, 666, false, 4997, 549);
INSERT INTO public.guesses VALUES (197, 700, false, 4998, 549);
INSERT INTO public.guesses VALUES (197, 690, false, 4999, 549);
INSERT INTO public.guesses VALUES (197, 680, false, 5000, 549);
INSERT INTO public.guesses VALUES (197, 670, false, 5001, 549);
INSERT INTO public.guesses VALUES (197, 668, false, 5002, 549);
INSERT INTO public.guesses VALUES (197, 667, true, 5003, 549);
INSERT INTO public.guesses VALUES (197, 500, false, 5004, 550);
INSERT INTO public.guesses VALUES (197, 750, false, 5005, 550);
INSERT INTO public.guesses VALUES (197, 875, false, 5006, 550);
INSERT INTO public.guesses VALUES (197, 933, false, 5007, 550);
INSERT INTO public.guesses VALUES (197, 902, false, 5008, 550);
INSERT INTO public.guesses VALUES (197, 915, false, 5009, 550);
INSERT INTO public.guesses VALUES (197, 925, false, 5010, 550);
INSERT INTO public.guesses VALUES (197, 920, false, 5011, 550);
INSERT INTO public.guesses VALUES (197, 922, false, 5012, 550);
INSERT INTO public.guesses VALUES (197, 921, true, 5013, 550);
INSERT INTO public.guesses VALUES (198, 0, false, 5014, 552);
INSERT INTO public.guesses VALUES (198, 1, false, 5015, 552);
INSERT INTO public.guesses VALUES (198, 2, false, 5016, 552);
INSERT INTO public.guesses VALUES (198, 3, false, 5017, 552);
INSERT INTO public.guesses VALUES (198, 4, false, 5018, 552);
INSERT INTO public.guesses VALUES (198, 5, false, 5019, 552);
INSERT INTO public.guesses VALUES (198, 6, false, 5020, 552);
INSERT INTO public.guesses VALUES (198, 7, false, 5021, 552);
INSERT INTO public.guesses VALUES (198, 8, false, 5022, 552);
INSERT INTO public.guesses VALUES (198, 9, false, 5023, 552);
INSERT INTO public.guesses VALUES (198, 10, false, 5024, 552);
INSERT INTO public.guesses VALUES (198, 11, false, 5025, 552);
INSERT INTO public.guesses VALUES (198, 12, false, 5026, 552);
INSERT INTO public.guesses VALUES (198, 13, false, 5027, 552);
INSERT INTO public.guesses VALUES (198, 14, false, 5028, 552);
INSERT INTO public.guesses VALUES (198, 15, false, 5029, 552);
INSERT INTO public.guesses VALUES (198, 16, false, 5030, 552);
INSERT INTO public.guesses VALUES (198, 0, false, 5031, 553);
INSERT INTO public.guesses VALUES (198, 1, false, 5032, 553);
INSERT INTO public.guesses VALUES (198, 2, false, 5033, 553);
INSERT INTO public.guesses VALUES (198, 3, false, 5034, 553);
INSERT INTO public.guesses VALUES (198, 4, false, 5035, 553);
INSERT INTO public.guesses VALUES (198, 5, false, 5036, 553);
INSERT INTO public.guesses VALUES (198, 6, false, 5037, 553);
INSERT INTO public.guesses VALUES (198, 7, false, 5038, 553);
INSERT INTO public.guesses VALUES (198, 8, false, 5039, 553);
INSERT INTO public.guesses VALUES (198, 9, false, 5040, 553);
INSERT INTO public.guesses VALUES (198, 10, false, 5041, 553);
INSERT INTO public.guesses VALUES (198, 11, false, 5042, 553);
INSERT INTO public.guesses VALUES (198, 12, false, 5043, 553);
INSERT INTO public.guesses VALUES (198, 13, false, 5044, 553);
INSERT INTO public.guesses VALUES (198, 14, false, 5045, 553);
INSERT INTO public.guesses VALUES (198, 15, false, 5046, 553);
INSERT INTO public.guesses VALUES (198, 16, false, 5047, 553);
INSERT INTO public.guesses VALUES (199, 0, false, 5048, 554);
INSERT INTO public.guesses VALUES (199, 1, false, 5049, 554);
INSERT INTO public.guesses VALUES (199, 2, false, 5050, 554);
INSERT INTO public.guesses VALUES (199, 3, false, 5051, 554);
INSERT INTO public.guesses VALUES (199, 4, false, 5052, 554);
INSERT INTO public.guesses VALUES (199, 5, false, 5053, 554);
INSERT INTO public.guesses VALUES (199, 6, false, 5054, 554);
INSERT INTO public.guesses VALUES (199, 7, false, 5055, 554);
INSERT INTO public.guesses VALUES (199, 8, false, 5056, 554);
INSERT INTO public.guesses VALUES (199, 9, false, 5057, 554);
INSERT INTO public.guesses VALUES (199, 10, false, 5058, 554);
INSERT INTO public.guesses VALUES (199, 11, false, 5059, 554);
INSERT INTO public.guesses VALUES (199, 12, false, 5060, 554);
INSERT INTO public.guesses VALUES (199, 13, false, 5061, 554);
INSERT INTO public.guesses VALUES (199, 14, false, 5062, 554);
INSERT INTO public.guesses VALUES (199, 15, false, 5063, 554);
INSERT INTO public.guesses VALUES (199, 16, false, 5064, 554);
INSERT INTO public.guesses VALUES (199, 0, false, 5065, 555);
INSERT INTO public.guesses VALUES (199, 1, false, 5066, 555);
INSERT INTO public.guesses VALUES (199, 2, false, 5067, 555);
INSERT INTO public.guesses VALUES (199, 3, false, 5068, 555);
INSERT INTO public.guesses VALUES (199, 4, false, 5069, 555);
INSERT INTO public.guesses VALUES (199, 5, false, 5070, 555);
INSERT INTO public.guesses VALUES (199, 6, false, 5071, 555);
INSERT INTO public.guesses VALUES (199, 7, false, 5072, 555);
INSERT INTO public.guesses VALUES (199, 8, false, 5073, 555);
INSERT INTO public.guesses VALUES (199, 9, false, 5074, 555);
INSERT INTO public.guesses VALUES (199, 10, false, 5075, 555);
INSERT INTO public.guesses VALUES (199, 11, false, 5076, 555);
INSERT INTO public.guesses VALUES (199, 12, false, 5077, 555);
INSERT INTO public.guesses VALUES (199, 13, false, 5078, 555);
INSERT INTO public.guesses VALUES (199, 14, false, 5079, 555);
INSERT INTO public.guesses VALUES (199, 15, false, 5080, 555);
INSERT INTO public.guesses VALUES (199, 16, false, 5081, 555);
INSERT INTO public.guesses VALUES (198, 1, false, 5082, 556);
INSERT INTO public.guesses VALUES (198, 1000, false, 5083, 556);
INSERT INTO public.guesses VALUES (198, 0, false, 5084, 556);
INSERT INTO public.guesses VALUES (198, 1, false, 5085, 556);
INSERT INTO public.guesses VALUES (198, 2, false, 5086, 556);
INSERT INTO public.guesses VALUES (198, 3, false, 5087, 556);
INSERT INTO public.guesses VALUES (198, 4, false, 5088, 556);
INSERT INTO public.guesses VALUES (198, 5, false, 5089, 556);
INSERT INTO public.guesses VALUES (198, 6, false, 5090, 556);
INSERT INTO public.guesses VALUES (198, 7, false, 5091, 556);
INSERT INTO public.guesses VALUES (198, 8, false, 5092, 556);
INSERT INTO public.guesses VALUES (198, 9, false, 5093, 556);
INSERT INTO public.guesses VALUES (198, 10, false, 5094, 556);
INSERT INTO public.guesses VALUES (198, 11, false, 5095, 556);
INSERT INTO public.guesses VALUES (198, 12, false, 5096, 556);
INSERT INTO public.guesses VALUES (198, 13, false, 5097, 556);
INSERT INTO public.guesses VALUES (198, 14, false, 5098, 556);
INSERT INTO public.guesses VALUES (198, 0, false, 5099, 557);
INSERT INTO public.guesses VALUES (198, 1, false, 5100, 557);
INSERT INTO public.guesses VALUES (198, 2, false, 5101, 557);
INSERT INTO public.guesses VALUES (198, 3, false, 5102, 557);
INSERT INTO public.guesses VALUES (198, 4, false, 5103, 557);
INSERT INTO public.guesses VALUES (198, 5, false, 5104, 557);
INSERT INTO public.guesses VALUES (198, 6, false, 5105, 557);
INSERT INTO public.guesses VALUES (198, 7, false, 5106, 557);
INSERT INTO public.guesses VALUES (198, 8, false, 5107, 557);
INSERT INTO public.guesses VALUES (198, 9, false, 5108, 557);
INSERT INTO public.guesses VALUES (198, 10, false, 5109, 557);
INSERT INTO public.guesses VALUES (198, 11, false, 5110, 557);
INSERT INTO public.guesses VALUES (198, 12, false, 5111, 557);
INSERT INTO public.guesses VALUES (198, 13, false, 5112, 557);
INSERT INTO public.guesses VALUES (198, 14, false, 5113, 557);
INSERT INTO public.guesses VALUES (198, 15, false, 5114, 557);
INSERT INTO public.guesses VALUES (198, 16, false, 5115, 557);
INSERT INTO public.guesses VALUES (198, 0, false, 5116, 558);
INSERT INTO public.guesses VALUES (198, 1, false, 5117, 558);
INSERT INTO public.guesses VALUES (198, 2, false, 5118, 558);
INSERT INTO public.guesses VALUES (198, 3, false, 5119, 558);
INSERT INTO public.guesses VALUES (198, 4, false, 5120, 558);
INSERT INTO public.guesses VALUES (198, 5, false, 5121, 558);
INSERT INTO public.guesses VALUES (198, 6, false, 5122, 558);
INSERT INTO public.guesses VALUES (198, 7, false, 5123, 558);
INSERT INTO public.guesses VALUES (198, 8, false, 5124, 558);
INSERT INTO public.guesses VALUES (198, 9, false, 5125, 558);
INSERT INTO public.guesses VALUES (198, 10, false, 5126, 558);
INSERT INTO public.guesses VALUES (198, 11, false, 5127, 558);
INSERT INTO public.guesses VALUES (198, 12, false, 5128, 558);
INSERT INTO public.guesses VALUES (198, 13, false, 5129, 558);
INSERT INTO public.guesses VALUES (198, 14, false, 5130, 558);
INSERT INTO public.guesses VALUES (198, 15, false, 5131, 558);
INSERT INTO public.guesses VALUES (198, 16, false, 5132, 558);


--
-- Data for Name: users; Type: TABLE DATA; Schema: public; Owner: freecodecamp
--

INSERT INTO public.users VALUES ('Vitor', 197);
INSERT INTO public.users VALUES ('user_1675566799546', 198);
INSERT INTO public.users VALUES ('user_1675566799545', 199);


--
-- Name: games_game_id_seq; Type: SEQUENCE SET; Schema: public; Owner: freecodecamp
--

SELECT pg_catalog.setval('public.games_game_id_seq', 558, true);


--
-- Name: guesses_guess_id_seq; Type: SEQUENCE SET; Schema: public; Owner: freecodecamp
--

SELECT pg_catalog.setval('public.guesses_guess_id_seq', 5132, true);


--
-- Name: users_user_id_seq; Type: SEQUENCE SET; Schema: public; Owner: freecodecamp
--

SELECT pg_catalog.setval('public.users_user_id_seq', 199, true);


--
-- Name: games games_pkey; Type: CONSTRAINT; Schema: public; Owner: freecodecamp
--

ALTER TABLE ONLY public.games
    ADD CONSTRAINT games_pkey PRIMARY KEY (game_id);


--
-- Name: guesses guesses_pkey; Type: CONSTRAINT; Schema: public; Owner: freecodecamp
--

ALTER TABLE ONLY public.guesses
    ADD CONSTRAINT guesses_pkey PRIMARY KEY (guess_id);


--
-- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: freecodecamp
--

ALTER TABLE ONLY public.users
    ADD CONSTRAINT users_pkey PRIMARY KEY (user_id);


--
-- Name: games games_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: freecodecamp
--

ALTER TABLE ONLY public.games
    ADD CONSTRAINT games_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(user_id);


--
-- Name: guesses guesses_game_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: freecodecamp
--

ALTER TABLE ONLY public.guesses
    ADD CONSTRAINT guesses_game_id_fkey FOREIGN KEY (game_id) REFERENCES public.games(game_id);


--
-- Name: guesses guesses_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: freecodecamp
--

ALTER TABLE ONLY public.guesses
    ADD CONSTRAINT guesses_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(user_id);


--
-- PostgreSQL database dump complete
--


Which tests are failing for you?

i second the question: which tests have failed.
Also do not save the bad guesses in the database. You should skip this and just store the final guess count but only if the guess count is smaller than the one you stored for that user.

that is if i’m playing for the first time and I guess 3 times and win, then store 3.
but if I’m playing again and I guess in 5 tries, then don’t store that.