[[Image(ER_TradingMK-3.drawio-min.png,1000px)]] ---- == Податочни барања== === Ентитети === **User** - ентитет кој чува информации за сите корисници на апликацијата (и обични корисници и администратори). - __id__ (bigint) - username (text, not null) - password (text, not null) - email (text, not null) - role (enum: USER, ADMIN) **Portfolio** - ентитет кој чува информации за инвестициското портфолио на корисникот. - __id__ (bigint) - balance (decimal, not null) - __user_id__* **PortfolioHolding** - ентитет кој чува информации за поединечни акции кои се дел од едно портфолио. - __id__ (bigint) - quantity (int, not null) - avg_price (decimal, not null) - __portfolio_id__* (bigint) - stock_id(bigint) **Stock** – ентитет кој чува информации за акциите кои може да се тргуваат во системот. - __id__ (bigint) - symbol (text, unique, not null) - name (text) - current_price (double) - last_price (double) - percentage (double) - turnover (double) - last_updated (timestamp) **StockHistory** - ентитет кој чува историски податоци за цената на една акција. - __id__ (bigint) - price (double) - timestamp (date) - stock_id (bigint) **TradeRequest** - ентитет кој чува барања за купување или продавање акции, креирани од корисници и испратени на одобрување кај администратор. - __id__ (bigint) - type (text: BUY / SELL) - status (text: PENDING / APPROVED / DECLINED) - quantity (int) - price_per_unit (double) - timestamp (timestamp) - user_id (bigint) - portfolio_id (bigint) - stock_id (bigint) **Transaction** - ентитет кој чува реализирани трансакции кои настануваат само по одобрување на trade request. - __id__ (bigint) - type (text: BUY / SELL) - quantity (int) - price (double) - timestamp (timestamp) - origin (enum: INTERNAL, EXTERNAL) - __user_id__* (bigint) - __stock_id__* (bigint) **WatchlistEntry** - ентитет кој чува информации за акции кои корисникот ги следи. - __id__ (bigint) - price_above (double) - price_below (double) - __user_id__* (biging) - __stock_id__* (bigint) **PendingLink** - привремен ентитет кој се користи при поврзување на интерен кориснички профил со надворешен OAuth провајдер. - __token__ (text) - email (text, not null) - provider (enum: GOOGLE, INTERNAL) - expires_at (timestamp) - created_at (timestamp) ---- === Релации === **has** (User ↔ Portfolio, 1:1) Секој корисник поседува точно едно портфолио, а секое портфолио припаѓа на еден корисник. **contains** (Portfolio ↔ PortfolioHolding, 1:N) Едно портфолио може да содржи повеќе позиции (акции), додека секоја позиција припаѓа на едно портфолио. **represents** (PortfolioHolding ↔ Stock, N:1) Секоја позиција во портфолиото претставува точно една акција. **has** (Stock ↔ StockHistory, 1:N) Една акција може да има повеќе историски записи за цена. **makes** (User ↔ Transaction, 1:N) Корисникот може да изврши повеќе трансакции. **refers** to (Stock ↔ Transaction, 1:N) Една акција може да учествува во повеќе трансакции. **has** (User ↔ WatchlistEntry, 1:N) Корисникот може да следи повеќе акции преку watchlist записи. **appears** (WatchlistEntry ↔ Stock, N:1) Секој watchlist запис се однесува на една конкретна акција. **creates** (User ↔ PendingLink, 1:1) Корисникот може да иницира поврзувањe со надворешни провајдери. **has** (User ↔ AuthProvider, 1:N) Корисник може да биде интерен или екстерен. **makes** (Portfolio ↔ TradeRequest, 1:N) Корисник праќа trade request преку своето портфолио.