Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 84 additions & 22 deletions back-end/application.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
from flask import flash
from sqlalchemy import create_engine, asc, desc
from sqlalchemy.orm import sessionmaker
from database_setup import Base, engine, Trip
from database_setup import Base, Hiker, engine, Trip
from flask import session as login_session
import random
import datetime
import string
import json
from flask import make_response
Expand All @@ -20,44 +21,35 @@

# SQLALCHEMY_DATABASE_URI = os.environ['DB_URL']
# engine = create_engine('sqlite:///SQLALCHEMY_DATABASE_URI.db')
engine = create_engine('sqlite:///database.db')
engine = create_engine('sqlite:///database.db?check_same_thread=false')

DBSession = sessionmaker(bind=engine)

session = DBSession()


@app.route('/')
def show_hostpage():
return "Hostpage"


@app.route('/trips', methods=['GET'])
def show_trips():
session = DBSession()
trip_list = []
all_trips = session.query(Trip).all()
for trip in all_trips:
trip_info = {"trip_name": trip.trip_name,
"id": trip.id,
"trip_description": trip.trip_description
}
trip_list.append(trip_info)
trip_list.append(trip.serialize)
return flask.jsonify(trip_list), 200

@app.route('/trips/<int:trip_id>/detail', methods=['GET'])

@app.route('/trips/<int:trip_id>', methods=['GET'])
def show_trip(trip_id):
session = DBSession()
trip = session.query(Trip).filter_by(id=trip_id).one()
trip_info = {"trip_name": trip.trip_name,
"id": trip.id,
"trip_description": trip.trip_description
}

return flask.jsonify(trip_info), 200
return flask.jsonify(trip.serialize), 200


