Visual Rent is a complete audiovisual equipment rental platform developed with microservices architecture. The system allows managing products, physical rentals, digital content, notifications, and users with different access roles.
To initialize the environment, you need to have Docker installed. Once done, simply run the following command:
docker compose up -d --buildThe application will be available at:
- Frontend: http://localhost:3000
- Adminer (database management): http://localhost:18080
Manages the catalog of products and physical items available for rent.
Endpoints:
GET /products- List all productsGET /products/{productId}- Product detailsGET /products/{productId}/items- Items of a specific productGET /products/search?name={name}&categoryId={categoryId}- Search productsPOST /products- Create new product (validation included)POST /products/{productId}- Update productDELETE /products/{productId}- Delete productGET /categories- List all categoriesGET /categories/{id}- Category detailsGET /categories/search?name={name}&description={desc}&parentId={parentId}- Search categoriesPOST /categories- Create categoryGET /items- List all itemsGET /items/{serialNumber}- Item detailsPOST /items- Create itemPATCH /items/{serialNumber}- Mark item as operational/non-operational
Manages users, authentication, and availability alerts.
Endpoints:
POST /auth/login- User login (returns JWT cookie)GET /auth/me- Authenticated user informationPOST /auth/logout- Logout (removes JWT cookie)GET /users- List all usersGET /users/{userId}- User detailsGET /users/byEmail/{email}- User by emailGET /users/toAlert?productId={productId}&availableOnDate={date}- Users to alertPOST /users- Create userPUT /users/{userId}- Update userGET /alerts- List all alertsGET /alerts/{alertId}- Alert detailsGET /alerts/byProductAndDate?productId={productId}&availableOnDate={date}- Alerts by product and dateGET /alerts/byUserAndInterval?userId={userId}&fromDate={from}&toDate={to}- Alerts by user and intervalPOST /alerts- Create alert
Manages notifications via Kafka and provides notification history.
Endpoints:
GET /api/users/{userId}/notifications- User notificationsDELETE /api/users/{userId}/notifications/{notificationId}- Delete notification
Kafka Integration:
- Consumes product availability events
- Generates automatic notifications for users with configured alerts
Manages digital sessions and audiovisual content for approval/rejection.
Endpoints:
GET /digital/allDigital- List all digital sessionsGET /digital/{digitalSessionId}- Digital session detailsGET /digital/digitalByUser?email={email}- User sessionsPOST /digital/createDigital- Create digital sessionPUT /digital/updateDigital/{digitalSessionId}- Update sessionDELETE /digital/removeDigital/{digitalSessionId}- Delete sessionGET /digitalItem/allItems- List all digital itemsGET /digitalItem/{digitalItemId}- Digital item detailsGET /digitalItem/digitalItemBySession?digitalSessionId={id}- Items of a sessionPOST /digitalItem/addItem- Add digital itemPUT /digitalItem/updateItem/{digitalItemId}- Update itemPATCH /digitalItem/reviewDigitalItem/{digitalItemId}- Mark for reviewPATCH /digitalItem/approveDigitalItem/{digitalItemId}- Approve itemPATCH /digitalItem/rejectDigitalItem/{digitalItemId}- Reject itemDELETE /digitalItem/dropItem/{digitalItemId}- Delete item
Manages physical equipment rentals.
Endpoints:
GET /rentals- List all rentalsGET /rentals/{rentalId}- Rental detailsGET /rentals/searchByUser/{userId}- User rentalsGET /rentals/searchByItem/{itemId}- Item rentalsPOST /rentals/isAvailable- Check product availabilityPOST /rentals- Create rental (automatically assigns an available item)
Public Pages:
/- Home: Main page with platform presentation/about- About: Team information/products- Catalog: Catalog of available products
Authentication Pages (unauthenticated only):
/login- Login: Login form/signup- Sign Up: New user registration
User Pages (requires authentication):
/profile/edit- Edit Profile: User profile editing/sessions- Sessions: Digital sessions management (USER role)
Administration Pages (requires ADMIN role):
/admin/products/new- New Product: Product creation form/admin/products/:productId/edit- Edit Product: Existing product editing/admin/products/:productId/view- View Product: Detailed product view/admin/revisio- Content Review: Digital content review and approval
- productdb (Port: 54320) - Products, categories, and items
- userdb (Port: 54321) - Users and alerts
- digitaldb (Port: 54322) - Digital sessions and items
- rentaldb (Port: 54323) - Rentals
- notificationdb (Port: 54324) - Notification history
- Kafka + Zookeeper - Asynchronous messaging for notifications
- Adminer (Port: 18080) - Web interface for database management
- JWT-based authentication with HttpOnly cookies
- Role-based access control (USER, ADMIN)
- Route protection based on authentication and role
- Catalog with hierarchical categories
- Form validation with Spring annotations (@NotBlank, @NotNull, @Min)
- Search by name and category
- Management of physical items associated with each product
- Operational status control of items
- Automatic assignment of available items
- Date availability validation
- Automatic normalization of inverted dates
- Rental history by user and item
- Creation of digital sessions with geolocation
- Content approval/rejection workflow
- States: DRAFT → PENDING → APPROVED/REJECTED
- Availability alert subscription system
- Automatic sending via Kafka when a product is available
- Notification history per user
- DTO validation with Bean Validation
- Error handling with ResponseStatusException
- CORS configuration for frontend-backend communication
- Unit and integration tests
- Data normalization (dates, external references)
The entire environment is fully dockerized:
- Dockerfiles for each backend and frontend service
- docker-compose.yml with complete orchestration
- Shared bridge network (gr-network)
- Persistent volumes for databases
- Environment variables for dynamic configuration
The project includes:
- Unit tests with JUnit and Mockito
- Integration tests
- E2E tests with Cypress (frontend)
- SonarQube integration for code analysis
- CI/CD pipeline with GitLab
| Service | Port | Description |
|---|---|---|
| Frontend | 3000 | React Application |
| Product Catalog Service | 18081 | Products and categories API |
| User Service | 18082 | Users and authentication API |
| Notification Service | 18083 | Notifications API |
| Digital Service | 18084 | Digital content API |
| Rental Service | 18085 | Rentals API |
| Adminer | 18080 | Database management |
| productdb | 54320 | PostgreSQL |
| userdb | 54321 | PostgreSQL |
| digitaldb | 54322 | PostgreSQL |
| rentaldb | 54323 | PostgreSQL |
| notificationdb | 54324 | PostgreSQL |
| Kafka | 9092 | Message Broker |