Skip to content

Commit

Permalink
Updated Routes
Browse files Browse the repository at this point in the history
  • Loading branch information
Yazan10x committed Nov 27, 2023
1 parent b2ac181 commit 814bb3b
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 41 deletions.
52 changes: 39 additions & 13 deletions backend/routes/energy.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
# Python Imports
from datetime import datetime
import flask
from bson import ObjectId
from flask import Blueprint, Response, jsonify, request

from models.energy import EnergyEntry
from models.user import User
from mongodb_api.carbon_track_db import CarbonTrackDB
from routes import carbon_auth, users
from utils.metric_resets import weekly_metric_reset, get_1_day_range
from utils.FirebaseAPI import FirebaseAPI
from utils.metric_resets import weekly_metric_reset

energy_service = Blueprint('/energy', __name__)

Expand All @@ -20,26 +22,47 @@ def get_energy(oid: str) -> Response:
return jsonify({'energy': item})


@energy_service.route("/get_energy_metric_for_today/<user_id>", methods=['GET'])
@energy_service.route("/get_energy_entries_for_user_using_data_range", methods=['POST'])
@carbon_auth.auth.login_required
def get_energy_entries_for_user_using_date_range() -> Response:
user = FirebaseAPI.get_user(flask.request.headers.get('Authorization').split()[1])
data = request.get_json()
start = datetime.fromisoformat(data.get('start'))
end = datetime.fromisoformat(data.get('end'))
# Validate that both start and end dates are provided
if not start or not end:
return jsonify({'error': 'Both start and end dates are required'})

query = {"user_id": ObjectId(user.oid), "date": {"$gte": start, "$lte": end}}
items = list(CarbonTrackDB.energy_coll.find(query))
energy_items: list[EnergyEntry] = [EnergyEntry.from_json(item) for item in items]
json_items = [item.to_json() for item in energy_items]
return jsonify({
'energyEntries': json_items,
'monthlyData': EnergyEntry.get_monthly_view(start, end, energy_items)
})


@energy_service.route("/get_energy_metric_for_today", methods=['GET'])
@carbon_auth.auth.login_required
def get_energy_metric_for_today(user_id: str) -> Response:
start_of_day, end_of_day = get_1_day_range(datetime.now())
query = {"user_id": ObjectId(user_id), "date": {"$gte": start_of_day, "$lte": end_of_day}}
def get_energy_metric_for_today() -> Response:
user = FirebaseAPI.get_user(flask.request.headers.get('Authorization').split()[1])
query = {"user_id": ObjectId(user.oid), "date": weekly_metric_reset(datetime.now())}
item = CarbonTrackDB.energy_coll.find_one(query)
if item is None:
create_energy(ObjectId(user_id))
return get_energy_metric_for_today(user_id=user_id)
create_energy(ObjectId(user.oid))
return get_energy_metric_for_today()
else:
item = EnergyEntry.from_json(item).to_json()
return jsonify({'energy': item})


@carbon_auth.auth.login_required
def create_energy(user_id: ObjectId) -> Response:
user = users.get_user_obj(user_id)
energy = EnergyEntry(oid=ObjectId(), user_id=user_id, heating_oil = 0, natural_gas = 0, province = user.province,
household = user.household, electricity = 0, carbon_emissions=0.0, date=weekly_metric_reset(datetime.today()))
energy = energy.to_json(for_mongodb=True)
user = User.from_json(CarbonTrackDB.users_coll.find_one({'_id'}))
energy = EnergyEntry(oid=ObjectId(), user_id=user_id, carbon_emissions=0, date=weekly_metric_reset(datetime.today()),
heating_oil=0, natural_gas=0, province=user.province, household=user.household, electricity=0)
energy = energy.to_json()
inserted_id = CarbonTrackDB.energy_coll.insert_one(energy).inserted_id
energy = EnergyEntry.from_json(CarbonTrackDB.energy_coll.find_one({"_id": inserted_id})).to_json()
return energy
Expand All @@ -49,7 +72,10 @@ def create_energy(user_id: ObjectId) -> Response:
@carbon_auth.auth.login_required
def update_energy(oid: str) -> Response:
query = {"_id": ObjectId(oid)}
energy = EnergyEntry.from_json(request.get_json()['energy']).to_json(for_mongodb=True)
energy = EnergyEntry.from_json(request.get_json()['energy']).to_json()
del energy['_id']
del energy['date']
del energy['user_id']
CarbonTrackDB.energy_coll.update_one(query, {'$set': energy})
item = CarbonTrackDB.energy_coll.find_one(query)
item = EnergyEntry.from_json(item).to_json()
Expand Down
60 changes: 38 additions & 22 deletions backend/routes/food.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
# Python Imports
from datetime import datetime

import flask
from bson import ObjectId
from flask import Blueprint, Response, jsonify, request

from models.food import FoodEntry
from mongodb_api.carbon_track_db import CarbonTrackDB
from routes import carbon_auth
from utils.metric_resets import weekly_metric_reset, get_1_day_range
from utils.FirebaseAPI import FirebaseAPI
from utils.metric_resets import weekly_metric_reset

food_service = Blueprint('/food', __name__)

Expand All @@ -20,15 +23,36 @@ def get_food(oid: str) -> Response:
return jsonify({'food': item})


