Skip to content

Commit

Permalink
Move position_sum calculating to connector
Browse files Browse the repository at this point in the history
  • Loading branch information
CBoYXD committed Jan 18, 2025
1 parent 5fae4aa commit de114c6
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 21 deletions.
16 changes: 3 additions & 13 deletions web_app/contract_tools/mixins/dashboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,19 +112,9 @@ async def get_current_position_sum(cls, position: dict) -> Decimal:
:param position: Position object containing base amount and token information
:return: Decimal representing total position value including extra deposits
"""
total_amount = Decimal(position["amount"])
extra_deposits = position_db_connector.get_extra_deposits_data(position["id"])
current_prices = await cls.get_current_prices()

for token, amount in extra_deposits.items():
if token in current_prices:
deposit_amount = Decimal(amount)
if token != position["token_symbol"]:
deposit_amount *= Decimal(current_prices[token])
deposit_amount /= Decimal(current_prices[position["token_symbol"]])
total_amount += deposit_amount

return total_amount
return position_db_connector.get_current_position_sum_with_extra_deposits(
position["id"], await cls.get_current_prices()
)

@classmethod
async def get_start_position_sum(
Expand Down
18 changes: 10 additions & 8 deletions web_app/db/crud/position.py
Original file line number Diff line number Diff line change
Expand Up @@ -484,7 +484,7 @@ def get_extra_deposits_data(self, position_id: UUID) -> dict[str, str]:
)
return {deposit.token_symbol: deposit.amount for deposit in deposits}

def get_current_position_sum(
def get_current_position_sum_with_extra_deposits(
self, position_id: UUID, current_prices: dict[str, Decimal]
) -> Decimal:
"""
Expand All @@ -496,8 +496,7 @@ def get_current_position_sum(
"""
with self.Session() as db:
try:

position = db.query(Position).filter(Position.id == position_id).first()
position: Position = db.query(Position).filter(Position.id == position_id).first()
if not position:
return Decimal(0)

Expand All @@ -507,16 +506,19 @@ def get_current_position_sum(
if base_price:
total_sum += Decimal(str(position.amount)) * base_price

extra_deposits = (
extra_deposits: list[ExtraDeposit] = (
db.query(ExtraDeposit)
.filter(ExtraDeposit.position_id == position_id)
.all()
)

for deposit in extra_deposits:
price = current_prices.get(deposit.token_symbol)
if price:
total_sum += Decimal(str(deposit.amount)) * price
for extra_deposit in extra_deposits:
if extra_deposit.token_symbol in current_prices:
deposit_amount = Decimal(extra_deposit.amount)
if extra_deposit.token_symbol != position.token_symbol:
deposit_amount *= Decimal(current_prices[extra_deposit.token_symbol])
deposit_amount /= Decimal(current_prices[position.token_symbol])
total_sum += deposit_amount

return total_sum

Expand Down

0 comments on commit de114c6

Please sign in to comment.