A Spring Boot RESTful backend application for managing Categories and Products. This project demonstrates CRUD operations, pagination, sorting, validation, exception handling, OpenAPI (Swagger), Docker deployment, and cloud deployment on Render.
- Java 21
- Spring Boot 3.4.5
- Spring Security
- JWT Authentication
- Spring Web
- Spring Data JPA
- H2 Database
- Maven
- ModelMapper
- Spring Validation
- SpringDoc OpenAPI (Swagger)
- Docker
- Render Cloud Deployment
- Category Management
- Product Management
- CRUD Operations
- Pagination
- Sorting
- Input Validation
- Global Exception Handling
- RESTful API Design
- JWT Authentication
- User Registration
- User Login
- Role-Based Authorization
- Secure REST APIs
- Swagger Documentation
- Dockerized Deployment
- Cloud Deployment on Render
src
├── controller
├── service
├── repositories
├── model
├── payload
├── security
│ ├── jwt
│ ├── request
│ ├── response
│ └── services
├── exceptions
├── config
└── resources
Base URL
https://ecommerce-my33.onrender.com
http://localhost:8080/swagger-ui/index.html
https://ecommerce-my33.onrender.com/swagger-ui/index.html
http://localhost:8080/v3/api-docs
https://ecommerce-my33.onrender.com/v3/api-docs
| Method | Endpoint |
|---|---|
| POST | /api/auth/signup |
Request Body
{
"username": "priyam",
"email": "priyam@gmail.com",
"password": "12345678",
"role": [
"admin"
]
}Example
POST /api/auth/signup
| Method | Endpoint |
|---|---|
| POST | /api/auth/signin |
Request Body
{
"username": "priyam",
"password": "12345678"
}Example
POST /api/auth/signin
| Method | Endpoint |
|---|---|
| POST | /api/auth/signout |
Example
POST /api/auth/signout
| Method | Endpoint |
|---|---|
| GET | /api/auth/user |
Example
GET /api/auth/user
| Method | Endpoint |
|---|---|
| GET | /api/auth/username |
Example
GET /api/auth/username
| Method | Endpoint |
|---|---|
| GET | /api/public/categories |
Query Parameters
| Parameter | Description |
|---|---|
| pageNumber | Page Number |
| pageSize | Records Per Page |
| sortBy | Sort Field |
| sortOrder | asc / desc |
Example
GET /api/public/categories?pageNumber=0&pageSize=5&sortBy=categoryId&sortOrder=asc
| Method | Endpoint |
|---|---|
| POST | /api/public/categories |
Request Body
{
"categoryName": "Electronics"
}Example
POST /api/public/categories
| Method | Endpoint |
|---|---|
| PUT | /api/public/categories/{id} |
Example
PUT /api/public/categories/1
Request Body
{
"categoryName": "Mobiles"
}| Method | Endpoint |
|---|---|
| DELETE | /api/admin/categories/{id} |
Example
DELETE /api/admin/categories/1
| Method | Endpoint |
|---|---|
| POST | /api/admin/categories/{categoryId}/product |
Example
POST /api/admin/categories/1/product
Request Body
{
"productName": "Laptop",
"image": "laptop.jpg",
"description": "Gaming Laptop",
"quantity": 10,
"price": 85000,
"discount": 5,
"specialPrice": 80750
}| Method | Endpoint |
|---|---|
| GET | /api/public/products |
Query Parameters
| Parameter | Description |
|---|---|
| pageNumber | Page Number |
| pageSize | Records Per Page |
| sortBy | Sort Field |
| sortOrder | asc / desc |
Example
GET /api/public/products?pageNumber=0&pageSize=5
| Method | Endpoint |
|---|---|
| GET | /api/public/categories/{categoryId}/products |
Example
GET /api/public/categories/1/products
| Method | Endpoint |
|---|---|
| GET | /api/public/products/keyword/{keyword} |
Example
GET /api/public/products/keyword/laptop
| Method | Endpoint |
|---|---|
| POST | /api/admin/categories/{categoryId}/product |
Request Body
{
"productName": "Laptop",
"image": "laptop.jpg",
"description": "Gaming Laptop",
"quantity": 10,
"price": 85000,
"discount": 5,
"specialPrice": 80750
}Example
POST /api/admin/categories/1/product
| Method | Endpoint |
|---|---|
| PUT | /api/admin/products/{productId} |
Request Body
{
"productName": "Laptop Pro",
"image": "laptop.jpg",
"description": "Updated Gaming Laptop",
"quantity": 20,
"price": 95000,
"discount": 10,
"specialPrice": 85500
}Example
PUT /api/admin/products/1
| Method | Endpoint |
|---|---|
| DELETE | /api/admin/products/{productId} |
Example
DELETE /api/admin/products/1
Clone the repository
git clone https://github.com/PriyamChakrabarty/ecommerce.gitMove into the project
cd ecommerceRun
./mvnw spring-boot:runor
mvn spring-boot:runBuild
docker build -t ecommerce-api .Run
docker run -p 8080:8080 ecommerce-apiCurrent Database
- H2 In-Memory Database
Connection
jdbc:h2:mem:test
Note: Since H2 is an in-memory database, data will be cleared whenever the application restarts. For production deployments, consider using PostgreSQL or MySQL.
- JWT Authentication
- Spring Security
- User Registration & Login
- Shopping Cart
- Order Management
- Image Upload
- PostgreSQL Database
- Role-Based Authorization
- Unit & Integration Testing
- CI/CD Pipeline
Priyam Chakrabarty
GitHub
https://github.com/PriyamChakrabarty