Skip to content

Zapulin/visual-rent

Repository files navigation

Visual Rent - Audiovisual Equipment Rental Platform

Introduction

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.

Installation

To initialize the environment, you need to have Docker installed. Once done, simply run the following command:

docker compose up -d --build

The application will be available at:

System Architecture

Backend Microservices (Spring Boot + Java 11)

1. Product Catalog Service (Port: 18081)

Manages the catalog of products and physical items available for rent.

Endpoints:

  • GET /products - List all products
  • GET /products/{productId} - Product details
  • GET /products/{productId}/items - Items of a specific product
  • GET /products/search?name={name}&categoryId={categoryId} - Search products
  • POST /products - Create new product (validation included)
  • POST /products/{productId} - Update product
  • DELETE /products/{productId} - Delete product
  • GET /categories - List all categories
  • GET /categories/{id} - Category details
  • GET /categories/search?name={name}&description={desc}&parentId={parentId} - Search categories
  • POST /categories - Create category
  • GET /items - List all items
  • GET /items/{serialNumber} - Item details
  • POST /items - Create item
  • PATCH /items/{serialNumber} - Mark item as operational/non-operational

2. User Service (Port: 18082)

Manages users, authentication, and availability alerts.

Endpoints:

  • POST /auth/login - User login (returns JWT cookie)
  • GET /auth/me - Authenticated user information
  • POST /auth/logout - Logout (removes JWT cookie)
  • GET /users - List all users
  • GET /users/{userId} - User details
  • GET /users/byEmail/{email} - User by email
  • GET /users/toAlert?productId={productId}&availableOnDate={date} - Users to alert
  • POST /users - Create user
  • PUT /users/{userId} - Update user
  • GET /alerts - List all alerts
  • GET /alerts/{alertId} - Alert details
  • GET /alerts/byProductAndDate?productId={productId}&availableOnDate={date} - Alerts by product and date
  • GET /alerts/byUserAndInterval?userId={userId}&fromDate={from}&toDate={to} - Alerts by user and interval
  • POST /alerts - Create alert

3. Notification Service (Port: 18083)

Manages notifications via Kafka and provides notification history.

Endpoints:

  • GET /api/users/{userId}/notifications - User notifications
  • DELETE /api/users/{userId}/notifications/{notificationId} - Delete notification

Kafka Integration:

  • Consumes product availability events
  • Generates automatic notifications for users with configured alerts

4. Digital Service (Port: 18084)

Manages digital sessions and audiovisual content for approval/rejection.

Endpoints:

  • GET /digital/allDigital - List all digital sessions
  • GET /digital/{digitalSessionId} - Digital session details
  • GET /digital/digitalByUser?email={email} - User sessions
  • POST /digital/createDigital - Create digital session
  • PUT /digital/updateDigital/{digitalSessionId} - Update session
  • DELETE /digital/removeDigital/{digitalSessionId} - Delete session
  • GET /digitalItem/allItems - List all digital items
  • GET /digitalItem/{digitalItemId} - Digital item details
  • GET /digitalItem/digitalItemBySession?digitalSessionId={id} - Items of a session
  • POST /digitalItem/addItem - Add digital item
  • PUT /digitalItem/updateItem/{digitalItemId} - Update item
  • PATCH /digitalItem/reviewDigitalItem/{digitalItemId} - Mark for review
  • PATCH /digitalItem/approveDigitalItem/{digitalItemId} - Approve item
  • PATCH /digitalItem/rejectDigitalItem/{digitalItemId} - Reject item
  • DELETE /digitalItem/dropItem/{digitalItemId} - Delete item

5. Rental Service (Port: 18085)

Manages physical equipment rentals.

Endpoints:

  • GET /rentals - List all rentals
  • GET /rentals/{rentalId} - Rental details
  • GET /rentals/searchByUser/{userId} - User rentals
  • GET /rentals/searchByItem/{itemId} - Item rentals
  • POST /rentals/isAvailable - Check product availability
  • POST /rentals - Create rental (automatically assigns an available item)

Frontend (React + Nginx)

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

Databases (PostgreSQL 16)

  • 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

Additional Infrastructure

  • Kafka + Zookeeper - Asynchronous messaging for notifications
  • Adminer (Port: 18080) - Web interface for database management

Main Features

Authentication System

  • JWT-based authentication with HttpOnly cookies
  • Role-based access control (USER, ADMIN)
  • Route protection based on authentication and role

Product Management

  • 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

Rental System

  • Automatic assignment of available items
  • Date availability validation
  • Automatic normalization of inverted dates
  • Rental history by user and item

Digital Content

  • Creation of digital sessions with geolocation
  • Content approval/rejection workflow
  • States: DRAFT → PENDING → APPROVED/REJECTED

Notifications

  • Availability alert subscription system
  • Automatic sending via Kafka when a product is available
  • Notification history per user

Validations and Robustness

  • DTO validation with Bean Validation
  • Error handling with ResponseStatusException
  • CORS configuration for frontend-backend communication
  • Unit and integration tests
  • Data normalization (dates, external references)

Dockerization

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

Development and Testing

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 Ports

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

About

Microservice-based system built with Spring Boot, React, and containerized infrastructure (Docker, Kafka).

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages