From 72f10486146aab426f5f286234fc1dfbc559da3d Mon Sep 17 00:00:00 2001 From: Benedict Ejembi Date: Fri, 13 Dec 2024 17:39:11 +0000 Subject: [PATCH 1/5] feat: add_extra_deposit method --- web_app/contract_tools/blockchain_call.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/web_app/contract_tools/blockchain_call.py b/web_app/contract_tools/blockchain_call.py index bec5f0f4..5e33edc3 100644 --- a/web_app/contract_tools/blockchain_call.py +++ b/web_app/contract_tools/blockchain_call.py @@ -326,5 +326,21 @@ async def is_opened_position(self, contract_address: str) -> bool: calldata=[], ) + async def add_extra_deposit(self, contract_address: str, token_address: str, amount: str): + """ + Adds extra deposit to position. + + :param contract_address: The contract address. + :param token_address: The token address. + :param amount: The amount to deposit. + :return: A boolean indicating if the position is opened. + """ + + return await self._func_call( + addr=self._convert_address(contract_address), + selector="extra_deposit", + calldata=[token_address, amount], + ) + CLIENT = StarknetClient() From dc1a0382d0ec144d2eae3dc96426ff386f670865 Mon Sep 17 00:00:00 2001 From: Benedict Ejembi Date: Fri, 13 Dec 2024 17:47:30 +0000 Subject: [PATCH 2/5] refac: add_extra_deposit --- web_app/contract_tools/blockchain_call.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/web_app/contract_tools/blockchain_call.py b/web_app/contract_tools/blockchain_call.py index 5e33edc3..5e89eba3 100644 --- a/web_app/contract_tools/blockchain_call.py +++ b/web_app/contract_tools/blockchain_call.py @@ -326,20 +326,19 @@ async def is_opened_position(self, contract_address: str) -> bool: calldata=[], ) - async def add_extra_deposit(self, contract_address: str, token_address: str, amount: str): + async def add_extra_deposit(self, contract_address: str, token_address: str, amount: str) -> Any: """ Adds extra deposit to position. :param contract_address: The contract address. :param token_address: The token address. :param amount: The amount to deposit. - :return: A boolean indicating if the position is opened. """ return await self._func_call( addr=self._convert_address(contract_address), selector="extra_deposit", - calldata=[token_address, amount], + calldata=[self._convert_address(token_address), amount], ) From deae19aed894270b0c1acd6479b5b7f64eb396b9 Mon Sep 17 00:00:00 2001 From: Benedict Ejembi Date: Sat, 14 Dec 2024 08:31:38 +0000 Subject: [PATCH 3/5] feat: add_extra_deposit api --- web_app/api/position.py | 26 ++++++++++++++++++++++++++ web_app/db/crud/position.py | 10 ++++++++++ 2 files changed, 36 insertions(+) diff --git a/web_app/api/position.py b/web_app/api/position.py index 8bbd7961..e9a39f25 100644 --- a/web_app/api/position.py +++ b/web_app/api/position.py @@ -168,3 +168,29 @@ async def open_position(position_id: str) -> str: current_prices = await DashboardMixin.get_current_prices() position_status = position_db_connector.open_position(position_id, current_prices) return position_status + + +@router.post( + "/api/add-extra-deposit/{position_id}", + tags=["Position Operations"], + summary="Add extra deposit to a user position", + response_description="Returns the new position and transaction data.", +) +async def add_extra_deposit( + position_id: int, + amount: str +): + """ + This endpoint adds extra deposit to a user position. + + ### Parameters: + - **position_id**: The position ID. + - **amount**: The amount of the token being deposited. + """ + position = position_db_connector.get_position_by_id(position_id) + + if not position: + raise HTTPException(status_code=404, detail="Position not found") + + position_db_connector.add_extra_deposit_to_position(position, amount) + diff --git a/web_app/db/crud/position.py b/web_app/db/crud/position.py index d604a086..f76620fc 100644 --- a/web_app/db/crud/position.py +++ b/web_app/db/crud/position.py @@ -343,3 +343,13 @@ def delete_all_user_positions(self, user_id: uuid.UUID) -> None: db.commit() except SQLAlchemyError as e: logger.error(f"Error deleting positions for user {user_id}: {str(e)}") + + def add_extra_deposit_to_position(self, position: Position, amount: str) -> None: + """ + Adds extra deposit to a position in the database. + :param position: Position + :param amount: str + :return: None + """ + position.amount = str(int(position.amount) + int(amount)) + self.write_to_db(position) From d53592d4e8afea6c009865c126656af3fe8a762a Mon Sep 17 00:00:00 2001 From: Benedict Ejembi Date: Sat, 14 Dec 2024 08:42:13 +0000 Subject: [PATCH 4/5] refac: minor changes --- web_app/api/position.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/web_app/api/position.py b/web_app/api/position.py index 36a71834..a9ce4ed6 100644 --- a/web_app/api/position.py +++ b/web_app/api/position.py @@ -188,6 +188,10 @@ async def add_extra_deposit( - **position_id**: The position ID. - **amount**: The amount of the token being deposited. """ + + if not position_id: + raise HTTPException(status_code=404, detail="Position ID is required") + position = position_db_connector.get_position_by_id(position_id) if not position: From a59148d0de88fb7ce20802a92cd1c80ef539fbe7 Mon Sep 17 00:00:00 2001 From: Benedict Ejembi Date: Sat, 14 Dec 2024 21:30:28 +0000 Subject: [PATCH 5/5] feat: add amount check --- web_app/api/position.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/web_app/api/position.py b/web_app/api/position.py index a9ce4ed6..c5d470f2 100644 --- a/web_app/api/position.py +++ b/web_app/api/position.py @@ -175,7 +175,7 @@ async def open_position(position_id: str) -> str: "/api/add-extra-deposit/{position_id}", tags=["Position Operations"], summary="Add extra deposit to a user position", - response_description="Returns the new position and transaction data.", + response_description="Returns the result of extra deposit", ) async def add_extra_deposit( position_id: int, @@ -192,6 +192,9 @@ async def add_extra_deposit( if not position_id: raise HTTPException(status_code=404, detail="Position ID is required") + if not amount: + raise HTTPException(status_code=404, detail="Amount is required") + position = position_db_connector.get_position_by_id(position_id) if not position: @@ -199,6 +202,9 @@ async def add_extra_deposit( position_db_connector.add_extra_deposit_to_position(position, amount) + return {"detail": "Successfully added extra deposit"} + + @router.get( "/api/user-positions/{wallet_id}",