API to manage stock portfolios by deploying automated trading strategies.
- Java 21
- Maven
- Spring Boot
- Spring Web
- Spring Validation
- Jakarta Validation
- Spring Data JPA
- MySQL Connector
- Spring Security
- JWT API
- JWT Implementation
- JWT Jackson
- Spring Dotenv
- Lombok
- Spring Test
- H2 Database
- MacOS DNS Resolver
- Docker
- Install dependencies:
./mvnw clean install
- Pull Docker MySQL image for running database server:
docker pull mysql:latest
- Create an external volume for storing MySQL data:
docker volume create stock_portfolio_volume
- Run the container:
docker compose up -d
- Start the application:
./mvnw spring-boot:run
- Stop the container:
docker compose down
Requests can be made to perform the following actions:
- Add Portfolio
- Get Portfolio
- Delete Portfolio
curl --location 'localhost:8080/api/v2/portfolio/add-portfolio' \
--header 'Content-Type: application/json' \
--data '{
"name": "Test Portfolio",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
"currency": "USD"
}'
{
"portfolio": {
"id": 1,
"createdAt": "2025-01-21 14:48:28",
"name": "Test Portfolio",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
"currency": "USD",
"amount": 0,
"stocks": [],
"transactions": []
}
}
curl --location --request GET 'localhost:8080/api/v2/portfolio/get-portfolio' \
--header 'Content-Type: application/json' \
--data '{
"name": "Test Portfolio"
}'
{
"portfolio": {
"id": 1,
"createdAt": "2025-01-21 14:48:28",
"name": "Test Portfolio",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
"currency": "USD",
"amount": 0.0000,
"stocks": [],
"transactions": []
}
}
curl --location --request DELETE 'localhost:8080/api/v2/portfolio/delete-portfolio' \
--header 'Content-Type: application/json' \
--data '{
"name": "Test Portfolio"
}'
{
"status": "Portfolio deleted successfully"
}