@app.route('/trips/new', methods=['POST'])
def addTrip():
session = DBSession()
def add_trip():
post = request.get_json()
if request.method == 'POST':
new_trip = Trip(trip_name=post["trip_name"],
Expand All @@ -68,8 +60,7 @@ def addTrip():


@app.route('/trips/<int:id>/update', methods=['PUT'])
def updateTrip(id):
session = DBSession()
def update_trip(id):
post = request.get_json()
if "id" not in post:
return "ERROR: Not a valid Customer ID \n", 404
Expand All @@ -83,15 +74,86 @@ def updateTrip(id):


@app.route('/trips/<int:trip_id>/delete', methods=['DELETE'])
def deleteTrip(trip_id):
session = DBSession()
def delete_trip(trip_id):
post = request.get_json()
trip_to_delete = session.query(Trip).filter_by(id=trip_id).one()
session.delete(trip_to_delete)
session.commit()
return flask.jsonify("Trip successfully deleted!"), 200


@app.route('/hikers/<int:ID>/', methods=['GET'])
def show_hiker(ID):
hiker = session.query(Hiker).filter_by(id=ID).one()
return flask.jsonify(hiker.serialize), 200


@app.route('/hikers/new', methods=['POST'])
def new_hiker():
post = request.get_json()
if request.method == 'POST':
new_hiker = Hiker(first_name=post["first_name"],
last_name=post["last_name"],
address=post["address"],
phone_number=post["phone_number"],
email=post["email"],
emergency_contact1=post["emergency_contact1"],
emergency_contact2=post["emergency_contact2"],
expected_return=post["expected_return"]
)
session.add(new_hiker)
session.commit()
return flask.jsonify("Hiker successfully added! \n"), 200


@app.route('/hikers/<int:id>/edit', methods=['PUT'])
def edit_hiker(id):
post = request.get_json()
if "id" not in post:
return "ERROR: Not a valid Customer ID \n", 404
hiker_id = post["id"]
edited_hiker = session.query(Hiker).filter_by(id=hiker_id).one()
if 'first_name' in post:
edited_hiker.first_name = post['first_name']
elif 'last_name' in post:
edited_hiker.last_name = post['last_name']
elif 'address' in post:
edited_hiker.address = post['address']
elif 'phone_number' in post:
edited_hiker.phone_number = post['address']
elif 'email' in post:
edited_hiker.email = post['email']
elif 'emergency_contact1' in post:
edited_hiker.emergency_contact1 = post['emergency_contact1']
elif 'emergency_contact2' in post:
edited_hiker.emergency_contact2 = post['emergency_contact2']
elif 'expected_return' in post:
edited_hiker.expected_return = post['expected_return']
session.add(edited_hiker)
session.commit()
return flask.jsonify("Hiker successfully updated! \n"), 200


@app.route('/hikers/<int:id>/delete', methods=['PUT'])
def delete_hiker(id):
post = request.get_json()
if "id" not in post:
return "ERROR: Not a valid Customer ID \n", 404
hiker_id = post["id"]
hiker_to_delete = session.query(Hiker).filter_by(id=id).one()
session.delete(hiker_to_delete)
session.commit()
return flask.jsonify("Hiker successfully deleted! \n"), 200

# IF THIS RETURNS TRUE THEN COLOR THE HIKER
def is_overdue(id):
hiker_to_check = session.query(Hiker).filter_by(id=id).one()
current_date = datetime.datetime.today()
if hiker_to_check.expected_return < current_date:
return True
else:
return False


if __name__ == "__main__":
app.debug = True
Expand Down
112 changes: 82 additions & 30 deletions back-end/database_populator.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,36 +10,88 @@
DBSession = sessionmaker(bind=engine)
session = DBSession()

# hiker1 = Hiker(first_name="Sam", last_name="Jamjar", address="123 Sesame Street", phone_number="12223334444", email="sjamjar@gmail.com", emergency_contact1="mommy", emergency_contact2="daddy", expected_return=datetime(2019, 2, 22, 16, 30))
# hiker2 = Hiker(first_name="Anna", last_name="McIntosh", address="456 Applebee Avenue", phone_number="15556778899", email="anna.mc@gmail.com", emergency_contact1="mama", emergency_contact2="papa", expected_return=datetime(2019, 2, 22, 16, 30))
# hiker3 = Hiker(first_name="Buster", last_name="Bluth", address="Mom's appartment", phone_number="12345675432", email="lucille.bluth@gmail.com", emergency_contact1="Lucille Bluth", emergency_contact2="Mother", expected_return=datetime(2019, 2, 22, 16, 30))
# hiker4 = Hiker(first_name="Tobias", last_name="Funke", address="The Model Home", phone_number="19873276543", email="ibluemyselfforthis@gmail.com", emergency_contact1="Lindsay Bluth", emergency_contact2="Michael Bluth", expected_return=datetime(2019, 2, 22, 16, 30))
# session.add(hiker1)
# session.add(hiker2)
# session.add(hiker3)
# session.add(hiker4)
# session.commit()

trip1 = Trip(trip_name="Big Loop around the Small Pond", trip_description="A big loop around a small pond")
trip2 = Trip(trip_name="Waterfall Hike", trip_description="A hike to the waterfall off in yonder distance")
trip3 = Trip(trip_name="Devil's Postpile", trip_description="A hike to Devil's Postpile")
trip4 = Trip(trip_name="Rainbow Lake", trip_description="A hike to rainbow lake")
trip5 = Trip(trip_name="Convict Lake Loop", trip_description="A hike around the loop around Convict Lake")
trip6 = Trip(trip_name="Running trail", trip_description="A run around the trail")
trip7 = Trip(trip_name="A trip", trip_description="A trip")
trip8 = Trip(trip_name="Joshua Tree loop", trip_description="A big loop around Joshua Tree")
hiker1 = Hiker(first_name="Michael", last_name="Bluth",
address="The model home", phone_number="12223334444",
emergency_contact1="Lucille Bluth", emergency_contact2=None,
expected_return=datetime(2019, 1, 22, 16, 30))
hiker2 = Hiker(first_name="GOB", last_name="Bluth",
address="The model home", phone_number="13334445555",
emergency_contact1="Lucille Bluth",
emergency_contact2="Michael Bluth",
expected_return=datetime(2019, 1, 22, 16, 30))
hiker3 = Hiker(first_name="Lindsay", last_name="Bluth-Funke",
address="The model home", phone_number="14445556767",
emergency_contact1="Lucille Bluth",
emergency_contact2="Michael Bluth",
expected_return=datetime(2019, 1, 22, 16, 30))
hiker4 = Hiker(first_name="Buster", last_name="Bluth",
address="The model home", phone_number="55567678999",
emergency_contact1="Lucille Bluth",
emergency_contact2="Mother",
expected_return=datetime(2019, 1, 22, 16, 30))
hiker5 = Hiker(first_name="Tobias", last_name="Funke",
address="The model home", phone_number="14209696969",
emergency_contact1="Lindsay Bluth-Funke",
emergency_contact2="Michael Bluth",
expected_return=datetime(2019, 1, 22, 16, 30))
hiker6 = Hiker(first_name="Lucille", last_name="Bluth",
address="123 Ocean View Appartments Unit 42",
phone_number="19998887777",
emergency_contact1="George Bluth Sr.",
emergency_contact2="Oscar Bluth",
expected_return=datetime(2019, 1, 22, 16, 30))
hiker7 = Hiker(first_name="George", last_name="Bluth",
address="Orange County Prison",
phone_number="18887776565",
emergency_contact1="Lucille Bluth",
emergency_contact2="GOB Bluth",
expected_return=datetime(2019, 1, 22, 16, 30))
hiker8 = Hiker(first_name="Oscar", last_name="Bluth",
address="123 Ocean View Appartments Unit 42",
phone_number="17776565555",
emergency_contact1="Lucille Bluth",
emergency_contact2=None,
expected_return=datetime(2019, 1, 22, 16, 30))
hiker9 = Hiker(first_name="George-Michael", last_name="Bluth",
address="The model home",
phone_number="12223334444",
emergency_contact1="Michael Bluth",
emergency_contact2="Lindsay Bluth",
expected_return=datetime(2019, 1, 22, 16, 30))
hiker10 = Hiker(first_name="Maeby", last_name="Funke",
address="The model home",
phone_number="13334445555",
emergency_contact1="Lindsay Bluth-Funke",
emergency_contact2="Tobias Funke",
expected_return=datetime(2019, 1, 22, 16, 30))

session.add(hiker1)
session.add(hiker2)
session.add(hiker3)
session.add(hiker4)
session.add(hiker5)
session.add(hiker6)
session.add(hiker7)
session.add(hiker8)
session.add(hiker9)
session.add(hiker10)
session.commit()

trip1 = Trip(trip_name="There's always money in the banana stand")
trip1.hikers.append(hiker1)
trip1.hikers.append(hiker2)
trip1.hikers.append(hiker3)
trip1.hikers.append(hiker4)
trip1.hikers.append(hiker5)

trip2 = Trip(trip_name="I just blew myself")
trip2.hikers.append(hiker1)
trip2.hikers.append(hiker2)
trip2.hikers.append(hiker3)
trip2.hikers.append(hiker4)
trip2.hikers.append(hiker5)

session.add(trip1)
session.add(trip2)
session.add(trip3)
session.add(trip4)
session.add(trip5)
session.add(trip6)
session.add(trip7)
session.add(trip8)

session.commit()
# trip1.hikers.append(hiker1)
# trip1.hikers.append(hiker2)
# trip1.hikers.append(hiker3)
# trip1.hikers.append(hiker4)
# session.add(trip1)
# session.commit()
85 changes: 42 additions & 43 deletions back-end/database_setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,59 +8,58 @@
from sqlalchemy.orm import sessionmaker, relationship, backref
from sqlalchemy.sql import func


Base = declarative_base()

# association_table = Table('association', Base.metadata,
# Column('hiker_id', Integer,
# ForeignKey('hiker.id')),
# Column('trip_id', Integer,
# ForeignKey('trip.id'))
# )
association_table = Table('association', Base.metadata,
Column('hiker_id', Integer,
ForeignKey('hiker.id')),
Column('trip_id', Integer,
ForeignKey('trip.id'))
)


# class Hiker(Base):
# __tablename__ = 'hiker'
# id = Column(Integer, primary_key=True, autoincrement=True)
# first_name = Column(String(32))
# last_name = Column(String(32))
# address = Column(String(32))
# phone_number = Column(String(32))
# email = Column(String(32))
# emergency_contact1 = Column(String(32))
# emergency_contact2 = Column(String(32))
# expected_return = Column(DateTime()) # WHENEVER WE WANT TO ESTABLISH A DATE, YOU HAVE TO PASS IT IN
# trip = relationship('Trip', secondary=association_table, back_populates="hikers")
#
# @property
# def serialize(self):
# return {
# 'first_name': self.first_name,
# 'last_name': self.last_name,
# 'address': self.address,
# 'phone_number': self.phone_number,
# 'emergency_contact1': self.emergency_contact1,
# 'emergency_contact2': self.emergency_contact2,
# 'expected_return': self.expected_return
# }
class Hiker(Base):
__tablename__ = 'hiker'
id = Column(Integer, primary_key=True, autoincrement=True)
first_name = Column(String(32))
last_name = Column(String(32))
address = Column(String(32))
phone_number = Column(String(32))
email = Column(String(32))
emergency_contact1 = Column(String(32))
emergency_contact2 = Column(String(32))
expected_return = Column(DateTime())
trip = relationship('Trip', secondary=association_table,
back_populates="hikers")

@property
def serialize(self):
return {
'1) first_name': self.first_name,
'2) last_name': self.last_name,
'3) address': self.address,
'4) phone_number': self.phone_number,
'5) email': self.email,
'6) emergency_contact1': self.emergency_contact1,
'7) emergency_contact2': self.emergency_contact2,
'8) expected_return': self.expected_return
}

class Trip(Base):
__tablename__ = 'trip'
id = Column(Integer, primary_key=True, autoincrement=True)
trip_name = Column(String(32))
trip_description = Column(String(800))
# hikers = relationship('Hiker', secondary=association_table, back_populates="trip")
hikers = relationship('Hiker', secondary=association_table,
back_populates="trip")

# parser = argparse.ArgumentParser()
# parser.add_argument("-t", "--test", action="store_true")
# args = parser.parse_args()
# if args.test:
# print "Created test database"
# engine = create_engine('sqlite:///test.db')
# else:
# print "Created regular database"
# engine = create_engine('sqlite:///database.db')
@property
def serialize(self):
return {
'1. trip_name': self.trip_name,
'2. trip_description': self.trip_description,
'3. hikers': [hiker.serialize for hiker in self.hikers]
}

engine = create_engine('sqlite:///database.db')
Base.metadata.create_all(engine)

# information (name, contact info, expected checkout date) and trips (groups of hikers)
Loading