Interface PositionRepository

All Superinterfaces:
org.springframework.data.repository.CrudRepository<Position,Long>, org.springframework.data.jpa.repository.JpaRepository<Position,Long>, org.springframework.data.jpa.repository.JpaSpecificationExecutor<Position>, org.springframework.data.repository.ListCrudRepository<Position,Long>, org.springframework.data.repository.ListPagingAndSortingRepository<Position,Long>, org.springframework.data.repository.PagingAndSortingRepository<Position,Long>, org.springframework.data.repository.query.QueryByExampleExecutor<Position>, org.springframework.data.repository.Repository<Position,Long>

@Repository public interface PositionRepository extends org.springframework.data.jpa.repository.JpaRepository<Position,Long>, org.springframework.data.jpa.repository.JpaSpecificationExecutor<Position>
Data-access layer for Position entities.
Version:
3.0.6
Author:
Stephen Prizio
  • Method Details

    • findAllByAccount

      List<Position> findAllByAccount(Account account)
      Returns all positions for the given Account.
      Parameters:
      account - Account
      Returns:
      List of Positions
    • findPositionsForLedgerSnapshots

      @EntityGraph(attributePaths="positionOrders") @Query("SELECT DISTINCT p\nFROM Position p\nWHERE p.account = :account\nAND p.positionOpened <= :end\nAND (p.positionClosed IS NULL OR p.positionClosed >= :start)\nORDER BY p.positionOpened ASC, p.id ASC\n") List<Position> findPositionsForLedgerSnapshots(@Param("account") Account account, @Param("start") LocalDateTime start, @Param("end") LocalDateTime end)
      Returns positions and orders that can contribute pending realized results at a requested ledger snapshot.
      Parameters:
      account - account that owns the positions
      start - earliest requested snapshot
      end - latest requested snapshot
      Returns:
      positions with their orders initialized
    • existsByPositionNumber

      boolean existsByPositionNumber(long positionNumber)
      Returns whether the given position number already exists.
      Parameters:
      positionNumber - position number
      Returns:
      true when taken
    • findByPositionNumberAndAccount

      Optional<Position> findByPositionNumberAndAccount(long positionNumber, Account account)
      Returns a Position by position number for the given Account.
      Parameters:
      positionNumber - position number
      account - Account
      Returns:
      Optional Position
    • findOwnedByPositionNumber

      @Query("SELECT p\nFROM Position p\nJOIN p.account a\nWHERE p.positionNumber = :positionNumber\n AND a.accountNumber = :accountNumber\n AND a.user.id = :userId\n AND a.portfolio.active = true\n") Optional<Position> findOwnedByPositionNumber(@Param("accountNumber") String accountNumber, @Param("positionNumber") long positionNumber, @Param("userId") Long userId)
      Returns a position owned by the given user.
      Parameters:
      accountNumber - account number
      positionNumber - position number
      userId - owning user id
      Returns:
      Optional Position
    • findOwnedDetailByPositionNumber

      @EntityGraph(attributePaths={"account","strategy","symbol","positionOrders"}) @Query("SELECT p FROM Position p\nWHERE p.positionNumber = :positionNumber\n AND p.account.accountNumber = :accountNumber\n AND p.account.user.id = :userId\n AND p.account.portfolio.active = true\n") Optional<Position> findOwnedDetailByPositionNumber(@Param("positionNumber") long positionNumber, @Param("accountNumber") String accountNumber, @Param("userId") Long userId)
      Returns a position with the associations the detail payload requires, scoped to its account.
      Parameters:
      positionNumber - position number
      accountNumber - owning account number
      userId - owning user id
      Returns:
      Optional Position
    • findByIdAndAccount

      Optional<Position> findByIdAndAccount(Long id, Account account)
      Returns a Position by id for the given Account.
      Parameters:
      id - position id
      account - Account
      Returns:
      Optional Position
    • findByAccountAndSourceSystemAndExternalPositionKey

      Optional<Position> findByAccountAndSourceSystemAndExternalPositionKey(Account account, String sourceSystem, String externalPositionKey)
      Returns an imported Position by its external identity fields.
      Parameters:
      account - Account
      sourceSystem - import source namespace
      externalPositionKey - external position identity
      Returns:
      Optional Position
    • findPositionsByAccountAndOpenState

      @Query("SELECT p\nFROM Position p\nWHERE p.account = :account\nAND (\n (:open = true AND p.positionClosed IS NULL)\n OR (:open = false AND p.positionClosed IS NOT NULL)\n)\nORDER BY p.positionOpened DESC\n") List<Position> findPositionsByAccountAndOpenState(@Param("account") Account account, @Param("open") boolean open)
      Returns positions for the given account filtered by open state.
      Parameters:
      account - Account
      open - true for open positions, false for closed positions
      Returns:
      List of Positions
    • findClosedPositionsWithinTimespan

      @Query("SELECT p\nFROM Position p\nWHERE p.account = :account\nAND p.positionClosed IS NOT NULL\nAND p.positionClosed >= :start\nAND p.positionClosed < :end\nORDER BY p.positionClosed ASC, p.id ASC\n") List<Position> findClosedPositionsWithinTimespan(@Param("account") Account account, @Param("start") LocalDateTime start, @Param("end") LocalDateTime end)
      Returns closed positions for the given account within the requested closed-time span.
      Parameters:
      account - Account
      start - start boundary inclusive
      end - end boundary exclusive
      Returns:
      List of Positions
    • findClosedPositionsByAccount

      @Query("SELECT p\nFROM Position p\nWHERE p.account = :account\nAND p.positionClosed IS NOT NULL\nORDER BY p.positionClosed ASC, p.id ASC\n") List<Position> findClosedPositionsByAccount(@Param("account") Account account)
      Returns all closed positions for the given account.
      Parameters:
      account - Account
      Returns:
      List of Positions
    • findClosedPositionsByAccounts

      @Query("SELECT p\nFROM Position p\nWHERE p.account IN :accounts\nAND p.positionClosed IS NOT NULL\nORDER BY p.positionClosed ASC, p.id ASC\n") List<Position> findClosedPositionsByAccounts(@Param("accounts") Collection<Account> accounts)
      Returns every closed Position for the given Accounts in one query.
      Parameters:
      accounts - Collection of Accounts
      Returns:
      List of Positions
    • deleteBySymbol

      @Modifying @Query("DELETE FROM Position p WHERE p.symbol = :symbol") void deleteBySymbol(@Param("symbol") Symbol symbol)
      Deletes all positions associated with the given Symbol.
      Parameters:
      symbol - Symbol
    • migrateSymbol

      @Modifying @Query("UPDATE Position p\nSET p.symbol = :newSymbol,\n p.modifiedAt = CASE\n WHEN p.createdAt > :modifiedAt THEN p.createdAt\n ELSE :modifiedAt\n END\nWHERE p.symbol = :previousSymbol\n") void migrateSymbol(@Param("previousSymbol") Symbol previousSymbol, @Param("newSymbol") Symbol newSymbol, @Param("modifiedAt") LocalDateTime modifiedAt)
      Migrates positions associated with one Symbol to another.
      Parameters:
      previousSymbol - old Symbol
      newSymbol - new Symbol
      modifiedAt - modification timestamp