{"id":30861115,"url":"https://github.com/deerborg/invoice-app-api","last_synced_at":"2025-09-07T16:48:42.734Z","repository":{"id":309044476,"uuid":"1034967985","full_name":"deerborg/Invoice-App-API","owner":"deerborg","description":null,"archived":false,"fork":false,"pushed_at":"2025-08-09T12:26:49.000Z","size":18,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-09T14:29:23.242Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/deerborg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-09T11:19:51.000Z","updated_at":"2025-08-09T12:26:52.000Z","dependencies_parsed_at":"2025-08-09T14:29:24.643Z","dependency_job_id":"80505b80-4cb7-4afa-8313-73b748dacbf2","html_url":"https://github.com/deerborg/Invoice-App-API","commit_stats":null,"previous_names":["deerborg/invoice-app-api"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/deerborg/Invoice-App-API","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deerborg%2FInvoice-App-API","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deerborg%2FInvoice-App-API/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deerborg%2FInvoice-App-API/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deerborg%2FInvoice-App-API/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deerborg","download_url":"https://codeload.github.com/deerborg/Invoice-App-API/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deerborg%2FInvoice-App-API/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274065796,"owners_count":25216445,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-07T02:00:09.463Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-07T16:48:39.894Z","updated_at":"2025-09-07T16:48:42.719Z","avatar_url":"https://github.com/deerborg.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Invoice API\n\n\u003e ⚠️ This project is currently under active development. APIs and features are subject to change.\n\n---\n\n### Technologies and Libraries Used\n\n- **Spring Boot 3.5.4** — Main application framework.\n- **Java 17** — Language level.\n- **Spring Starters:**\n    - `spring-boot-starter-web` — REST API development.\n    - `spring-boot-starter-data-jpa` — Database interaction using JPA.\n    - `spring-boot-starter-security` — Authentication and authorization.\n    - `spring-boot-starter-mail` — Sending emails.\n    - `spring-boot-starter-amqp` — Messaging with RabbitMQ.\n- **Database:** PostgreSQL (`org.postgresql:postgresql`) — runtime driver.\n- **JWT:** `jjwt-api`, `jjwt-impl`, `jjwt-jackson` — Token authentication.\n- **API Documentation:** `springdoc-openapi-starter-webmvc-ui` — OpenAPI/Swagger.\n\n---\n\n## Additional Integrations\n\n- **RabbitMQ:** Used for asynchronous message handling and audit logging.\n- **Email Service:** Sends notification emails upon important events like invoice creation.\n\n*Note: Integration with RabbitMQ and Email service is currently under development and will be added soon.*\n\n---\n\n## pom.xml Summary\n\n```xml\n\u003cproperties\u003e\n    \u003cjava.version\u003e17\u003c/java.version\u003e\n\u003c/properties\u003e\n\n\u003cdependencies\u003e\n\u003c!-- Spring Boot Starter Dependencies --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n    \u003cartifactId\u003espring-boot-starter-web\u003c/artifactId\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n    \u003cartifactId\u003espring-boot-starter-data-jpa\u003c/artifactId\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n    \u003cartifactId\u003espring-boot-starter-security\u003c/artifactId\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n    \u003cartifactId\u003espring-boot-starter-mail\u003c/artifactId\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n    \u003cartifactId\u003espring-boot-starter-amqp\u003c/artifactId\u003e\n\u003c/dependency\u003e\n\n\u003c!-- Database --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.postgresql\u003c/groupId\u003e\n    \u003cartifactId\u003epostgresql\u003c/artifactId\u003e\n    \u003cscope\u003eruntime\u003c/scope\u003e\n\u003c/dependency\u003e\n\n\u003c!-- JWT --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.jsonwebtoken\u003c/groupId\u003e\n    \u003cartifactId\u003ejjwt-api\u003c/artifactId\u003e\n    \u003cversion\u003e0.12.6\u003c/version\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.jsonwebtoken\u003c/groupId\u003e\n    \u003cartifactId\u003ejjwt-impl\u003c/artifactId\u003e\n    \u003cversion\u003e0.12.6\u003c/version\u003e\n    \u003cscope\u003eruntime\u003c/scope\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.jsonwebtoken\u003c/groupId\u003e\n    \u003cartifactId\u003ejjwt-jackson\u003c/artifactId\u003e\n    \u003cversion\u003e0.12.6\u003c/version\u003e\n    \u003cscope\u003eruntime\u003c/scope\u003e\n\u003c/dependency\u003e\n\n\u003c!-- OpenAPI / Swagger --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.springdoc\u003c/groupId\u003e\n    \u003cartifactId\u003espringdoc-openapi-starter-webmvc-ui\u003c/artifactId\u003e\n    \u003cversion\u003e2.5.0\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- Testing --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n    \u003cartifactId\u003espring-boot-starter-test\u003c/artifactId\u003e\n    \u003cscope\u003etest\u003c/scope\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.springframework.amqp\u003c/groupId\u003e\n    \u003cartifactId\u003espring-rabbit-test\u003c/artifactId\u003e\n    \u003cscope\u003etest\u003c/scope\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.springframework.security\u003c/groupId\u003e\n    \u003cartifactId\u003espring-security-test\u003c/artifactId\u003e\n    \u003cscope\u003etest\u003c/scope\u003e\n\u003c/dependency\u003e\n\u003c/dependencies\u003e\n\n```\n\n\n\n# API Documentation\n\n---\n\n## User Controller\n\n### POST /api/users/private/register\n\n**Request Body:**\n\n```json\n{\n  \"username\": \"string\",\n  \"email\": \"string\",\n  \"password\": \"string\"\n}\n```\n\n**Response:**\n\n```json\n{\n  \"status\": true,\n  \"message\": \"string\",\n  \"data\": {\n    \"userId\": \"string\",\n    \"createAt\": \"2025-08-09T18:11:16.935Z\"\n  }\n}\n```\n\n---\n\n## Invoice Controller\n\n### POST /api/invoices/private\n\n**Request Body:**\n\n```json\n{\n  \"customerName\": \"string\",\n  \"customerEmail\": \"string\",\n  \"totalAmount\": 0,\n  \"taxAmount\": 0,\n  \"subTotal\": 0,\n  \"details\": \"string\",\n  \"userId\": \"string\"\n}\n```\n\n**Response:**\n\n```json\n{\n  \"status\": true,\n  \"message\": \"string\",\n  \"data\": {\n    \"invoiceId\": 0,\n    \"customerName\": \"string\",\n    \"customerEmail\": \"string\",\n    \"totalAmount\": 0,\n    \"taxAmount\": 0,\n    \"subTotal\": 0,\n    \"details\": \"string\",\n    \"createdAt\": \"2025-08-09T18:11:16.936Z\"\n  }\n}\n```\n\n---\n\n### GET /api/invoices/private/user/{userId}\n\n**Path Parameter:**\n\n| Name   | Type   | Description |\n|--------|--------|-------------|\n| userId | string | userId      |\n\n**Response:**\n\n```json\n{\n  \"status\": true,\n  \"message\": \"string\",\n  \"data\": [\n    {\n      \"invoiceId\": 0,\n      \"customerName\": \"string\",\n      \"customerEmail\": \"string\",\n      \"totalAmount\": 0,\n      \"taxAmount\": 0,\n      \"subTotal\": 0,\n      \"details\": \"string\",\n      \"createdAt\": \"2025-08-09T18:11:16.938Z\"\n    }\n  ]\n}\n```\n\n---\n\n## Auth Controller\n\n### POST /api/auth/public/authenticate\n\n**Request Body:**\n\n```json\n{\n  \"username\": \"string\",\n  \"password\": \"string\"\n}\n```\n\n**Response:**\n\n```json\n{\n  \"token\": \"string\"\n}\n```\n\n---\n\n## Schemas\n\n### CreateUserRequest\n\n| Field    | Type   |\n|----------|--------|\n| username | string |\n| email    | string |\n| password | string |\n\n---\n\n### ApiResponseUserResponse\n\n| Field   | Type         |\n|---------|--------------|\n| status  | boolean      |\n| message | string       |\n| data    | UserResponse |\n\n---\n\n### UserResponse\n\n| Field    | Type               |\n|----------|--------------------|\n| userId   | string             |\n| createAt | string (date-time) |\n\n---\n\n### CreateInvoiceRequest\n\n| Field         | Type            |\n|---------------|-----------------|\n| customerName  | string          |\n| customerEmail | string          |\n| totalAmount   | number (double) |\n| taxAmount     | number (double) |\n| subTotal      | number (double) |\n| details       | string          |\n| userId        | string          |\n\n---\n\n### ApiResponseInvoiceDetailsResponse\n\n| Field   | Type                   |\n|---------|------------------------|\n| status  | boolean                |\n| message | string                 |\n| data    | InvoiceDetailsResponse |\n\n---\n\n### InvoiceDetailsResponse\n\n| Field         | Type               |\n|---------------|--------------------|\n| invoiceId     | integer (int64)    |\n| customerName  | string             |\n| customerEmail | string             |\n| totalAmount   | number (double)    |\n| taxAmount     | number (double)    |\n| subTotal      | number (double)    |\n| details       | string             |\n| createdAt     | string (date-time) |\n\n---\n\n### AuthRequest\n\n| Field    | Type   |\n|----------|--------|\n| username | string |\n| password | string |\n\n---\n\n### AuthResponse\n\n| Field | Type   |\n|-------|--------|\n| token | string |\n\n---\n\n### ApiResponseListInvoiceDetailsResponse\n\n| Field   | Type                            |\n|---------|---------------------------------|\n| status  | boolean                         |\n| message | string                          |\n| data    | Array of InvoiceDetailsResponse |\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeerborg%2Finvoice-app-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeerborg%2Finvoice-app-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeerborg%2Finvoice-app-api/lists"}