# vaibhavsandi/rentmanagementsystem_backend architecture

> Architecture diagram of the GitHub repository vaibhavsandi/rentmanagementsystem_backend, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-06-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/vaibhavsandi/rentmanagementsystem_backend
- Repository: https://github.com/vaibhavsandi/rentmanagementsystem_backend

## Overview

1. This is a Spring Boot monolith for rent management, organized as a layered backend application. The main runtime entrypoint is `DemoApplication`, with configuration and component scanning rooted under `com.app.rentmanagement.demo`.

2. The domain is centered on property-rental operations: flats, renters, rent payments, rent revisions, parking details, expenses, settlements, pending rent, and dashboard summaries. Those concepts are represented consistently across entities, DTOs, services, controllers, and repositories.

3. The primary request flow is standard controller → service → repository → entity. Controllers expose the API, services implement business rules, repositories provide persistence access, and entities model the database state. DTOs are used at the API boundary so controllers do not directly expose persistence models.

4. Persistence is built on Spring Data JPA-style repositories with a relational database model. The entity layer includes `User`, `Flat`, `Renter`, `RentPayment`, `RentRevision`, `ParkingDetails`, `Expense`, and `Settlement`, plus enums such as `PaymentMode`, `RenterStatus`, and `UserRole`.

5. Authentication and authorization are a distinct subsystem. `AuthController` works with `JwtUtil`, `JwtAuthenticationFilter`, `CustomUserDetailsService`, and `CustomUserDetails` to secure the API with JWT-based login and request filtering. `User` is the security principal stored in the domain model.

6. There is a clear separation between API contracts and internal models through the mapper layer. Mappers convert between entities and DTOs for flats, renters, parking details, rent payments, revisions, expenses, and settlements, which keeps controller payloads stable and limits coupling to persistence shape.

7. Business services are split by feature area, each with its own interface and implementation pair. The service layer includes `Flat`, `Renter`, `Parking`, `RentPayment`, `Expense`, `Settlement`, `PendingRent`, and `Dashboard` services, indicating a modular but single-process architecture rather than separate microservices.

8. Reporting is a separate output path from the core CRUD flows. `ReportController` delegates to `ExcelReportService` and `PdfReportService`, which likely aggregate data from the same domain services/repositories and render downloadable reports in spreadsheet and PDF formats.

9. Cross-cutting concerns are centralized. `GlobalExceptionHandler` turns domain and validation failures into structured API errors, while custom exceptions such as `ResourceNotFoundException`, `DuplicateRecordException`, `BadRequestException`, and `FlatDeleteException` define business-specific failure boundaries.

10. Auditing and shared utilities support the domain model. `BaseEntity` and `AuditAwareImpl` indicate created/modified metadata tracking via JPA auditing, while `AppConstants`, `CommonUtil`, and `DateUtil` provide shared application-level helpers used across features.

11. `AppConfig` and `SwaggerConfig` show that the app also exposes API documentation and general Spring configuration. Swagger/OpenAPI is part of the developer-facing interface, but it does not change the runtime business flow.

12. Overall, the architecture is a classic layered Spring Boot backend with a security boundary in front of feature controllers, a service-centered business layer, repository-backed persistence, and specialized report/export paths for operational outputs.

Main entry points: [`src/main/java/com/app/rentmanagement/demo/controller/FlatController.java`](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/controller/FlatController.java) (Feature APIs), [`src/main/java/com/app/rentmanagement/demo/entity/Flat.java`](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/entity/Flat.java) (Domain Models), [`src/main/java/com/app/rentmanagement/demo/service/FlatService.java`](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/service/FlatService.java) (Flat Service), [`src/main/java/com/app/rentmanagement/demo/service/ParkingService.java`](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/service/ParkingService.java) (Ops Services)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_g_bootstrap["Bootstrap"]
  node_n_demo_application(("DemoApp<br/>spring boot entrypoint"))
  node_n_app_config["Config<br/>[AppConfig.java]"]
end

subgraph group_g_api["API Layer"]
  node_n_auth_controller["Auth API<br/>controller"]
  node_n_feature_controllers["Feature APIs<br/>controllers"]
  node_n_report_controller["Report API<br/>controller"]
