From c77eae21fcc65d67dc8ff9675375fef8962085a6 Mon Sep 17 00:00:00 2001 From: Quincy Blake Date: Thu, 24 Aug 2023 17:36:57 -0400 Subject: [PATCH] committing to new branch --- api/api.py | 69 ++++++++++++++++++++++++- api/queries.py | 120 +++++++++++++++++++++++++++++++++++++++----- models/building.py | 14 +++--- models/install.py | 7 +-- models/member.py | 10 ++-- models/modeltest.py | 3 -- models/request.py | 10 ++-- 7 files changed, 196 insertions(+), 37 deletions(-) delete mode 100644 models/modeltest.py diff --git a/api/api.py b/api/api.py index 1866cbdd..d4c5a03a 100644 --- a/api/api.py +++ b/api/api.py @@ -5,18 +5,83 @@ + app = Flask(__name__) app.json.sort_keys = False + + @app.route('/getMembers', methods=['GET']) def apiGetMembers(): - return (queries.getMembers()) + token = request.headers['token'] + try: + permission = authenticate.getRolePermission(token, 'seemembers') + except: + return "Forbidden", 403 + if permission == True: + return (queries.getMembers()) + else: + return "Forbidden", 403 + + + + +@app.route('/getMemberByName', methods=['GET']) +def apiGetMemberByName(): + token = request.headers['token'] + try: + permission = authenticate.getRolePermission(token, 'seemembers') + except: + return "Forbidden", 403 + if permission == True: + firstName = request.args.get('firstname') + lastName = request.args.get('lastname') + result = queries.getMemberByName(firstName, lastName) + if result == False: + return "Member not found", 404 + else: + return result + else: + return "Forbidden", 403 + + + @app.route('/getMemberById/', methods=['GET']) def apiGetMemberById(id): try: return queries.getMemberByID(id) except: - return "Member does not exist", 404 + return "Member not found", 404 + + + + + +@app.route('/getMemberDetailsByID/', methods=['GET']) +def apiGetMemberDetailsByID(id): + token = request.headers['token'] + try: + permission = authenticate.getRolePermission(token, 'seemembers') + except: + return "Forbidden", 403 + if permission == True: + try: + return queries.getMemberDetailsByID(id) + except: + return "Member not found", 404 + else: + return "Forbidden", 403 + + + +@app.route('/addMember', methods='POST') +def apiAddMember(): + try: + queries.createNewMember(**request.args) + return 200 + except: + return "Error", 500 + diff --git a/api/queries.py b/api/queries.py index 828d95da..42d72839 100644 --- a/api/queries.py +++ b/api/queries.py @@ -4,24 +4,27 @@ from models.request import request from sqlalchemy import select import variables +from sqlalchemy.orm import Session from db.database import create_db_engine, executeQuery +import stringcase -#execute query db_engine = create_db_engine() - - # returns list of dicts for each member +def keysToCamelCase(keydict): + + def getMembers(): stmt = ( select(member.id, - member.firstname, - member.lastname, - member.emailaddress, - member.slackhandle) + member.first_name, + member.last_name, + member.email_address, + member.phone_number, + member.slack_handle) ) result = executeQuery(stmt, db_engine) baselist = [] @@ -34,11 +37,14 @@ def getMembers(): def getMemberByID(memberId): stmt = ( - select(member.id, - member.firstname, - member.lastname, - member.emailaddress) - .where(member.id == memberId) + select( + member.id, + member.first_name, + member.last_name, + member.email_address, + member.phone_number, + member.slack_handle) + .where(member.id == memberId) ) result = executeQuery(stmt,db_engine) try: @@ -47,3 +53,93 @@ def getMemberByID(memberId): raise ValueError("Member does not exist") return response +def getMemberByName(firstName, lastName): + stmt = ( + select( + member.id, + member.first_name, + member.last_name, + member.email_address, + member.phone_number, + member.slack_handle + ).where(member.first_name == firstName).where(member.lastname == lastName) + ) + result = executeQuery(stmt,db_engine) + resultkeys = result.keys() + resultall = result.all() + if len(resultall) == 0: + return False + elif len(resultall) == 1: + response = dict(zip(resultkeys, resultall[0])) + return response + else: + baselist = [] + for row in resultall: + baselist.append(dict(zip(resultkeys, row))) + return baselist + + +def getMemberDetailsByID(memberID): + stmt = ( + select( + member.id, + member.first_name, + member.last_name, + member.email_address, + member.phone_number, + member.slack_handle, + install.install_number, + install.building_id, + install.install_status, + building.street_address, + building.building_status, + building.city, + building.state, + building.zip_code, + building.latitude, + building.longitude, + building.altitude, + building.network_number, + building.install_date, + building.abandon_date, + building.panorama_image + ).where(member.id == memberID) + .join(install, member.id == install.member_id) + .join(building, install.building_id == building.id) + ) + result = executeQuery(stmt, db_engine) + try: + response = dict(zip(result.keys(), result.one())) + except: + raise ValueError("Member does not exist") + returndict = { + 'firstName': response['first_name'], + 'lastName': response['last_name'], + 'emailAddress': response['email_address'], + 'phoneNumber': response['phone_number'], + 'install': { + 'installNumber': response['building_id'], + 'status': response['install_status'], + }, + 'building': { + 'networkNumber': response['network_number'], + 'buildingStatus': response['building_status'], + 'streetAddress': response['street_address'], + 'city': response['city'], + 'state': response['state'], + 'zipCode': response['zip_code'], + 'latitude': response['latitude'], + 'longitude': response['longitude'], + 'altitude': response['altitude'] + } + } + return returndict + +def createNewMember(**kwargs): + newMember = member + for key, value in kwargs: + setattr(member, key, value) + with Session(db_engine) as session: + session.add_all([member]) + session.commit() + \ No newline at end of file diff --git a/models/building.py b/models/building.py index 6e989685..a272d227 100644 --- a/models/building.py +++ b/models/building.py @@ -13,17 +13,17 @@ class building(Base): __tablename__ = "buildings" id: Mapped[int] = mapped_column(primary_key=True) - status: Mapped[str] = mapped_column(String(45)) - streetaddress: Mapped[str] = mapped_column(TEXT) + building_status: Mapped[str] = mapped_column(String(45)) + street_address: Mapped[str] = mapped_column(TEXT) city: Mapped[str] = mapped_column(String(45)) state: Mapped[str] = mapped_column(String(45)) - zipcode: Mapped[int] = mapped_column() + zip_code: Mapped[int] = mapped_column() latitude: Mapped[float] = mapped_column() longitude: Mapped[float] = mapped_column() altitude: Mapped[float] = mapped_column() - networknumber: Mapped[int] = mapped_column(nullable=True) - installdate: Mapped[datetime.date] = mapped_column(nullable=True) - abandondate: Mapped[datetime.date] = mapped_column(nullable=True) - panoramaimage: Mapped[str] = mapped_column(TEXT, nullable=True) \ No newline at end of file + network_number: Mapped[int] = mapped_column(nullable=True) + install_date: Mapped[datetime.date] = mapped_column(nullable=True) + abandon_date: Mapped[datetime.date] = mapped_column(nullable=True) + panorama_image: Mapped[str] = mapped_column(TEXT, nullable=True) \ No newline at end of file diff --git a/models/install.py b/models/install.py index 35d15cd4..a3be6de8 100644 --- a/models/install.py +++ b/models/install.py @@ -12,6 +12,7 @@ class install(Base): __tablename__ = "installs" id: Mapped[int] = mapped_column(primary_key=True) - status: Mapped[str] = mapped_column(String(45)) - buildingid: Mapped[int] = mapped_column(ForeignKey("buildings.id")) - memberid: Mapped[int] = mapped_column(ForeignKey("members.id")) \ No newline at end of file + install_number: Mapped[int] = mapped_column() + install_status: Mapped[str] = mapped_column(String(45)) + building_id: Mapped[int] = mapped_column(ForeignKey("buildings.id")) + member_id: Mapped[int] = mapped_column(ForeignKey("members.id")) \ No newline at end of file diff --git a/models/member.py b/models/member.py index 8f374284..c9f3b510 100644 --- a/models/member.py +++ b/models/member.py @@ -12,8 +12,8 @@ class member(Base): __tablename__ = "members" id: Mapped[int] = mapped_column(primary_key=True) - firstname: Mapped[str] = mapped_column(String(45)) - lastname: Mapped[str] = mapped_column(String(45)) - emailaddress: Mapped[str] = mapped_column(String(45)) - phonenumber: Mapped[str] = mapped_column(String(20), nullable=True) - slackhandle: Mapped[str] = mapped_column(String(45), nullable=True) \ No newline at end of file + first_name: Mapped[str] = mapped_column(String(45)) + last_name: Mapped[str] = mapped_column(String(45)) + email_address: Mapped[str] = mapped_column(String(45)) + phone_number: Mapped[str] = mapped_column(String(20), nullable=True) + slack_handle: Mapped[str] = mapped_column(String(45), nullable=True) \ No newline at end of file diff --git a/models/modeltest.py b/models/modeltest.py deleted file mode 100644 index 0123bed4..00000000 --- a/models/modeltest.py +++ /dev/null @@ -1,3 +0,0 @@ -from sqlalchemy import create_engine - -engine = create_engine("sqlite://", echo=True) \ No newline at end of file diff --git a/models/request.py b/models/request.py index e9ed44f1..15f7c836 100644 --- a/models/request.py +++ b/models/request.py @@ -12,8 +12,8 @@ class request(Base): __tablename__ = "requests" id: Mapped[int] = mapped_column(primary_key=True) - status: Mapped[str] = mapped_column(String(45)) - ticketid: Mapped[int] = mapped_column() - memberid: Mapped[int] = mapped_column(ForeignKey("members.id"), nullable=True) - buildingid: Mapped[int] = mapped_column(ForeignKey("buildings.id"), nullable=True) - installid: Mapped[int] = mapped_column(ForeignKey("installs.id"), nullable=True) \ No newline at end of file + request_status: Mapped[str] = mapped_column(String(45)) + ticket_id: Mapped[int] = mapped_column() + member_id: Mapped[int] = mapped_column(ForeignKey("members.id"), nullable=True) + building_id: Mapped[int] = mapped_column(ForeignKey("buildings.id"), nullable=True) + install_id: Mapped[int] = mapped_column(ForeignKey("installs.id"), nullable=True) \ No newline at end of file