Skip to content

Commit

Permalink
create sep function for getting resident by ID and propogate duplicat…
Browse files Browse the repository at this point in the history
…e error msg to frontend
  • Loading branch information
Connor Bechthold committed Dec 30, 2023
1 parent 0a85a82 commit 7bb09ea
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 27 deletions.
15 changes: 7 additions & 8 deletions backend/app/rest/residents_routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ def add_resident():
# Check for the existence of a resident prior to adding them
fmt_resident_id = resident.get("initial") + str(resident.get("room_num"))
try:
res = residents_service.get_residents(False, 1, 10, fmt_resident_id)
if len(res["residents"]) > 0:
return jsonify({"error": "Resident already with id {fmt_resident_id} already exists".format(fmt_resident_id=fmt_resident_id)}), 409
existing_resident = residents_service.get_resident_by_id(fmt_resident_id)
if existing_resident:
return jsonify({"error": "Resident with ID {fmt_resident_id} already exists.".format(fmt_resident_id=fmt_resident_id)}), 409
except Exception as e:
error_message = getattr(e, "message", None)
return jsonify({"error": (error_message if error_message else str(e))}), 500
Expand Down Expand Up @@ -55,9 +55,9 @@ def update_resident(resident_id):
# Check for the existence of a resident prior to adding them
fmt_resident_id = updated_resident.get("initial") + str(updated_resident.get("room_num"))
try:
res = residents_service.get_residents(False, 1, 10, fmt_resident_id)
if len(res["residents"]) == 1 and res["residents"][0]["id"] != resident_id:
return jsonify({"error": "Resident with id {fmt_resident_id} already exists".format(fmt_resident_id=fmt_resident_id)}), 409
existing_resident = residents_service.get_resident_by_id(fmt_resident_id)
if existing_resident and existing_resident["id"] != resident_id:
return jsonify({"error": "Resident with ID {fmt_resident_id} already exists.".format(fmt_resident_id=fmt_resident_id)}), 409
except Exception as e:
error_message = getattr(e, "message", None)
return jsonify({"error": (error_message if error_message else str(e))}), 500
Expand Down Expand Up @@ -144,9 +144,8 @@ def get_residents():
pass

try:
resident_id = request.args.get("resident_id")
residents_results = residents_service.get_residents(
return_all, page_number, results_per_page, resident_id, filters
return_all, page_number, results_per_page, filters
)
return jsonify(residents_results), 201
except Exception as e:
Expand Down
37 changes: 25 additions & 12 deletions backend/app/services/implementations/residents_service.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from ..interfaces.residents_service import IResidentsService
from ...models.residents import Residents
from ...models.log_records import LogRecords
from ...models.log_record_residents import LogRecordResidents
from ...models.buildings import Buildings
from ...models import db
from datetime import datetime
Expand All @@ -22,6 +22,13 @@ def __init__(self, logger):
"""
self.logger = logger

def to_resident_json(self, resident):
resident, building = resident[0], resident[1]

resident_dict = resident.to_dict()
resident_dict["building"]["name"] = building
return resident_dict

def to_residents_json_list(self, resident_results):
residents_json_list = []
for result in resident_results:
Expand Down Expand Up @@ -81,7 +88,7 @@ def update_resident(self, resident_id, updated_resident):
db.session.commit()

def delete_resident(self, resident_id):
resident_log_records = LogRecords.query.filter_by(
resident_log_records = LogRecordResidents.query.filter_by(
resident_id=resident_id
).count()
if resident_log_records == 0:
Expand All @@ -100,19 +107,25 @@ def delete_resident(self, resident_id):
)
db.session.commit()

def get_resident_by_id(self, resident_id):
try:
resident = (
Residents.query.join(
Buildings, Buildings.id == Residents.building_id
)
.with_entities(Residents, Buildings.name.label("building"))
.filter_by(resident_id=resident_id)
.first()
)
return self.to_resident_json(resident)
except Exception as postgres_error:
raise postgres_error

def get_residents(
self, return_all, page_number, results_per_page, resident_id=None, filters=None
self, return_all, page_number, results_per_page, filters=None
):
try:
if resident_id:
residents_results = (
Residents.query.join(
Buildings, Buildings.id == Residents.building_id
)
.with_entities(Residents, Buildings.name.label("building"))
.filter_by(resident_id=resident_id)
)
elif return_all:
if return_all:
residents_results = (
Residents.query.join(
Buildings, Buildings.id == Residents.building_id
Expand Down
15 changes: 10 additions & 5 deletions backend/app/services/interfaces/residents_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,19 @@ def delete_resident(self, resident_id):

@abstractmethod
def get_residents(
self, return_all, page_number, results_per_page, resident_id=None
self, return_all, page_number, results_per_page, filters=None
):
"""
Gets residents in json format.
:param resident_id: id of resident to be deleted in the format of initial+room_num
:type resident_id: string
:param id: id of resident to be deleted, the primary key of the resident
:type resident_id: initial
:param return_all: whether to return all associated records or paginate
:type return_all: boolean
:param page_number: page number of records to retrieve
:type page_number: int
:param results_per_page: max number of records to retrieve for the page
:type results_per_page: int
:param filters: filters to apply to the query in json format
:type filters: json
:raises Exception: if resident retrieval fails
"""
pass

Expand Down
4 changes: 2 additions & 2 deletions frontend/src/APIClients/ResidentAPIClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ const createResident = async ({

if (axiosErr.response && axiosErr.response.status === 409) {
return {
errMessage: "Resident with the specified user ID already exists."
errMessage: axiosErr.response.data.error ?? `Resident with the specified user ID already exists.`
};
}
return false;
Expand Down Expand Up @@ -128,7 +128,7 @@ const editResident = async ({

if (axiosErr.response && axiosErr.response.status === 409) {
return {
errMessage: "Resident with the specified user ID already exists."
errMessage: axiosErr.response.data.error ?? "Resident with the specified user ID already exists."
};
}
return false;
Expand Down

0 comments on commit 7bb09ea

Please sign in to comment.