end

subgraph group_g_domain["Domain Layer"]
  node_n_flat_service["Flat Service<br/>[FlatService.java]"]
  node_n_renter_service["Renter Service<br/>[RenterService.java]"]
  node_n_payment_service["Payment Service"]
  node_n_ops_services["Ops Services"]
  node_n_mappers["Mappers<br/>dto mapper<br/>[FlatMapper.java]"]
end

subgraph group_g_persistence["Persistence"]
  node_n_flat_repo["Flat Repo"]
  node_n_renter_repo["Renter Repo"]
  node_n_payment_repo["Payment Repo"]
  node_n_ops_repos["Ops Repos<br/>repositories"]
  node_n_domain_entities[("Domain Models<br/>entities<br/>[Flat.java]")]
end

subgraph group_g_security["Security"]
  node_n_auth_service["Auth Service<br/>security service"]
  node_n_jwt_filter["JWT Filter<br/>request filter"]
  node_n_jwt_util["JWT Utils<br/>token helper<br/>[JwtUtil.java]"]
  node_n_user_details["User Details<br/>security principal"]
end

subgraph group_g_shared["Shared"]
  node_n_auditing["Auditing<br/>[BaseEntity.java]"]
  node_n_exceptions["Errors<br/>exception layer"]
  node_n_reports["Reports<br/>export services"]
  node_n_utils["Utilities<br/>helpers<br/>[AppConstants.java]"]
end

node_n_demo_application -->|"loads"| node_n_app_config
node_n_demo_application -->|"starts"| node_n_auth_controller
node_n_demo_application -->|"starts"| node_n_feature_controllers
node_n_demo_application -->|"starts"| node_n_report_controller
node_n_auth_controller -->|"authenticates"| node_n_auth_service
node_n_auth_service -->|"uses"| node_n_jwt_util
node_n_jwt_filter -->|"verifies"| node_n_jwt_util
node_n_jwt_filter -->|"loads user"| node_n_auth_service
node_n_auth_service -->|"builds"| node_n_user_details
node_n_feature_controllers -->|"delegates"| node_n_flat_service
node_n_feature_controllers -->|"delegates"| node_n_renter_service
node_n_feature_controllers -->|"delegates"| node_n_payment_service
node_n_feature_controllers -->|"delegates"| node_n_ops_services
node_n_feature_controllers -->|"translates"| node_n_mappers
node_n_report_controller -->|"generates"| node_n_reports
node_n_report_controller -->|"aggregates"| node_n_ops_services
node_n_flat_service -->|"persists"| node_n_flat_repo
node_n_renter_service -->|"persists"| node_n_renter_repo
node_n_payment_service -->|"persists"| node_n_payment_repo
node_n_ops_services -->|"persists"| node_n_ops_repos
node_n_flat_service -->|"models"| node_n_domain_entities
node_n_renter_service -->|"models"| node_n_domain_entities
node_n_payment_service -->|"models"| node_n_domain_entities
node_n_ops_services -->|"models"| node_n_domain_entities
node_n_mappers -->|"converts"| node_n_domain_entities
node_n_mappers -->|"uses"| node_n_utils
node_n_domain_entities -->|"extends"| node_n_auditing
node_n_exceptions -->|"guards"| node_n_flat_service
node_n_exceptions -->|"guards"| node_n_renter_service
node_n_exceptions -->|"guards"| node_n_payment_service
node_n_utils -->|"supports"| node_n_flat_service
node_n_utils -->|"supports"| node_n_ops_services

