E-commerce backend API built with Spring Boot, MongoDB, Redis, and integrations for Razorpay, Cloudinary, and Google OAuth2.
- Java 21, Spring Boot 3.2.x
- MongoDB (Spring Data MongoDB)
- Redis (Spring Data Redis)
- Spring Security + OAuth2 Client
- Razorpay payments
- Cloudinary media uploads
- Spring Mail (SMTP)
- Lombok, MapStruct
- Java 21
- Maven (or use the included
./mvnw) - MongoDB instance
- Redis instance (optional for caching, required if enabled)
- Razorpay account (for payments)
- Cloudinary account (for media uploads)
- Google OAuth credentials (for social login)
- SMTP credentials (for email)
Configuration lives in:
src/main/resources/application.properties(local/dev)src/main/resources/production.properties(production)
These files currently contain real values. Replace them with your own and avoid committing secrets. Suggested keys to set:
spring.data.mongodb.urispring.data.secretkey(JWT/secret)server.portrazorpay.api.key,razorpay.api.secretshiprocket.api.email,shiprocket.api.passcloudinary.cloud_name,cloudinary.api_key,cloudinary.api_secretspring.redis.host,spring.redis.port,spring.redis.password,spring.redis.ssl.enabledspring.mail.host,spring.mail.port,spring.mail.username,spring.mail.passwordspring.security.oauth2.client.registration.google.*frontend.url
./mvnw spring-boot:run./mvnw testServer starts on http://localhost:8080 by default (see server.port).
Base URL: http://localhost:8080
GET /health/test
Base: /api/auth/user
POST /loginPOST /registerGET /google/loginPOST /logout
Notes:
/validate-tokenexists in routes but is commented out inAuthController.
Admin base: /api/aladdin/admin
GET /validate-token
User base: /api/aladdin/user
GET /validate-token
Base: /api/aladdin/public
GET /product/all-products(supportsname,minPrice,maxPrice,category,collection,stockStatusquery params)GET /product/{productId}GET /product/{productId}/related-productsGET /category/all-categoriesGET /category/{id}
Base: /api/aladdin/admin/category
POST /create-categoryPUT /update-category/{categoryId}DELETE /delete-categoriesPOST /create-attributeGET /all-attributesPUT /update-attribute/{attributeId}DELETE /delete-attributes
Base: /api/aladdin/admin/media
POST /upload-media(multipart/form-data)
Base: /api/aladdin/admin/product
POST /create-productPUT /update-product/{productId}DELETE /delete-product/{productId}
Additional admin product route:
GET /api/aladdin/admin/product/{productId}
Base: /api/aladdin/admin/orders
GET /allPUT /update-orders-status
Base: /api/aladdin/admin/warehouse
POST /create-warehouseGET /all
Base: /api/aladdin/user
PUT /update-profilePOST /add-addressPUT /address/{addressId}DELETE /address/{addressId}(usesaddressIdas request param)PUT /address/{addressId}/default(usesaddressIdas request param)POST /update-profile-image(multipart/form-data)PUT /update-cart
Base: /api/aladdin/user/orders
POST /create
Base: /api/aladdin/user
POST /payment/create-orderPOST /payment/verifyPOST /payment/webhookPOST /verify-legacyGET /status/{razorpayOrderId}
Note: UserRoutes defines /payment/status/{razorpayOrderId}, but the controller maps GET /status/{razorpayOrderId} under /api/aladdin/user.
These are declared in route classes but do not currently have controller methods:
- Admin orders:
POST /api/aladdin/admin/orders/create - Admin orders:
GET /api/aladdin/admin/orders/{orderId} - Admin orders:
PUT /api/aladdin/admin/orders/{orderId}/update - Admin orders:
DELETE /api/aladdin/admin/orders/{orderId}/delete - User orders:
GET /api/aladdin/user/orders/my - User orders:
GET /api/aladdin/user/orders/{orderId} - User orders:
POST /api/aladdin/user/orders/{orderId}/cancel - User orders:
POST /api/aladdin/user/orders/add-to-cart - User routes:
GET /api/aladdin/user/address - User routes:
GET /api/aladdin/user/orders/my-orders
src/
main/
java/com/store/aladdin/
AladdinApplication.java
configs/
controllers/
auth_controllers/
admincontroller/
public_controllers/
user_controllers/
TestingControllers.java
UserController.java
dtos/
exceptions/
filters/
keys/
models/
queries/
repository/
routes/
services/
admin_services/
utils/
helper/
response/
validation/
validations/
resources/
application.properties
production.properties
test/
java/
./mvnw clean package- Make sure MongoDB and Redis are reachable based on the values in
application.properties. - For production, use
production.propertiesor environment-based overrides.