⚠️ This project is currently under active development. APIs and features are subject to change.
- Spring Boot 3.5.4 — Main application framework.
- Java 17 — Language level.
- Spring Starters:
spring-boot-starter-web— REST API development.spring-boot-starter-data-jpa— Database interaction using JPA.spring-boot-starter-security— Authentication and authorization.spring-boot-starter-mail— Sending emails.spring-boot-starter-amqp— Messaging with RabbitMQ.
- Database: PostgreSQL (
org.postgresql:postgresql) — runtime driver. - JWT:
jjwt-api,jjwt-impl,jjwt-jackson— Token authentication. - API Documentation:
springdoc-openapi-starter-webmvc-ui— OpenAPI/Swagger.
- RabbitMQ: Used for asynchronous message handling and audit logging.
- Email Service: Sends notification emails upon important events like invoice creation.
Note: Integration with RabbitMQ and Email service is currently under development and will be added soon.
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<!-- Spring Boot Starter Dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!-- Database -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<!-- JWT -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.12.6</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.12.6</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.12.6</version>
<scope>runtime</scope>
</dependency>
<!-- OpenAPI / Swagger -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.5.0</version>
</dependency>
<!-- Testing -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Request Body:
{
"username": "string",
"email": "string",
"password": "string"
}Response:
{
"status": true,
"message": "string",
"data": {
"userId": "string",
"createAt": "2025-08-09T18:11:16.935Z"
}
}Request Body:
{
"customerName": "string",
"customerEmail": "string",
"totalAmount": 0,
"taxAmount": 0,
"subTotal": 0,
"details": "string",
"userId": "string"
}Response:
{
"status": true,
"message": "string",
"data": {
"invoiceId": 0,
"customerName": "string",
"customerEmail": "string",
"totalAmount": 0,
"taxAmount": 0,
"subTotal": 0,
"details": "string",
"createdAt": "2025-08-09T18:11:16.936Z"
}
}Path Parameter:
| Name | Type | Description |
|---|---|---|
| userId | string | userId |
Response:
{
"status": true,
"message": "string",
"data": [
{
"invoiceId": 0,
"customerName": "string",
"customerEmail": "string",
"totalAmount": 0,
"taxAmount": 0,
"subTotal": 0,
"details": "string",
"createdAt": "2025-08-09T18:11:16.938Z"
}
]
}Request Body:
{
"username": "string",
"password": "string"
}Response:
{
"token": "string"
}| Field | Type |
|---|---|
| username | string |
| string | |
| password | string |
| Field | Type |
|---|---|
| status | boolean |
| message | string |
| data | UserResponse |
| Field | Type |
|---|---|
| userId | string |
| createAt | string (date-time) |
| Field | Type |
|---|---|
| customerName | string |
| customerEmail | string |
| totalAmount | number (double) |
| taxAmount | number (double) |
| subTotal | number (double) |
| details | string |
| userId | string |
| Field | Type |
|---|---|
| status | boolean |
| message | string |
| data | InvoiceDetailsResponse |
| Field | Type |
|---|---|
| invoiceId | integer (int64) |
| customerName | string |
| customerEmail | string |
| totalAmount | number (double) |
| taxAmount | number (double) |
| subTotal | number (double) |
| details | string |
| createdAt | string (date-time) |
| Field | Type |
|---|---|
| username | string |
| password | string |
| Field | Type |
|---|---|
| token | string |
| Field | Type |
|---|---|
| status | boolean |
| message | string |
| data | Array of InvoiceDetailsResponse |