---
# System prepended metadata

title: STOCK TRADING BACKEND API

---

# STOCK TRADING BACKEND API

- Github Repo: https://github.com/JudyBui127/Chatter-backend
## HOW TO RUN
### 1. Set up environment
- Add config.js file to '/' main project folder
- Run npm
``` 
npm install
```
### 2. Run server
```
nodemon server.js
```
### 3. Test APIs on Postman
- Import this json file to Postman: CHATTER.postman_collection.json (found in this project folder)
- Test API requests and responses as following 
## APIs
### I. JWT Token Authentication
- middleware.js
- Check for token in request header 'Authorization' to verify valid login sesson of user before create, update, delete tweets.

### II. USER
###  [POST] /api/user/login
-Response:
``` 
{
    "status": 200,
    "message": "Successfully logged in!",
    "data": {
        "dataUser": {
            "id": string,
            "username": string
        },
        "token": string
    }
} 
```
### [POST] /api/user/register
```
{
    "status": 201,
    "message": "Register successful!",
    "data": {
        "user": {
            "id": string,
            "username": string
        }
    }
}
```

## III.  User Portfolio
### [GET] /api/user/:id
- Response:
    ```
    {
        status: 200,
        message: 'Successful!',
        data: {
            wallets: {
                fiat: [{
                    id: string,
                    currency: string,
                    balance: float
                }],
            stocks: [{
                id: string,
                symbol: string,
                quantity: integer
            }]
        }
    }
    ```
## IV. User Wallet
* Each wallet should has:
    * wallet_type: 'fiat' or 'stock'
    * unique currency ('usd', 'cad', 'vnd', 'jpy'...)
    * unique stock symbol ('AAPL', 'IBM', 'TSLA' ...)
### 1. Create User Wallet
### [POST] /api/wallet/create
- Request params:
    ```
    {
        wallet_type: 'fiat',
        user_id: string,
        currency: string
    }
    ```
- Successfull response:
    ```
    {
        status: 200,
        message: "Created fiat wallet successfully!"
        data: {
            id: string,
            wallet_type: 'fiat',
            owner_id: string,
            currency: string,
            balance: float, // default: 0
        }

    }
    ```
### [POST] /api/wallet/create
- Request params:
    ```
    {
        wallet_type: 'stock',
        user_id: string,
        symbol: string,
    }
    ```
- Successfull response:
    ```
    {
        status: 200,
        message: "Created wallet successfully!"
        data: {
            id: string,
            owner_id: string,
            wallet_type: 'stock',
            stock: string,
            symbol: string,
            quantity: integer, // default: 0
            }
        }
    }
    ```
### 2. Add balance/quantity Wallet
### 2.1 Deposit fiat balance 
### [PUT] /api/wallet/deposit/:id
- Request Params:
    ```
    {
        wallet_type: 'fiat',
        currency: string,
        quantity: float
    }
    ```
- Successfull response:
    ```
    {
        status: 200,
        message: "Deposit successfully!"
        data: {
            id: string,
            owner_id: string,
            wallet_type: 'fiat',
            currency: string,
            balance: float
        }

    }
    ```
### 2.2 Deposit Stock balance 
### [POST] /api/wallet/deposit/:id
- Request Params:
    ```
    {
        wallet_type: 'stock',
        stock_id: string,
        quantity: float
    }
    ```
- Successfull response:
    ```
    {
        status: 200,
        message: "Deposit successfully!"
        data: {
            id: string,
            owner_id: string,
            wallet_type: 'stock',
            stock: string,
            symbol: string,
            quantity: integer
            }
        }

    }
    ```
## V. Add BUY/SELL Shares
### [POST] /api/stock/shares/add
- Request params:
    ```
    {
        wallet_id: string,
        order_type: string, // 'BUY' | 'SELL'
        quantity: integer,
        price: float,
        fiat_wallet_id: string,
    }
    ```

- Successful response:
    ```
    {
        status: 200,
        message: 'Successful!',
        data: {
             wallets: {
                fiat: [{
                    id: string,
                    currency: string,
                    balance: float
                }],
            stocks: [{
                id: string,
                symbol: string,
                quantity: integer
            }]
        }
    }
    ```
## VI. Stock Price
Shortcut meaning
> o: open price
> c: close price
> h: high price
> l: low price
### 1. Create stock
### [POST] /api/stock/create
- Request params:
    ```
    {
        symbol: string,
    }
    ```
- Successful response:
    ```
    {
        status: 200,
        message: 'Successful!'
        data: [{
            id: string,
            symbol: string,
            company_name: string,
            refreshed_time: string,
            time_zone: string,
            interval: string,
            currency: string,
            o: float,
            c: float,
            h: float,
            l: float
        }]
    }
    ````   ```
### 2. Update stock price info
> This API should be run by a scheduled cron job
> INTRADAY INFO will be fetch from this source: [alphavantage](https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=TSLA&interval=5min&outputsize=full&apikey=AKWEU271H5V6USY4)
### [UPDATE] /api/stocks/:id
- Request:
    ```
    {
        o: float,
        c: float,
        h: float,
        l: float,
        time: string
        currency: string
    }
    ```