From a8ce50b6d52bc29b31d2d8415a8c4c94bc0fd9c4 Mon Sep 17 00:00:00 2001 From: Tyler Adam Martinez Date: Wed, 10 Jun 2026 15:36:02 -0500 Subject: [PATCH 1/5] chore(Login): Rm unneeded var --- frontend/src/views/Login.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/views/Login.tsx b/frontend/src/views/Login.tsx index c5551451..3900a98a 100644 --- a/frontend/src/views/Login.tsx +++ b/frontend/src/views/Login.tsx @@ -54,7 +54,7 @@ export const Login = () => { headers: buildSessionTrackingHeaders(sessionTrackingMetadata), }) .then((res) => handleLogin(res, sessionTrackingMetadata.fingerprintHash)) - .catch((_) => { + .catch(() => { setError( "Unable to connect to the server. Please check your internet connection and try again. If the issue persists, contact support.", ); From b220bf9c99e6d45556cc3d96471ff6b41de2bdc1 Mon Sep 17 00:00:00 2001 From: Tyler Adam Martinez Date: Wed, 10 Jun 2026 15:36:51 -0500 Subject: [PATCH 2/5] fix(models/meter): Update Meter.description to str from incorrect type DateTime --- api/models/meter.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/api/models/meter.py b/api/models/meter.py index a833af0c..c3f49017 100644 --- a/api/models/meter.py +++ b/api/models/meter.py @@ -61,7 +61,9 @@ class Meters(Base): status_id: Mapped[int] = mapped_column( Integer, ForeignKey("MeterStatusLU.id"), nullable=False ) - well_id: Mapped[int] = mapped_column(Integer, ForeignKey("Wells.id"), nullable=False) + well_id: Mapped[int] = mapped_column( + Integer, ForeignKey("Wells.id"), nullable=False + ) location_id: Mapped[int] = mapped_column( Integer, ForeignKey("Locations.id"), nullable=False ) @@ -98,11 +100,13 @@ class MeterActivities(Base): __tablename__ = "MeterActivities" timestamp_start: Mapped[DateTime] = mapped_column(DateTime, nullable=False) timestamp_end: Mapped[DateTime] = mapped_column(DateTime, nullable=False) - description: Mapped[DateTime] = mapped_column(String) + description: Mapped[str] = mapped_column(String) submitting_user_id: Mapped[int] = mapped_column( Integer, ForeignKey("Users.id"), nullable=False ) - meter_id: Mapped[int] = mapped_column(Integer, ForeignKey("Meters.id"), nullable=False) + meter_id: Mapped[int] = mapped_column( + Integer, ForeignKey("Meters.id"), nullable=False + ) activity_type_id: Mapped[int] = mapped_column( Integer, ForeignKey("ActivityTypeLU.id"), nullable=False ) @@ -171,11 +175,15 @@ class MeterObservations(Base): notes: Mapped[str] = mapped_column(String) ose_share: Mapped[bool] = mapped_column(Boolean, nullable=False) submitting_user_id: Mapped[int] = mapped_column(Integer, ForeignKey("Users.id")) - meter_id: Mapped[int] = mapped_column(Integer, ForeignKey("Meters.id"), nullable=False) + meter_id: Mapped[int] = mapped_column( + Integer, ForeignKey("Meters.id"), nullable=False + ) observed_property_type_id: Mapped[int] = mapped_column( Integer, ForeignKey("ObservedPropertyTypeLU.id"), nullable=False ) - unit_id: Mapped[int] = mapped_column(Integer, ForeignKey("Units.id"), nullable=False) + unit_id: Mapped[int] = mapped_column( + Integer, ForeignKey("Units.id"), nullable=False + ) location_id: Mapped[int] = mapped_column( Integer, ForeignKey("Locations.id"), nullable=False ) From fc9a14c8fe2dc9ec0d1adf8a42e7a35d8e2149af Mon Sep 17 00:00:00 2001 From: Tyler Adam Martinez Date: Wed, 10 Jun 2026 15:40:30 -0500 Subject: [PATCH 3/5] style(routes/OSE): Update style --- api/routes/OSE.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/api/routes/OSE.py b/api/routes/OSE.py index 09b4e2e2..56a9c5aa 100644 --- a/api/routes/OSE.py +++ b/api/routes/OSE.py @@ -67,9 +67,7 @@ def get_disapproval_response_by_request_id( return ose_service.get_disapproval_response(db, ose_request_id) -@ose_router.get( - "/get_DB_types", tags=["OSE"], response_model=meter.DBTypesForOSE -) +@ose_router.get("/get_DB_types", tags=["OSE"], response_model=meter.DBTypesForOSE) def get_DB_types(db: Session = Depends(get_db)): """ Return DB types from lookup tables From 66ceb60b87da69a010aa670079aefcec42c95b64 Mon Sep 17 00:00:00 2001 From: Tyler Adam Martinez Date: Wed, 10 Jun 2026 15:43:05 -0500 Subject: [PATCH 4/5] fix(services/ose): Patch the broken type in get_meter_information() --- api/services/ose.py | 51 ++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/api/services/ose.py b/api/services/ose.py index 4202495b..a56d1060 100644 --- a/api/services/ose.py +++ b/api/services/ose.py @@ -19,7 +19,8 @@ ) from api.models.well import Wells from api.models.work_order import workOrders -from api.schemas import meter, ose +from api.schemas import ose +from api.schemas.meter import PublicMeter, DBTypesForOSE API_BASE_URL = os.getenv("API_BASE_URL", "") @@ -83,7 +84,9 @@ def _serialize_activity( return ose.ActivityDTO( activity_id=activity.id, - ose_request_id=activity.work_order.ose_request_id if activity.work_order else None, + ose_request_id=activity.work_order.ose_request_id + if activity.work_order + else None, activity_type=activity.activity_type.name, activity_start=activity.timestamp_start, activity_end=activity.timestamp_end, @@ -105,7 +108,9 @@ def reorganize_history( for activity in activities: activity_date = activity.timestamp_start.strftime("%Y-%m-%d") meter_serial = activity.meter.serial_number - history.setdefault(activity_date, {}).setdefault(meter_serial, []).append(activity) + history.setdefault(activity_date, {}).setdefault(meter_serial, []).append( + activity + ) history_list: list[ose.DateHistoryDTO] = [] for activity_date, meters in history.items(): @@ -186,7 +191,7 @@ def get_maintenance_by_request_ids( select(MeterActivities) .options( joinedload(MeterActivities.activity_type), - joinedload(MeterActivities.parts_used), + joinedload(MeterActivities.parts_used_links), joinedload(MeterActivities.meter).joinedload(Meters.well), joinedload(MeterActivities.work_order), selectinload(MeterActivities.photos), @@ -207,7 +212,9 @@ def get_maintenance_by_request_ids( if not activities_list: return [] - activities_start_date = min(activity.timestamp_start for activity in activities_list) + activities_start_date = min( + activity.timestamp_start for activity in activities_list + ) activities_end_date = max(activity.timestamp_end for activity in activities_list) observations = ( db.scalars( @@ -232,7 +239,7 @@ def get_maintenance_by_request_ids( return reorganize_history(activities_list, list(observations)) -def get_meter_information(db: Session, serial_number: str) -> meter.PublicMeter: +def get_meter_information(db: Session, serial_number: str) -> PublicMeter: query = select(Meters).options( joinedload(Meters.meter_type), joinedload(Meters.well).joinedload(Wells.location), @@ -245,10 +252,10 @@ def get_meter_information(db: Session, serial_number: str) -> meter.PublicMeter: if not meter: raise HTTPException(status_code=404, detail="Meter not found") - return meter.PublicMeter( + return PublicMeter( serial_number=meter.serial_number, status=meter.status.status_name, - well=meter.PublicMeter.PublicWell( + well=PublicMeter.PublicWell( ra_number=meter.well.ra_number, osetag=meter.well.osetag, trss=meter.well.location.trss, @@ -258,12 +265,12 @@ def get_meter_information(db: Session, serial_number: str) -> meter.PublicMeter: if meter.well else None, notes=meter.notes, - meter_type=meter.PublicMeter.MeterType( + meter_type=PublicMeter.MeterType( brand=meter.meter_type.brand, model=meter.meter_type.model, size=meter.meter_type.size, ), - meter_register=meter.PublicMeter.MeterRegister( + meter_register=PublicMeter.MeterRegister( ratio=meter.meter_register.ratio, number_of_digits=meter.meter_register.number_of_digits, decimal_digits=meter.meter_register.decimal_digits, @@ -276,9 +283,7 @@ def get_meter_information(db: Session, serial_number: str) -> meter.PublicMeter: ) -def get_disapproval_response( - db: Session, ose_request_id: int -) -> ose.DisapprovalStatus: +def get_disapproval_response(db: Session, ose_request_id: int) -> ose.DisapprovalStatus: work_order = db.scalars( select(workOrders) .options(joinedload(workOrders.status)) @@ -350,34 +355,28 @@ def get_disapproval_response( ) -def get_db_types(db: Session) -> meter.DBTypesForOSE: - return meter.DBTypesForOSE( +def get_db_types(db: Session) -> DBTypesForOSE: + return DBTypesForOSE( activity_types=[ - meter.DBTypesForOSE.GeneralTypeInfo( - name=item.name, description=item.description - ) + DBTypesForOSE.GeneralTypeInfo(name=item.name, description=item.description) for item in db.scalars(select(ActivityTypeLU)).all() ], observed_property_types=[ - meter.DBTypesForOSE.GeneralTypeInfo( - name=item.name, description=item.description - ) + DBTypesForOSE.GeneralTypeInfo(name=item.name, description=item.description) for item in db.scalars(select(ObservedPropertyTypeLU)).all() ], service_types=[ - meter.DBTypesForOSE.GeneralTypeInfo( + DBTypesForOSE.GeneralTypeInfo( name=item.service_name, description=item.description ) for item in db.scalars(select(ServiceTypeLU)).all() ], note_types=[ - meter.DBTypesForOSE.GeneralTypeInfo( - name=item.note, description=item.details - ) + DBTypesForOSE.GeneralTypeInfo(name=item.note, description=item.details) for item in db.scalars(select(NoteTypeLU)).all() ], meter_status_types=[ - meter.DBTypesForOSE.GeneralTypeInfo( + DBTypesForOSE.GeneralTypeInfo( name=item.status_name, description=item.description ) for item in db.scalars(select(MeterStatusLU)).all() From e8ee829c6f1008ae0b40a38c216d817a1a94a64d Mon Sep 17 00:00:00 2001 From: Tyler Adam Martinez Date: Wed, 10 Jun 2026 15:46:26 -0500 Subject: [PATCH 5/5] chore(package-lock): Update pkgs --- frontend/package-lock.json | 41 ++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index cef30c7e..4da8c933 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -2605,9 +2605,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.23.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.2.tgz", - "integrity": "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.3.tgz", + "integrity": "sha512-4An71tdz9X8+3sI4Qqqd2LWd9vS39J7sqd9EU4Scw7TJE/qB10Flv/UuqbPVgfQV9XoK8Np6jNquZitnZq5i+Q==", "license": "MIT", "engines": { "node": ">=14.0.0" @@ -4036,9 +4036,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, "license": "MIT", "dependencies": { @@ -7382,13 +7382,10 @@ } }, "node_modules/js-cookie": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", - "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", - "license": "MIT", - "engines": { - "node": ">=14" - } + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.8.tgz", + "integrity": "sha512-yeJd4aNAdYZQjaon2bpD/Gb0B/omw7HQOsynXXcOiWVCacbBcPlgn8S/d1X6blFSaHao7ozqtW7NZW19xpCtIw==", + "license": "MIT" }, "node_modules/js-sha3": { "version": "0.8.0", @@ -8837,12 +8834,12 @@ } }, "node_modules/react-router": { - "version": "6.30.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.3.tgz", - "integrity": "sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw==", + "version": "6.30.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.4.tgz", + "integrity": "sha512-SVUsDe+DybHM/WmYKIVYhZh1o5Dcuf16yM6WjG02Q9XVFMZIJyHYhwrr6bFBXZkVP6z69kNkMyBCujt8FaFLJA==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.23.2" + "@remix-run/router": "1.23.3" }, "engines": { "node": ">=14.0.0" @@ -8852,13 +8849,13 @@ } }, "node_modules/react-router-dom": { - "version": "6.30.3", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.3.tgz", - "integrity": "sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==", + "version": "6.30.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.4.tgz", + "integrity": "sha512-q4HvNl+mmDdkS0g+MqiBZNteQJCuimWoOyHMy4T/RQLAn9Z29+E91QXRaxOujeMl2HTzRSS0KFPd7lxX3PjV0Q==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.23.2", - "react-router": "6.30.3" + "@remix-run/router": "1.23.3", + "react-router": "6.30.4" }, "engines": { "node": ">=14.0.0"