From a3f322eb27a791be2627427fc91d5e9bcbeab552 Mon Sep 17 00:00:00 2001 From: prince rusweka Date: Fri, 2 May 2025 05:10:58 -0400 Subject: [PATCH] adding more pages --- backend/__pycache__/utils.cpython-311.pyc | Bin 1269 -> 1517 bytes backend/main.py | 51 ++++++++ backend/migrate_add_saved_pets.py | 19 +++ backend/utils.py | 8 ++ frontend/src/App.tsx | 7 ++ frontend/src/components/NavBar.tsx | 1 + frontend/src/pages/AdoptionPage.tsx | 140 ++++++++++++++++++++++ frontend/src/pages/MyList.tsx | 82 +++++++++++++ frontend/src/pages/PetDetails.tsx | 120 +++++++++++++++++++ frontend/src/pages/PetProfile.tsx | 18 ++- 10 files changed, 444 insertions(+), 2 deletions(-) create mode 100644 backend/migrate_add_saved_pets.py create mode 100644 frontend/src/pages/AdoptionPage.tsx create mode 100644 frontend/src/pages/MyList.tsx create mode 100644 frontend/src/pages/PetDetails.tsx diff --git a/backend/__pycache__/utils.cpython-311.pyc b/backend/__pycache__/utils.cpython-311.pyc index 566dd7b172a7c4c954131c048fe54ba1f6af0ebe..93954d7523abff72ae9ecc536cdf9d2abfa40bc7 100644 GIT binary patch delta 229 zcmey$`Ieh+IWI340}!~hh-3t^Oyu)pyfQJiY2sE1M&^m$*405ePF;Oia;I%06(=n$p8QV delta 85 zcmaFM{gsn%IWI340}$M)=gFvJp2+9NxN2f-(_~IY4OZr022GaDW{gXiCU>(mF-A@1 WWA&R{$r>Re&nWbP0h1^K83X{)4ivKh diff --git a/backend/main.py b/backend/main.py index b88b3f9..653856d 100644 --- a/backend/main.py +++ b/backend/main.py @@ -183,7 +183,58 @@ def add_pet(): except sqlite3.Error as e: print(f"An error occurred: {e}") return jsonify({"error": "Internal Server Error"}), 500 + +@app.route("/api/saved_pets", methods=["POST"]) +def save_pet(): + try: + data = request.get_json() + pet_id = data.get("pet_id") + if not pet_id: + return jsonify({"error": "Missing pet_id"}), 400 + + conn = get_db() + cursor = conn.cursor() + cursor.execute("INSERT INTO saved_pets (pet_id) VALUES (?)", (pet_id,)) + conn.commit() + conn.close() + return jsonify({"message": "Pet saved successfully!"}), 201 + except sqlite3.Error as e: + print(f"An error occurred: {e}") + return jsonify({"error": "Internal Server Error"}), 500 + + +@app.route("/api/saved_pets", methods=["GET"]) +def get_saved_pets(): + try: + conn = get_db() + cursor = conn.cursor() + cursor.execute(""" + SELECT animals.* + FROM animals + INNER JOIN saved_pets ON animals.id = saved_pets.pet_id + """) + pets = cursor.fetchall() + pet_list = [dict(pet) for pet in pets] + conn.close() + return jsonify(pet_list), 200 + except sqlite3.Error as e: + print(f"An error occurred: {e}") + return jsonify({"error": "Internal Server Error"}), 500 + + +@app.route("/api/saved_pets/", methods=["DELETE"]) +def remove_saved_pet(pet_id): + try: + conn = get_db() + cursor = conn.cursor() + cursor.execute("DELETE FROM saved_pets WHERE pet_id = ?", (pet_id,)) + conn.commit() + conn.close() + return jsonify({"message": "Pet removed from saved list"}), 200 + except sqlite3.Error as e: + print(f"An error occurred: {e}") + return jsonify({"error": "Internal Server Error"}), 500 def before_first_request(): """Run once before the first request to initialize the database.""" diff --git a/backend/migrate_add_saved_pets.py b/backend/migrate_add_saved_pets.py new file mode 100644 index 0000000..3ecf2f0 --- /dev/null +++ b/backend/migrate_add_saved_pets.py @@ -0,0 +1,19 @@ +import sqlite3 + +# Connect to the existing database +conn = sqlite3.connect("animal_shelter.db") +cursor = conn.cursor() + +# Create the saved_pets table if it doesn't exist +cursor.execute(""" + CREATE TABLE IF NOT EXISTS saved_pets ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + pet_id INTEGER NOT NULL, + FOREIGN KEY(pet_id) REFERENCES animals(id) + ) +""") + +conn.commit() +conn.close() + +print(" saved_pets table created (or already exists).") diff --git a/backend/utils.py b/backend/utils.py index 42204ef..f5c697b 100644 --- a/backend/utils.py +++ b/backend/utils.py @@ -33,4 +33,12 @@ def create_tables(conn): """ ) + cursor.execute(""" + CREATE TABLE IF NOT EXISTS saved_pets ( + id INTEGER PRIMARY KEY, + pet_id INTEGER NOT NULL, + FOREIGN KEY(pet_id) REFERENCES animals(id) + ) + """) + conn.commit() diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 555c26e..5ea889f 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -5,6 +5,10 @@ import Search from './pages/Search'; import MoreInfo from "./pages/MoreInfo"; import PetProfile from './pages/PetProfile'; import Profile from './pages/Profile'; +import PetDetails from "./pages/PetDetails"; +import AdoptionPage from "./pages/AdoptionPage"; +import MyList from './pages/MyList'; + function App() { return ( @@ -14,8 +18,11 @@ function App() { } /> } /> } /> + } /> } /> } /> + } /> + } /> ); diff --git a/frontend/src/components/NavBar.tsx b/frontend/src/components/NavBar.tsx index 454b976..1ae7d6b 100644 --- a/frontend/src/components/NavBar.tsx +++ b/frontend/src/components/NavBar.tsx @@ -14,6 +14,7 @@ export default function NavBar() { Pet Profile + My List ); } \ No newline at end of file diff --git a/frontend/src/pages/AdoptionPage.tsx b/frontend/src/pages/AdoptionPage.tsx new file mode 100644 index 0000000..5df4ade --- /dev/null +++ b/frontend/src/pages/AdoptionPage.tsx @@ -0,0 +1,140 @@ +import { useState, CSSProperties } from "react"; +import { useParams } from "react-router-dom"; +import instagramLogo from "../assets/instagram_logo.png"; +import facebookLogo from "../assets/facebook_logo.png"; +import twitterLogo from "../assets/twitter_logo.png"; +import youtubeLogo from "../assets/youtube_logo.png"; +import menuLogo from "../assets/menu_logo.png"; + +export default function AdoptionForm() { + const { name } = useParams<{ name: string }>(); + const [responses, setResponses] = useState({ + care: "", + reason: "", + home: "", + }); + + return ( +
+
+

Adoption Application Form for {name}

+ + + setResponses({ ...responses, care: e.target.value })} + /> + + + setResponses({ ...responses, reason: e.target.value })} + /> + + +