diff --git a/backend/__pycache__/app.cpython-310.pyc b/backend/__pycache__/app.cpython-310.pyc
new file mode 100644
index 0000000..7ce4dda
Binary files /dev/null and b/backend/__pycache__/app.cpython-310.pyc differ
diff --git a/backend/__pycache__/database.cpython-310.pyc b/backend/__pycache__/database.cpython-310.pyc
new file mode 100644
index 0000000..f6cf2c9
Binary files /dev/null and b/backend/__pycache__/database.cpython-310.pyc differ
diff --git a/backend/__pycache__/main.cpython-310.pyc b/backend/__pycache__/main.cpython-310.pyc
new file mode 100644
index 0000000..952271e
Binary files /dev/null and b/backend/__pycache__/main.cpython-310.pyc differ
diff --git a/backend/__pycache__/models.cpython-310.pyc b/backend/__pycache__/models.cpython-310.pyc
new file mode 100644
index 0000000..11923e3
Binary files /dev/null and b/backend/__pycache__/models.cpython-310.pyc differ
diff --git a/backend/app.py b/backend/app.py
new file mode 100644
index 0000000..6b32349
--- /dev/null
+++ b/backend/app.py
@@ -0,0 +1,24 @@
+from flask import Flask, request, jsonify
+
+app = Flask(__name__)
+
+# This will store our integer value
+current_value = 0
+
+@app.route('/set_value', methods=['POST'])
+def set_value():
+ global current_value
+ value = request.json.get('value')
+
+ if isinstance(value, int):
+ current_value = value
+ return jsonify({"message": "Value set successfully"}), 200
+ else:
+ return jsonify({"error": "Invalid input, please send an integer"}), 400
+
+@app.route('/get_value', methods=['GET'])
+def get_value():
+ return jsonify({"value": current_value})
+
+if __name__ == '__main__':
+ app.run(debug=True,host='0.0.0.0')
diff --git a/backend/instance/points.db b/backend/instance/points.db
new file mode 100644
index 0000000..5399e28
Binary files /dev/null and b/backend/instance/points.db differ
diff --git a/backend/main.py b/backend/main.py
index f8ae347..d63c2ab 100644
--- a/backend/main.py
+++ b/backend/main.py
@@ -1,30 +1,33 @@
from fastapi import FastAPI, HTTPException, Depends
-from typing import Annotated, List
+from typing import List
from sqlalchemy.orm import Session
from pydantic import BaseModel
from database import SessionLocal, engine
-import uvicorn
import models
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
origins = [
- 'http://localhost:3000'
+ "http://localhost:3000", # Add your React Native app's origin
+ "exp://127.0.0.1:19000", # Expo Go development client
+ "exp://localhost:19000", # Expo Go development client
+ "exp://10.13.182.154:8081", # Replace with your Expo Go app's ID
]
+
app.add_middleware(
CORSMiddleware,
- allow_origins = origins,
- allow_credentials = True,
+ allow_origins=origins,
+ allow_credentials=True,
allow_methods=['*'],
allow_headers=['*']
)
class PointsBase(BaseModel):
- name:str
- UCID:str
- hashed_password:str
+ name: str
+ UCID: str
+ hashed_password: str
points: int
class PointsModel(PointsBase):
@@ -33,7 +36,6 @@ class PointsModel(PointsBase):
class Config:
from_attributes = True
-
def get_db():
db = SessionLocal()
try:
@@ -41,26 +43,32 @@ def get_db():
finally:
db.close()
+db_dependency = Depends(get_db)
-db_dependency = Annotated[Session, Depends(get_db)]
models.Base.metadata.create_all(bind=engine)
-@app.get("/")
-def read_root():
- return {"message": "Hello, FastAPI!"}
+def sqlalchemy_model_to_dict(model):
+ return {column.name: getattr(model, column.name) for column in model.__table__.columns}
@app.post("/points/", response_model=PointsModel)
-async def create_point(point: PointsBase, db: db_dependency):
- db_point = models.Points(**point.model_dump())
+async def create_point(point: PointsBase, db: Session = db_dependency):
+ point_dict = point.dict()
+ db_point = models.Points(**point_dict)
db.add(db_point)
db.commit()
db.refresh(db_point)
- return db_point
+ # Convert the SQLAlchemy model instance to a dictionary
+ db_point_dict = sqlalchemy_model_to_dict(db_point)
+ return db_point_dict
+
+@app.get("/points/by-min-score/", response_model=List[PointsModel])
+async def read_points_by_min_score(db: Session = db_dependency, min_score: int = 0):
+ points = db.query(models.Points).filter(models.Points.points >= min_score).all()
+ return [sqlalchemy_model_to_dict(point) for point in points]
+
+@app.get("/points/top-ten/", response_model=List[PointsModel])
+async def read_top_ten_points(db: Session = db_dependency):
+ top_points = db.query(models.Points).order_by(models.Points.points.desc()).limit(10).all()
+ return [sqlalchemy_model_to_dict(point) for point in top_points]
-@app.get("/points/",response_model=List[PointsModel])
-async def read_points(db: db_dependency, skip: int = 0, limit: int = 100):
- points = db.query(models.Points).offset(skip).limit(limit).all()
- return points
-#When you run with uvicorn main:app --reload
-#Make sure to append /docs to url to get that nice screen to see all the stuff
\ No newline at end of file
diff --git a/backend/points.db b/backend/points.db
index 3e072b7..d98b22e 100644
Binary files a/backend/points.db and b/backend/points.db differ
diff --git a/frontend/ecoscan/App.js b/frontend/ecoscan/App.js
index 6fa3bba..a934800 100644
--- a/frontend/ecoscan/App.js
+++ b/frontend/ecoscan/App.js
@@ -3,47 +3,9 @@ import AsyncStorage from '@react-native-async-storage/async-storage';
import { NavigationContainer,DarkTheme} from "@react-navigation/native";
import Tabs from './src/navigation/tabs';
import Login from './src/screens/LoginPage';
-import api from './api'
const App = () => {
- const [points,setPoints] = useState([]);
- const [formData,setFormData] = useState({
- name: '',
- UCID: '',
- hashed_password: '',
- points: 0
- });
-
- const fetchPoints = async () => {
- const response = await api.get('/points/');
- setPoints(response.data)
- };
-
- useEffect(() => {
- fetchPoints();
- }, []);
-
- const handleInputChange = (event) => {
- const value = event.target.type === 'checkbox' ? event.target.checked : event.target.value;
- setFormData({
- ...formData,
- [event.target.name] : value,
- });
- };
-
- const handleFormSubmit = async (event) => {
- event.preventDefault(); //makes us only control submitting the form
- await api.post('/points/',formData);
- fetchPoints();
- setFormData({
- name: '',
- UCID: '',
- hashed_password: '',
- points: 0
- });
- };
-
const customDarkTheme = {
...DarkTheme,
colors: {
diff --git a/frontend/ecoscan/api.js b/frontend/ecoscan/api.js
deleted file mode 100644
index dc40719..0000000
--- a/frontend/ecoscan/api.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import axios from 'axios';
-
-const api = axios.create({
- baseURL: 'http://localhost:8000'
-})
-
-export default api;
\ No newline at end of file
diff --git a/frontend/ecoscan/src/components/LeaderBoardTable.js b/frontend/ecoscan/src/components/LeaderBoardTable.js
index bb4edd7..78bc5dd 100644
--- a/frontend/ecoscan/src/components/LeaderBoardTable.js
+++ b/frontend/ecoscan/src/components/LeaderBoardTable.js
@@ -1,30 +1,36 @@
-import React from 'react';
+import React, { useState, useEffect } from 'react';
import { View, Text, FlatList } from 'react-native';
-import tw from 'twrnc';
+import leaderboardData from './leaderboard.json'; // Import the JSON file
-const Leaderboard = ({ data }) => {
- const renderItem = ({ item }) => (
-
| Name | -Points | -
|---|---|
| {points.name} | -{points.points} | -