From d5dda4280cc34860531c244fa254ed87662898ff Mon Sep 17 00:00:00 2001 From: greatest0fallt1me <1nonlygem@gmail.com> Date: Tue, 24 Dec 2024 23:13:03 +0530 Subject: [PATCH 1/5] Create seperate crud method to fetch positions independent on status --- web_app/db/crud/position.py | 38 ++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/web_app/db/crud/position.py b/web_app/db/crud/position.py index 1e042f01b..3066d1514 100644 --- a/web_app/db/crud/position.py +++ b/web_app/db/crud/position.py @@ -97,6 +97,42 @@ def get_positions_by_wallet_id( logger.error(f"Failed to retrieve positions: {str(e)}") return [] + def get_all_positions_by_wallet_id( + self, wallet_id: str, start: int, limit: int + ) -> list: + """ + Retrieves paginated positions for a user by their wallet ID + and returns them as a list of dictionaries. + :param wallet_id: str + :param start: starting index for pagination + :param limit: number of records to return + :return: list of dict + """ + with self.Session() as db: + user = self._get_user_by_wallet_id(wallet_id) + if not user: + return [] + + try: + positions = ( + db.query(Position) + .filter( + Position.user_id == user.id, + ) + .offset(start) + .limit(limit) + .all() + ) + # Convert positions to a list of dictionaries + positions_dict = [ + self._position_to_dict(position) for position in positions + ] + return positions_dict + + except SQLAlchemyError as e: + logger.error(f"Failed to retrieve positions: {str(e)}") + return [] + def has_opened_position(self, wallet_id: str) -> bool: """ Checks if a user has any opened positions. @@ -408,4 +444,4 @@ def add_extra_deposit_to_position(self, position: Position, amount: str) -> None :return: None """ position.amount = str(int(position.amount) + int(amount)) - self.write_to_db(position) + self.write_to_db(position) \ No newline at end of file From 7e3e815fcdad9fc80fd9b21ddc38b32d4381f64d Mon Sep 17 00:00:00 2001 From: greatest0fallt1me <1nonlygem@gmail.com> Date: Tue, 24 Dec 2024 23:20:19 +0530 Subject: [PATCH 2/5] Update get_user_positions function to fetch position independant of status --- web_app/api/position.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_app/api/position.py b/web_app/api/position.py index fd291446e..c39052cbd 100644 --- a/web_app/api/position.py +++ b/web_app/api/position.py @@ -230,7 +230,7 @@ async def get_user_positions(wallet_id: str, start: Optional[int] = None) -> lis start_index = max(0, start) if start is not None else 0 - positions = position_db_connector.get_positions_by_wallet_id( + positions = position_db_connector.get_all_positions_by_wallet_id( wallet_id, start_index, PAGINATION_STEP ) return positions From e653412849b7ed25cfb4cf1e0caaf27fe2f5766d Mon Sep 17 00:00:00 2001 From: greatest0fallt1me <1nonlygem@gmail.com> Date: Wed, 25 Dec 2024 11:43:36 +0530 Subject: [PATCH 3/5] Update test_get_user_positions_success test case based on new changes --- web_app/tests/test_positions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_app/tests/test_positions.py b/web_app/tests/test_positions.py index 2dcc011ca..272e18e1d 100644 --- a/web_app/tests/test_positions.py +++ b/web_app/tests/test_positions.py @@ -453,7 +453,7 @@ async def test_get_user_positions_success(client: TestClient) -> None: ] with patch( - "web_app.db.crud.PositionDBConnector.get_positions_by_wallet_id" + "web_app.db.crud.PositionDBConnector.get_all_positions_by_wallet_id" ) as mock_get_positions: mock_get_positions.return_value = mock_positions response = client.get(f"/api/user-positions/{wallet_id}") From 8ee0db9d15ff25a283664804b7ee0d27c25de052 Mon Sep 17 00:00:00 2001 From: greatest0fallt1me <1nonlygem@gmail.com> Date: Wed, 25 Dec 2024 12:03:44 +0530 Subject: [PATCH 4/5] Remove pagination in dashboard endpoint --- web_app/api/dashboard.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_app/api/dashboard.py b/web_app/api/dashboard.py index aee329e60..46a08ed1a 100644 --- a/web_app/api/dashboard.py +++ b/web_app/api/dashboard.py @@ -55,7 +55,7 @@ async def get_dashboard(wallet_id: str) -> DashboardResponse: # Fetching first 10 positions at the moment opened_positions = position_db_connector.get_positions_by_wallet_id( - wallet_id, 0, 10 + wallet_id ) # At the moment, we only support one position per wallet From 4dbb45e48d766a98784f200e12e70dfa9b990bd9 Mon Sep 17 00:00:00 2001 From: greatest0fallt1me <1nonlygem@gmail.com> Date: Wed, 25 Dec 2024 20:02:27 +0530 Subject: [PATCH 5/5] Rename from position_dict to position_dicts --- web_app/db/crud/position.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web_app/db/crud/position.py b/web_app/db/crud/position.py index 3066d1514..f0c2738bc 100644 --- a/web_app/db/crud/position.py +++ b/web_app/db/crud/position.py @@ -124,7 +124,7 @@ def get_all_positions_by_wallet_id( .all() ) # Convert positions to a list of dictionaries - positions_dict = [ + positions_dicts = [ self._position_to_dict(position) for position in positions ] return positions_dict @@ -444,4 +444,4 @@ def add_extra_deposit_to_position(self, position: Position, amount: str) -> None :return: None """ position.amount = str(int(position.amount) + int(amount)) - self.write_to_db(position) \ No newline at end of file + self.write_to_db(position)