click node_n_demo_application "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/DemoApplication.java"
click node_n_app_config "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/config/AppConfig.java"
click node_n_auth_controller "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/controller/AuthController.java"
click node_n_feature_controllers "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/controller/FlatController.java"
click node_n_report_controller "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/report/ReportController.java"
click node_n_auth_service "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/security/CustomUserDetailsService.java"
click node_n_jwt_filter "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/security/JwtAuthenticationFilter.java"
click node_n_jwt_util "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/security/JwtUtil.java"
click node_n_user_details "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/security/CustomUserDetails.java"
click node_n_flat_service "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/service/FlatService.java"
click node_n_renter_service "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/service/RenterService.java"
click node_n_payment_service "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/service/RentPaymentService.java"
click node_n_ops_services "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/service/ParkingService.java"
click node_n_mappers "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/mapper/FlatMapper.java"
click node_n_flat_repo "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/repository/FlatRepository.java"
click node_n_renter_repo "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/repository/RenterRepository.java"
click node_n_payment_repo "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/repository/RentPaymentRepository.java"
click node_n_ops_repos "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/repository/ParkingRepository.java"
click node_n_domain_entities "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/entity/Flat.java"
click node_n_auditing "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/audit/BaseEntity.java"
click node_n_exceptions "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/exception/GlobalExceptionHandler.java"
click node_n_reports "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/report/ExcelReportService.java"
click node_n_utils "https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/util/AppConstants.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_n_demo_application,node_n_app_config toneBlue
class node_n_auth_controller,node_n_feature_controllers,node_n_report_controller toneAmber
class node_n_flat_service,node_n_renter_service,node_n_payment_service,node_n_ops_services,node_n_mappers toneMint
class node_n_flat_repo,node_n_renter_repo,node_n_payment_repo,node_n_ops_repos,node_n_domain_entities toneRose
class node_n_auth_service,node_n_jwt_filter,node_n_jwt_util,node_n_user_details toneIndigo
class node_n_auditing,node_n_exceptions,node_n_reports,node_n_utils toneTeal
```

## Components

### Bootstrap

Application entrypoint and configuration

- [DemoApp](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/DemoApplication.java): spring boot entrypoint · Main application bootstrap and component scan root · `src/main/java/com/app/rentmanagement/demo/DemoApplication.java`
- [Config](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/config/AppConfig.java): spring config · Application and Swagger configuration · `src/main/java/com/app/rentmanagement/demo/config/AppConfig.java`

### API Layer

Controllers exposed to clients

- [Auth API](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/controller/AuthController.java): controller · Login and authentication endpoints · `src/main/java/com/app/rentmanagement/demo/controller/AuthController.java`
- [Feature APIs](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/controller/FlatController.java): controllers · Flat, renter, payment, parking, expense, settlement, pending-rent, and dashboard endpoints · `src/main/java/com/app/rentmanagement/demo/controller/FlatController.java`
- [Report API](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/report/ReportController.java): controller · Export endpoints for spreadsheet and PDF reports · `src/main/java/com/app/rentmanagement/demo/report/ReportController.java`

### Domain Layer

Feature services and supporting mappers

- [Flat Service](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/service/FlatService.java): service · Flat management business rules · `src/main/java/com/app/rentmanagement/demo/service/FlatService.java`
- [Renter Service](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/service/RenterService.java): service · Renter lifecycle and status rules · `src/main/java/com/app/rentmanagement/demo/service/RenterService.java`
- [Payment Service](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/service/RentPaymentService.java): service · Rent payment processing and revisions · `src/main/java/com/app/rentmanagement/demo/service/RentPaymentService.java`
- [Ops Services](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/service/ParkingService.java): services · Parking, expense, settlement, pending rent, and dashboard logic · `src/main/java/com/app/rentmanagement/demo/service/ParkingService.java`
- [Mappers](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/mapper/FlatMapper.java): dto mapper · Entity-to-DTO conversions for API boundaries · `src/main/java/com/app/rentmanagement/demo/mapper/FlatMapper.java`

### Persistence

Repositories and entities

- [Flat Repo](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/repository/FlatRepository.java): repository · Persistence access for flats · `src/main/java/com/app/rentmanagement/demo/repository/FlatRepository.java`
- [Renter Repo](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/repository/RenterRepository.java): repository · Persistence access for renters · `src/main/java/com/app/rentmanagement/demo/repository/RenterRepository.java`
- [Payment Repo](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/repository/RentPaymentRepository.java): repository · Persistence access for rent payments and revisions · `src/main/java/com/app/rentmanagement/demo/repository/RentPaymentRepository.java`
- [Ops Repos](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/repository/ParkingRepository.java): repositories · Parking, expense, settlement, and user persistence access · `src/main/java/com/app/rentmanagement/demo/repository/ParkingRepository.java`
- [Domain Models](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/entity/Flat.java): entities · Flats, renters, payments, revisions, parking, expenses, settlements, and users · `src/main/java/com/app/rentmanagement/demo/entity/Flat.java`

### Security

JWT authentication and principal loading

- [Auth Service](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/security/CustomUserDetailsService.java): security service · JWT login support and user principal loading · `src/main/java/com/app/rentmanagement/demo/security/CustomUserDetailsService.java`
- [JWT Filter](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/security/JwtAuthenticationFilter.java): request filter · Validates incoming bearer tokens on secured requests · `src/main/java/com/app/rentmanagement/demo/security/JwtAuthenticationFilter.java`
- [JWT Utils](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/security/JwtUtil.java): token helper · Token creation and validation utilities · `src/main/java/com/app/rentmanagement/demo/security/JwtUtil.java`
- [User Details](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/security/CustomUserDetails.java): security principal · Spring Security user wrapper around domain users · `src/main/java/com/app/rentmanagement/demo/security/CustomUserDetails.java`

### Shared

Auditing, exceptions, utilities, and reporting

- [Auditing](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/audit/BaseEntity.java): jpa auditing · Base entity metadata and auditor provider · `src/main/java/com/app/rentmanagement/demo/audit/BaseEntity.java`
- [Errors](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/exception/GlobalExceptionHandler.java): exception layer · Global handler and business exceptions · `src/main/java/com/app/rentmanagement/demo/exception/GlobalExceptionHandler.java`
- [Reports](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/report/ExcelReportService.java): export services · Excel and PDF report generation · `src/main/java/com/app/rentmanagement/demo/report/ExcelReportService.java`
- [Utilities](https://github.com/vaibhavsandi/rentmanagementsystem_backend/blob/main/src/main/java/com/app/rentmanagement/demo/util/AppConstants.java): helpers · Shared constants and date/common helpers · `src/main/java/com/app/rentmanagement/demo/util/AppConstants.java`

## Connections

- DemoApp → Config: loads · Bootstraps Spring configuration and component scanning
- DemoApp → Auth API: starts · Exposes the API runtime
- DemoApp → Feature APIs: starts · Registers feature endpoints
- DemoApp → Report API: starts · Registers report endpoints
- Auth API → Auth Service: authenticates · Delegates login and user lookup
- Auth Service → JWT Utils: uses · Creates and validates JWTs
- JWT Filter → JWT Utils: verifies · Checks bearer tokens on requests
- JWT Filter → Auth Service: loads user · Resolves authenticated principal
- Auth Service → User Details: builds · Wraps domain users as security principals
- Feature APIs → Flat Service: delegates · Flat API calls into business logic
- Feature APIs → Renter Service: delegates · Renter API calls into business logic
- Feature APIs → Payment Service: delegates · Payment API calls into business logic
- Feature APIs → Ops Services: delegates · Parking, expense, settlement, pending-rent, and dashboard requests
- Feature APIs → Mappers: translates · Uses DTO mappings at the API boundary
- Report API → Reports: generates · Produces Excel and PDF outputs
- Report API → Ops Services: aggregates · Pulls operational data for reports
- Flat Service → Flat Repo: persists · Reads and writes flat records
- Renter Service → Renter Repo: persists · Reads and writes renter records
- Payment Service → Payment Repo: persists · Reads and writes payment and revision records
- Ops Services → Ops Repos: persists · Uses specialized repositories for operations
- Flat Service → Domain Models: models · Operates on flat domain state
- Renter Service → Domain Models: models · Operates on renter domain state
- Payment Service → Domain Models: models · Operates on rent payment and revision state
- Ops Services → Domain Models: models · Operates on parking, expense, settlement, and dashboard state
- Mappers → Domain Models: converts · Maps entities to DTOs and back
- Mappers → Utilities: uses · Relies on shared helpers for formatting and dates
- Domain Models → Auditing: extends · Common base entity metadata and audit fields
- Errors → Flat Service: guards · Surfaces service and validation failures
- Errors → Renter Service: guards · Surfaces service and validation failures
- Errors → Payment Service: guards · Surfaces service and validation failures
- Utilities → Flat Service: supports · Shared constants and date utilities
- Utilities → Ops Services: supports · Shared constants and helper functions
