From 3ddf87d460bb428b9ba53a7532c3715e0ab9994f Mon Sep 17 00:00:00 2001 From: Rafael Cenzano <32753063+RafaelCenzano@users.noreply.github.com> Date: Tue, 5 Nov 2024 23:43:19 -0500 Subject: [PATCH 1/8] Remove 2024 issues --- db_init.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/db_init.py b/db_init.py index ed89c97a..798e285e 100644 --- a/db_init.py +++ b/db_init.py @@ -89,7 +89,7 @@ db.session.add(row) db.session.commit() - class_years_rows = (2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031) + class_years_rows = (2025, 2026, 2027, 2028, 2029, 2030, 2031) for row_item in class_years_rows: row = ClassYears(class_year=row_item, active=True) @@ -182,7 +182,7 @@ False, True, SemesterEnum.SPRING, - 2024, + 2025, date.today(), True, datetime.now(), @@ -198,7 +198,7 @@ True, True, SemesterEnum.SPRING, - 2024, + 2025, date.today(), True, datetime.now(), @@ -214,7 +214,7 @@ True, True, SemesterEnum.FALL, - 2024, + 2025, date.today(), True, datetime.now(), @@ -230,7 +230,7 @@ True, True, SemesterEnum.SUMMER, - 2024, + 2025, date.today(), True, datetime.now(), @@ -246,10 +246,10 @@ True, False, SemesterEnum.FALL, - 2024, - "2024-10-31", + 2025, + "2025-10-31", True, - "2024-10-10T10:30:00", + "2025-10-10T10:30:00", LocationEnum.JROWL, ), ) @@ -331,7 +331,7 @@ db.session.add(row) db.session.commit() - recommends_class_years_rows = ((2, 2024), (2, 2025), (2, 2026), (1, 2027)) + recommends_class_years_rows = ((3, 2025), (2, 2025), (2, 2026), (1, 2027)) for r in recommends_class_years_rows: row = RecommendsClassYears(opportunity_id=r[0], class_year=r[1]) From 4782c2822718918c680019d700f78ec4d686d09d Mon Sep 17 00:00:00 2001 From: Rafael Cenzano <32753063+RafaelCenzano@users.noreply.github.com> Date: Tue, 5 Nov 2024 23:43:43 -0500 Subject: [PATCH 2/8] Updates to handle input from frontend form for create opportunity --- labconnect/main/opportunity_routes.py | 91 ++++++++++++++++----------- 1 file changed, 54 insertions(+), 37 deletions(-) diff --git a/labconnect/main/opportunity_routes.py b/labconnect/main/opportunity_routes.py index 9d69a212..c253f2ec 100644 --- a/labconnect/main/opportunity_routes.py +++ b/labconnect/main/opportunity_routes.py @@ -1,4 +1,4 @@ -import datetime +from datetime import datetime from flask import abort, request from flask_jwt_extended import get_jwt_identity, jwt_required @@ -603,36 +603,50 @@ def getLabManagerOpportunityCards(rcs_id: str): @main_blueprint.post("/createOpportunity") @jwt_required() def createOpportunity(): - data = request.get_json() - user_id = get_jwt_identity() + if not request.data or not user_id: + abort(400) + + request_data = request.get_json() + + if not request_data: + abort(400) + author = db.session.execute( db.select(User).where(User.email == user_id) ).scalar_one_or_none() + if author is None or author.lab_manager_id is None: + abort(400) + authorID = author.lab_manager_id - newPostData = data[0] + newPostData = request_data[0] # query database to see if the credentials above match - query = db.session.execute(db.select(LabManager).where(LabManager.id == authorID)) + # query = db.session.execute(db.select(LabManager).where(LabManager.id == authorID)) - data = query.all()[0][0] + # data = query.all()[0][0] # TODO: how do we get the opportunity id? # if match is found, create a new opportunity with the new data provided + if not newPostData["hourlyPay"].isdigit(): + abort(400) + + pay = int(newPostData["hourlyPay"]) + one = False two = False three = False four = False - if newPostData["one_credit"]: + if "1" in newPostData["credits"]: one = True - if newPostData["two_credits"]: + if "2" in newPostData["credits"]: two = True - if newPostData["three_credits"]: + if "3" in newPostData["credits"]: three = True - if newPostData["four_credits"]: + if "4" in newPostData["credits"]: four = True lenum = convert_to_enum(newPostData["location"]) @@ -641,22 +655,20 @@ def createOpportunity(): lenum = LocationEnum.TBD newOpportunity = Opportunities( - name=newPostData["name"], + name=newPostData["title"], description=newPostData["description"], recommended_experience=newPostData["recommended_experience"], - pay=newPostData["pay"], + pay=pay, one_credit=one, two_credits=two, three_credits=three, four_credits=four, - semester=SemesterEnum[(newPostData["semester"]).upper()], - year=newPostData["year"], - application_due=datetime.datetime.strptime( - newPostData["application_due"], "%Y-%m-%d" - ), - active=newPostData["active"], + semester=SemesterEnum.FALL, + year=datetime.now().year, + application_due=datetime.strptime(newPostData["application_due"], "%Y-%m-%d"), + active=True, location=lenum, - last_updated=datetime.datetime.now(), + last_updated=datetime.now(), ) db.session.add(newOpportunity) db.session.commit() @@ -666,27 +678,27 @@ def createOpportunity(): db.session.add(newLead) db.session.commit() - for course in newPostData["courses"]: - newCourse = RecommendsCourses( - opportunity_id=newOpportunity.id, course_code=course - ) + # for course in newPostData["courses"]: + # newCourse = RecommendsCourses( + # opportunity_id=newOpportunity.id, course_code=course + # ) - db.session.add(newCourse) - db.session.commit() + # db.session.add(newCourse) + # db.session.commit() - for major in newPostData["majors"]: - newMajor = RecommendsMajors(opportunity_id=newOpportunity.id, major_code=major) - db.session.add(newMajor) - db.session.commit() + # for major in newPostData["majors"]: + # newMajor = RecommendsMajors(opportunity_id=newOpportunity.id, major_code=major) + # db.session.add(newMajor) + # db.session.commit() for year in newPostData["years"]: - newYear = RecommendsClassYears( - opportunity_id=newOpportunity.id, class_year=year - ) - db.session.add(newYear) - db.session.commit() - - db.session.add(newOpportunity) + if year.isdigit(): + recommended_year = int(year) + newYear = RecommendsClassYears( + opportunity_id=newOpportunity.id, class_year=recommended_year + ) + db.session.add(newYear) + db.session.commit() return {"data": "Opportunity Created"} @@ -701,7 +713,6 @@ def editOpportunity_get(opportunity_id): return {"error": "Opportunity not found"}, 404 opportunity = opportunity[0] - print(opportunity) # Query related courses courses_data = db.session.execute( @@ -753,8 +764,14 @@ def editOpportunity_get(opportunity_id): @jwt_required() def editOpportunity(opportunity_id): + if not request.data: + abort(400) + data = request.get_json() + if not data: + abort(400) + # Check if the opportunity and author exist opportunity = db.session.execute( db.select(Opportunities).where(Opportunities.id == opportunity_id) From 38c5e421811aec814e4e1fe98bc99831a013e566 Mon Sep 17 00:00:00 2001 From: Rafael Cenzano <32753063+RafaelCenzano@users.noreply.github.com> Date: Tue, 5 Nov 2024 23:44:15 -0500 Subject: [PATCH 3/8] Updating years route --- labconnect/main/routes.py | 46 +++++++++++---------------------------- 1 file changed, 13 insertions(+), 33 deletions(-) diff --git a/labconnect/main/routes.py b/labconnect/main/routes.py index 52456de2..564fee6f 100644 --- a/labconnect/main/routes.py +++ b/labconnect/main/routes.py @@ -306,11 +306,6 @@ def changeActiveStatus() -> dict[str, bool]: return {"activeStatus": opportunity} -# @main_blueprint.post("/create_post") -# def create_post(): -# return {"Hello": "There"} - - @main_blueprint.get("/500") def force_error(): abort(500) @@ -329,21 +324,6 @@ def force_error(): # return result -# @main_blueprint.get("/departmentsList") -# def departments() -> list[Any]: - -# data = db.session.execute( -# db.select(RPIDepartments).order_by(RPIDepartments.name) -# ).scalars() - -# if not data: -# abort(404) - -# result = [department.to_dict() for department in data] - -# return result - - # @main_blueprint.get("/majors") # def majors() -> list[Any]: @@ -382,24 +362,24 @@ def force_error(): # return result -# @main_blueprint.get("/years") -# def years() -> list[Any]: +@main_blueprint.get("/years") +def years() -> list[int]: -# data = db.session.execute( -# db.select(ClassYears) -# .order_by(ClassYears.class_year) -# .where(ClassYears.active == True) -# ).scalars() + data = db.session.execute( + db.select(ClassYears) + .order_by(ClassYears.class_year) + .where(ClassYears.active == True) + ).scalars() -# if not data: -# abort(404) + if not data: + abort(404) -# result = [year.class_year for year in data] + result = [year.class_year for year in data] -# if result == []: -# abort(404) + if result == []: + abort(404) -# return result + return result # @main_blueprint.get("/courses") From 9e86ce10347ed66172252916025b6f040dbfe631 Mon Sep 17 00:00:00 2001 From: Rafael Cenzano <32753063+RafaelCenzano@users.noreply.github.com> Date: Tue, 12 Nov 2024 17:35:04 -0500 Subject: [PATCH 4/8] Cleanup local login testing --- labconnect/main/auth_routes.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/labconnect/main/auth_routes.py b/labconnect/main/auth_routes.py index ca9b7d41..fae2de91 100644 --- a/labconnect/main/auth_routes.py +++ b/labconnect/main/auth_routes.py @@ -45,9 +45,9 @@ def validate_code_and_get_user_email(code: str) -> str | None: def saml_login(): # In testing skip RPI login purely for local development - if ( - current_app.config["TESTING"] - and current_app.config["FRONTEND_URL"] == "http://localhost:3000" + if current_app.config["TESTING"] and ( + current_app.config["FRONTEND_URL"] == "http://localhost:3000" + or current_app.config["FRONTEND_URL"] == "http://127.0.0.1:3000" ): # Generate JWT code = generate_temporary_code("test@rpi.edu") From 03bb278232d8c36d2c24b97d16cebeea66c401b0 Mon Sep 17 00:00:00 2001 From: Rafael Cenzano <32753063+RafaelCenzano@users.noreply.github.com> Date: Tue, 12 Nov 2024 17:35:22 -0500 Subject: [PATCH 5/8] Fix create route, start work on edit --- labconnect/main/opportunity_routes.py | 121 +++++++++++++------------- 1 file changed, 59 insertions(+), 62 deletions(-) diff --git a/labconnect/main/opportunity_routes.py b/labconnect/main/opportunity_routes.py index c253f2ec..d253fde0 100644 --- a/labconnect/main/opportunity_routes.py +++ b/labconnect/main/opportunity_routes.py @@ -145,7 +145,6 @@ def packageIndividualOpportunity(opportunityInfo): ) queryInfo = query.all() - print(queryInfo) if len(queryInfo) == 0: return data @@ -613,51 +612,31 @@ def createOpportunity(): abort(400) author = db.session.execute( - db.select(User).where(User.email == user_id) + db.select(User).where(User.email == user_id[0]) ).scalar_one_or_none() if author is None or author.lab_manager_id is None: abort(400) - authorID = author.lab_manager_id - newPostData = request_data[0] - - # query database to see if the credentials above match - # query = db.session.execute(db.select(LabManager).where(LabManager.id == authorID)) - - # data = query.all()[0][0] - - # TODO: how do we get the opportunity id? - # if match is found, create a new opportunity with the new data provided - - if not newPostData["hourlyPay"].isdigit(): - abort(400) - - pay = int(newPostData["hourlyPay"]) - - one = False - two = False - three = False - four = False + try: + pay = int(request_data["hourlyPay"]) + except: + pay = None - if "1" in newPostData["credits"]: - one = True - if "2" in newPostData["credits"]: - two = True - if "3" in newPostData["credits"]: - three = True - if "4" in newPostData["credits"]: - four = True + one = True if "1" in request_data["credits"] else False + two = True if "2" in request_data["credits"] else False + three = True if "3" in request_data["credits"] else False + four = True if "4" in request_data["credits"] else False - lenum = convert_to_enum(newPostData["location"]) + lenum = convert_to_enum(request_data["location"]) if lenum is None: lenum = LocationEnum.TBD newOpportunity = Opportunities( - name=newPostData["title"], - description=newPostData["description"], - recommended_experience=newPostData["recommended_experience"], + name=request_data["title"], + description=request_data["description"], + recommended_experience=request_data["recommended_experience"], pay=pay, one_credit=one, two_credits=two, @@ -665,7 +644,7 @@ def createOpportunity(): four_credits=four, semester=SemesterEnum.FALL, year=datetime.now().year, - application_due=datetime.strptime(newPostData["application_due"], "%Y-%m-%d"), + application_due=datetime.strptime(request_data["application_due"], "%Y-%m-%d"), active=True, location=lenum, last_updated=datetime.now(), @@ -673,7 +652,9 @@ def createOpportunity(): db.session.add(newOpportunity) db.session.commit() - newLead = Leads(lab_manager_id=authorID, opportunity_id=newOpportunity.id) + newLead = Leads( + lab_manager_id=author.lab_manager_id, opportunity_id=newOpportunity.id + ) db.session.add(newLead) db.session.commit() @@ -691,7 +672,7 @@ def createOpportunity(): # db.session.add(newMajor) # db.session.commit() - for year in newPostData["years"]: + for year in request_data["years"]: if year.isdigit(): recommended_year = int(year) newYear = RecommendsClassYears( @@ -700,7 +681,7 @@ def createOpportunity(): db.session.add(newYear) db.session.commit() - return {"data": "Opportunity Created"} + return {"data": "Opportunity Created", "id": newOpportunity.id}, 200 @main_blueprint.get("/editOpportunity/") @@ -715,18 +696,18 @@ def editOpportunity_get(opportunity_id): opportunity = opportunity[0] # Query related courses - courses_data = db.session.execute( - db.select(RecommendsCourses.course_code).where( - RecommendsCourses.opportunity_id == opportunity_id - ) - ).all() + # courses_data = db.session.execute( + # db.select(RecommendsCourses.course_code).where( + # RecommendsCourses.opportunity_id == opportunity_id + # ) + # ).all() # Query related majors - majors_data = db.session.execute( - db.select(RecommendsMajors.major_code).where( - RecommendsMajors.opportunity_id == opportunity_id - ) - ).all() + # majors_data = db.session.execute( + # db.select(RecommendsMajors.major_code).where( + # RecommendsMajors.opportunity_id == opportunity_id + # ) + # ).all() # Query related class years years_data = db.session.execute( @@ -735,26 +716,42 @@ def editOpportunity_get(opportunity_id): ) ).all() + credits = [ + str(i) + for i, credit in enumerate( + [ + opportunity.one_credit, + opportunity.two_credits, + opportunity.three_credits, + opportunity.four_credits, + ], + start=1, + ) + if credit + ] + # Format opportunity data as JSON opportunity_data = { "id": opportunity.id, - "name": opportunity.name, + "title": opportunity.name, + "application_due": opportunity.application_due.strftime("%Y-%m-%d"), + "type": ( + "Any" + if len(credits) > 0 and opportunity.pay > 0 + else "For Pay" if opportunity.pay > 0 else "For Credit" + ), + "hourlyPay": str(opportunity.pay), + "credits": credits, "description": opportunity.description, "recommended_experience": opportunity.recommended_experience, - "pay": opportunity.pay, - "one_credit": opportunity.one_credit, - "two_credits": opportunity.two_credits, - "three_credits": opportunity.three_credits, - "four_credits": opportunity.four_credits, - "semester": SemesterEnum(opportunity.semester), # Convert enum to string - "year": opportunity.year, - "application_due": opportunity.application_due.strftime("%Y-%m-%d"), - "active": opportunity.active, + # "semester": opportunity.semester, # Convert enum to string + # "year": opportunity.year, + # "active": opportunity.active, "location": opportunity.location, # Convert enum to string - "last_updated": opportunity.last_updated.strftime("%Y-%m-%d %H:%M:%S"), - "courses": [course.course_code for course in courses_data], - "majors": [major.major_code for major in majors_data], - "years": [year.class_year for year in years_data], + # "last_updated": opportunity.last_updated.strftime("%Y-%m-%d %H:%M:%S"), + # "courses": [course.course_code for course in courses_data], + # "majors": [major.major_code for major in majors_data], + "years": [str(year.class_year) for year in years_data], } return opportunity_data From 1b9dd71e5da7bca3572463237a2a78ee892e01e3 Mon Sep 17 00:00:00 2001 From: Rafael Cenzano <32753063+RafaelCenzano@users.noreply.github.com> Date: Fri, 15 Nov 2024 17:28:49 -0500 Subject: [PATCH 6/8] update db image --- docs/database_docs/Labconnect_DB.png | Bin 96719 -> 96485 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/database_docs/Labconnect_DB.png b/docs/database_docs/Labconnect_DB.png index 1bc76fe9c5739a3509fef1b0842e34f1ca63d57c..b8c8c39c3cd7efdad3aa58d75e9b61b0629fd7eb 100644 GIT binary patch delta 44561 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 fw24`Cmi_b~q7A5)(7>C3K(;{E)c^kgz*^kf delta 44837 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�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 INZs@QU&wjA8UO$Q From 97f2648bfb25e3f00197648c1e1aa75371910b90 Mon Sep 17 00:00:00 2001 From: Rafael Cenzano <32753063+RafaelCenzano@users.noreply.github.com> Date: Fri, 15 Nov 2024 17:29:01 -0500 Subject: [PATCH 7/8] complete create and edit routes --- labconnect/main/opportunity_routes.py | 278 +++++++++++--------------- 1 file changed, 118 insertions(+), 160 deletions(-) diff --git a/labconnect/main/opportunity_routes.py b/labconnect/main/opportunity_routes.py index d253fde0..edc0c407 100644 --- a/labconnect/main/opportunity_routes.py +++ b/labconnect/main/opportunity_routes.py @@ -496,25 +496,6 @@ def getOpportunityCards(): # abort(500) -# @main_blueprint.route("/getOpportunityByProfessor/", methods=["GET"]) -# def getOpportunityByProfessor(rcs_id: str): -# if request.method == "GET": -# # query database for opportunity -# query = db.session.execute( -# db.select(Opportunities, Leads) -# .where(Leads.lab_manager_id == rcs_id) -# .join(Opportunities, Leads.opportunity_id == Opportunities.id) -# ) - -# data = query.all() -# print(data) - -# # return data in the below format if opportunity is found -# return {"data": [opportunity[0].to_dict() for opportunity in data]} - -# abort(500) - - @main_blueprint.get("/staff/opportunities/") def getLabManagerOpportunityCards(rcs_id: str): @@ -633,53 +614,41 @@ def createOpportunity(): if lenum is None: lenum = LocationEnum.TBD - newOpportunity = Opportunities( - name=request_data["title"], - description=request_data["description"], - recommended_experience=request_data["recommended_experience"], - pay=pay, - one_credit=one, - two_credits=two, - three_credits=three, - four_credits=four, - semester=SemesterEnum.FALL, - year=datetime.now().year, - application_due=datetime.strptime(request_data["application_due"], "%Y-%m-%d"), - active=True, - location=lenum, - last_updated=datetime.now(), + newOpportunity = Opportunities() + newOpportunity.name = request_data["title"] + newOpportunity.description = request_data["description"] + newOpportunity.recommended_experience = request_data["recommended_experience"] + newOpportunity.pay = pay + newOpportunity.one_credit = one + newOpportunity.two_credits = two + newOpportunity.three_credits = three + newOpportunity.four_credits = four + newOpportunity.semester = SemesterEnum.FALL + newOpportunity.year = datetime.now().year + newOpportunity.application_due = datetime.strptime( + request_data["application_due"], "%Y-%m-%d" ) + newOpportunity.active = True + newOpportunity.location = lenum + newOpportunity.last_updated = datetime.now() db.session.add(newOpportunity) db.session.commit() - newLead = Leads( - lab_manager_id=author.lab_manager_id, opportunity_id=newOpportunity.id - ) + newLead = Leads() + newLead.lab_manager_id = author.lab_manager_id + newLead.opportunity_id = newOpportunity.id db.session.add(newLead) - db.session.commit() - - # for course in newPostData["courses"]: - # newCourse = RecommendsCourses( - # opportunity_id=newOpportunity.id, course_code=course - # ) - - # db.session.add(newCourse) - # db.session.commit() - - # for major in newPostData["majors"]: - # newMajor = RecommendsMajors(opportunity_id=newOpportunity.id, major_code=major) - # db.session.add(newMajor) - # db.session.commit() for year in request_data["years"]: if year.isdigit(): recommended_year = int(year) - newYear = RecommendsClassYears( - opportunity_id=newOpportunity.id, class_year=recommended_year - ) + newYear = RecommendsClassYears() + newYear.opportunity_id = newOpportunity.id + newYear.class_year = recommended_year db.session.add(newYear) - db.session.commit() + + db.session.commit() return {"data": "Opportunity Created", "id": newOpportunity.id}, 200 @@ -730,6 +699,8 @@ def editOpportunity_get(opportunity_id): if credit ] + years = [str(year.class_year) for year in years_data] if years_data else [] + # Format opportunity data as JSON opportunity_data = { "id": opportunity.id, @@ -737,8 +708,8 @@ def editOpportunity_get(opportunity_id): "application_due": opportunity.application_due.strftime("%Y-%m-%d"), "type": ( "Any" - if len(credits) > 0 and opportunity.pay > 0 - else "For Pay" if opportunity.pay > 0 else "For Credit" + if len(credits) > 0 and opportunity.pay and opportunity.pay > 0 + else "For Pay" if opportunity.pay and opportunity.pay > 0 else "For Credit" ), "hourlyPay": str(opportunity.pay), "credits": credits, @@ -751,7 +722,7 @@ def editOpportunity_get(opportunity_id): # "last_updated": opportunity.last_updated.strftime("%Y-%m-%d %H:%M:%S"), # "courses": [course.course_code for course in courses_data], # "majors": [major.major_code for major in majors_data], - "years": [str(year.class_year) for year in years_data], + "years": years, } return opportunity_data @@ -761,102 +732,100 @@ def editOpportunity_get(opportunity_id): @jwt_required() def editOpportunity(opportunity_id): - if not request.data: + user_id = get_jwt_identity() + if not request.data or not user_id: abort(400) - data = request.get_json() + request_data = request.get_json() - if not data: + if not request_data: abort(400) # Check if the opportunity and author exist opportunity = db.session.execute( db.select(Opportunities).where(Opportunities.id == opportunity_id) - ).first() + ).scalar_one_or_none() - if not opportunity: - return {"error": "Opportunity not found"}, 404 + if opportunity is None: + abort(400) - opportunity = opportunity[0] - data = data[0] + author = db.session.execute( + db.select(User).where(User.email == user_id[0]) + ).scalar_one_or_none() - # TODO: Add check to see if person has permission to edit opportunity - user_id = get_jwt_identity() + if author is None or author.lab_manager_id is None: + abort(400) - lab_manager = db.session.execute( - db.select(LabManager) - .join(User, User.lab_manager_id == LabManager.id) - .where(User.email == user_id) + leads = db.session.execute( + db.select(Leads) + .where(Leads.opportunity_id == opportunity_id) + .where(Leads.lab_manager_id == author.lab_manager_id) ).scalar_one_or_none() - if lab_manager: - lead = db.session.execute( - db.select(Leads).where( - Leads.lab_manager_id == lab_manager.id, - Leads.opportunity_id == opportunity.id, - ) - ).scalar_one_or_none() - if not lead: - return {"error": "Don't have permission to edit!"}, 401 - else: - return {"error": "Don't have permission to edit!"}, 401 + if leads is None: + abort(400) + + try: + pay = int(request_data["hourlyPay"]) + except: + pay = None + + one = True if "1" in request_data["credits"] else False + two = True if "2" in request_data["credits"] else False + three = True if "3" in request_data["credits"] else False + four = True if "4" in request_data["credits"] else False + + lenum = convert_to_enum(request_data["location"]) + + if lenum is None: + lenum = LocationEnum.TBD # Update fields for opportunity based on the input data - opportunity.name = data["name"] - opportunity.description = data["description"] - opportunity.recommended_experience = data["recommended_experience"] - opportunity.pay = data["pay"] - opportunity.one_credit = data["one_credit"] - opportunity.two_credits = data["two_credits"] - opportunity.three_credits = data["three_credits"] - opportunity.four_credits = data["four_credits"] - opportunity.semester = ( - SemesterEnum[(data["semester"]).upper()] - if "semester" in data - else opportunity.semester + opportunity.name = request_data["title"] + opportunity.description = request_data["description"] + opportunity.recommended_experience = request_data["recommended_experience"] + opportunity.pay = pay + opportunity.one_credit = one + opportunity.two_credits = two + opportunity.three_credits = three + opportunity.four_credits = four + opportunity.application_due = datetime.strptime( + request_data["application_due"], "%Y-%m-%d" ) - opportunity.year = data["year"] - opportunity.application_due = ( - datetime.datetime.strptime(data["application_due"], "%Y-%m-%d") - if "application_due" in data - else opportunity.application_due - ) - opportunity.active = data["active"] - opportunity.location = ( - convert_to_enum(data["location"]) - if "location" in data - else opportunity.location - ) - opportunity.last_updated = datetime.datetime.now() - - # Update related tables for courses, majors, and years - # Clear current recommendations - db.session.query(RecommendsCourses).filter_by( - opportunity_id=opportunity_id - ).delete() - db.session.query(RecommendsMajors).filter_by(opportunity_id=opportunity_id).delete() - db.session.query(RecommendsClassYears).filter_by( - opportunity_id=opportunity_id - ).delete() - - # Re-add new recommendations - for course in data["courses"]: - newCourse = RecommendsCourses(opportunity_id=opportunity.id, course_code=course) - - db.session.add(newCourse) - db.session.commit() - - for major in data["majors"]: - newMajor = RecommendsMajors(opportunity_id=opportunity.id, major_code=major) - db.session.add(newMajor) - db.session.commit() - - for year in data["years"]: - newYear = RecommendsClassYears(opportunity_id=opportunity.id, class_year=year) + # opportunity.active = data["active"] + opportunity.location = lenum + opportunity.last_updated = datetime.now() + + existing_years = { + str(year.class_year) + for year in db.session.execute( + db.select(RecommendsClassYears).where( + RecommendsClassYears.opportunity_id == opportunity_id + ) + ).scalars() + } + new_years = set(request_data["years"]) + + # Years to add + years_to_add = new_years - existing_years + for year in years_to_add: + newYear = RecommendsClassYears() + newYear.opportunity_id = opportunity.id + newYear.class_year = int(year) db.session.add(newYear) - db.session.commit() - # Commit all changes to the database + # Years to remove + years_to_remove = existing_years - new_years + if years_to_remove: + db.session.execute( + db.select(RecommendsClassYears) + .where( + RecommendsClassYears.opportunity_id == opportunity_id, + RecommendsClassYears.class_year.in_(years_to_remove), + ) + .delete(synchronize_session=False) + ) + db.session.commit() return {"data": "Opportunity Updated"}, 200 @@ -873,35 +842,24 @@ def deleteOpportunity(opportunity_id): # TODO: Add check to see if user has permission to delete opportunity user_id = get_jwt_identity() - lab_manager = db.session.execute( - db.select(LabManager) - .join(User, User.lab_manager_id == LabManager.id) - .where(User.email == user_id) + user = db.session.execute( + db.select(User).where(User.email == user_id) ).scalar_one_or_none() - if lab_manager: - lead = db.session.execute( - db.select(Leads).where( - Leads.lab_manager_id == lab_manager.id, - Leads.opportunity_id == opportunity.id, - ) - ).scalar_one_or_none() - if not lead: - return {"error": "Don't have permission to delete!"}, 401 - else: + if not user or not user.lab_manager_id: return {"error": "Don't have permission to delete!"}, 401 - # Delete related records in other tables (e.g., Leads, RecommendsCourses, RecommendsMajors, RecommendsClassYears) - db.session.query(Leads).filter_by(opportunity_id=opportunity_id).delete() - db.session.query(RecommendsCourses).filter_by( - opportunity_id=opportunity_id - ).delete() - db.session.query(RecommendsMajors).filter_by(opportunity_id=opportunity_id).delete() - db.session.query(RecommendsClassYears).filter_by( - opportunity_id=opportunity_id - ).delete() - - # Delete the opportunity itself + leads = db.session.execute( + db.select(Leads) + .where(Leads.opportunity_id == opportunity_id) + .where(Leads.lab_manager_id == user.lab_manager_id) + ).scalar_one_or_none() + + if not leads: + abort(400) + + # Delete the opportunity + # cascading delete will handle all other tables db.session.delete(opportunity) db.session.commit() From 5e061ab08fed6d988e602f91bc2eb7fd466e7140 Mon Sep 17 00:00:00 2001 From: Rafael Cenzano <32753063+RafaelCenzano@users.noreply.github.com> Date: Fri, 15 Nov 2024 17:35:02 -0500 Subject: [PATCH 8/8] Small tweaks --- labconnect/main/opportunity_routes.py | 5 ++--- labconnect/main/routes.py | 14 +------------- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/labconnect/main/opportunity_routes.py b/labconnect/main/opportunity_routes.py index aca43b86..4b6c1e8e 100644 --- a/labconnect/main/opportunity_routes.py +++ b/labconnect/main/opportunity_routes.py @@ -1,4 +1,5 @@ from datetime import datetime + from flask import abort, request from flask_jwt_extended import get_jwt_identity, jwt_required @@ -9,12 +10,9 @@ Leads, Opportunities, RecommendsClassYears, - RecommendsCourses, - RecommendsMajors, User, ) - from . import main_blueprint @@ -507,6 +505,7 @@ def getOpportunityCards(): # abort(500) + @main_blueprint.get("/staff/opportunities/") def getLabManagerOpportunityCards(rcs_id: str): diff --git a/labconnect/main/routes.py b/labconnect/main/routes.py index 4fdca560..0b5aa7ab 100644 --- a/labconnect/main/routes.py +++ b/labconnect/main/routes.py @@ -5,26 +5,14 @@ from labconnect import db from labconnect.models import ( - # ClassYears, - # Courses, LabManager, Leads, - # Majors, Opportunities, - # Participates, - # RecommendsClassYears, - # RecommendsCourses, - # RecommendsMajors, RPIDepartments, - # RPISchools, User, - # UserCourses, - # UserDepartments, - # UserMajors, + ClassYears, ) -# = not currently using - from . import main_blueprint