@food_service.route("/get_food_metric_for_today/<user_id>", methods=['GET'])
@food_service.route("/get_food_entries_for_user_using_data_range", methods=['POST'])
@carbon_auth.auth.login_required
def get_food_entries_for_user_using_date_range() -> Response:
user = FirebaseAPI.get_user(flask.request.headers.get('Authorization').split()[1])
data = request.get_json()
start = datetime.fromisoformat(data.get('start'))
end = datetime.fromisoformat(data.get('end'))
# Validate that both start and end dates are provided
if not start or not end:
return jsonify({'error': 'Both start and end dates are required'})

query = {"user_id": ObjectId(user.oid), "date": {"$gte": start, "$lte": end}}
items = list(CarbonTrackDB.food_coll.find(query))
food_items: list[FoodEntry] = [FoodEntry.from_json(item) for item in items]
json_items = [item.to_json() for item in food_items]
return jsonify({
'foodEntries': json_items,
'monthlyData': FoodEntry.get_monthly_view(start, end, food_items)
})


@food_service.route("/get_food_metric_for_today/", methods=['GET'])
@carbon_auth.auth.login_required
def get_food_metric_for_today(user_id: str) -> Response:
start_of_day, end_of_day = get_1_day_range(datetime.now())
query = {"user_id": ObjectId(user_id), "date": {"$gte": start_of_day, "$lte": end_of_day}}
def get_food_metric_for_today() -> Response:
user = FirebaseAPI.get_user(flask.request.headers.get('Authorization').split()[1])
query = {"user_id": ObjectId(user.oid), "date": weekly_metric_reset(datetime.now())}
item = CarbonTrackDB.food_coll.find_one(query)
if item is None:
create_food(ObjectId(user_id))
return get_food_metric_for_today(user_id=user_id)
create_food(ObjectId(user.oid))
return get_food_metric_for_today()
else:
item = FoodEntry.from_json(item).to_json()
return jsonify({'food': item})
Expand All @@ -37,20 +61,9 @@ def get_food_metric_for_today(user_id: str) -> Response:
@carbon_auth.auth.login_required
def create_food(user_id: ObjectId) -> Response:
food = FoodEntry(
oid=ObjectId(),
user_id=user_id,
beef=0,
lamb=0,
pork=0,
chicken=0,
fish=0,
cheese=0,
milk=0,
food_waste=0,
carbon_emissions=0.0,
date=weekly_metric_reset(datetime.today()))

food = food.to_json(for_mongodb=True)
oid=ObjectId(), user_id=user_id, carbon_emissions=0, date=weekly_metric_reset(datetime.today()),
beef=0, lamb=0, pork=0, chicken=0, fish=0, cheese=0, milk=0, food_waste=0)
food = food.to_json()
inserted_id = CarbonTrackDB.food_coll.insert_one(food).inserted_id
food = FoodEntry.from_json(CarbonTrackDB.food_coll.find_one({"_id": inserted_id})).to_json()
return food
Expand All @@ -60,7 +73,10 @@ def create_food(user_id: ObjectId) -> Response:
@carbon_auth.auth.login_required
def update_food(oid: str) -> Response:
query = {"_id": ObjectId(oid)}
food = FoodEntry.from_json(request.get_json()['food']).to_json(for_mongodb=True)
food = FoodEntry.from_json(request.get_json()['food']).to_json()
del food['_id']
del food['date']
del food['user_id']
CarbonTrackDB.food_coll.update_one(query, {'$set': food})
item = CarbonTrackDB.food_coll.find_one(query)
item = FoodEntry.from_json(item).to_json()
Expand Down
11 changes: 5 additions & 6 deletions backend/routes/transportation.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from bson import ObjectId
from flask import Blueprint, Response, jsonify, request
import flask

from models.transportation import TransportationEntry
from mongodb_api.carbon_track_db import CarbonTrackDB
from routes import carbon_auth
Expand All @@ -14,17 +13,17 @@


@transportation_service.route("/transportation/<oid>", methods=['GET'])
# @carbon_auth.auth.login_required
@carbon_auth.auth.login_required
def get_transportation(oid: str) -> Response:
query = {"_id": ObjectId(oid)}
item = CarbonTrackDB.transportation_coll.find_one(query)
item = TransportationEntry.from_json(item).to_json()
return jsonify({"transportation": item})


@transportation_service.route("/get_transportations_entries_for_user_using_data_range", methods=['POST'])
@transportation_service.route("/get_transportation_entries_for_user_using_data_range", methods=['POST'])
@carbon_auth.auth.login_required
def get_transportations_entries_for_user_using_date_range() -> Response:
def get_transportation_entries_for_user_using_date_range() -> Response:
user = FirebaseAPI.get_user(flask.request.headers.get('Authorization').split()[1])
data = request.get_json()
start = datetime.fromisoformat(data.get('start'))
Expand Down Expand Up @@ -59,8 +58,8 @@ def get_transportation_metric_for_today() -> Response:

@carbon_auth.auth.login_required
def create_transportation(user_id: ObjectId) -> Response:
transportation = TransportationEntry(oid=ObjectId(), user_id=user_id, bus=0, train=0, motorbike=0, electric_car=0,
gasoline_car=0, carbon_emissions=0, date=weekly_metric_reset(datetime.today()))
transportation = TransportationEntry(oid=ObjectId(), user_id=user_id, carbon_emissions=0, date=weekly_metric_reset(datetime.today()),
bus=0, train=0, motorbike=0, electric_car=0, gasoline_car=0)
transportation = transportation.to_json()
inserted_id = CarbonTrackDB.transportation_coll.insert_one(transportation).inserted_id
transportation = TransportationEntry.from_json(CarbonTrackDB.transportation_coll.find_one({"_id": inserted_id})).to_json()
Expand Down

0 comments on commit 814bb3b

Please sign in to comment.