{"id":32078522,"url":"https://github.com/cardozoaldama/bancapp-snpp","last_synced_at":"2026-04-27T16:33:01.203Z","repository":{"id":318975645,"uuid":"1064788461","full_name":"cardozoaldama/bancapp-snpp","owner":"cardozoaldama","description":"It's an exam project from Java Web Development","archived":false,"fork":false,"pushed_at":"2025-10-16T00:27:32.000Z","size":201,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-16T22:47:48.956Z","etag":null,"topics":["java","maven","maven-pom","spring","spring-boot","springboot"],"latest_commit_sha":null,"homepage":"","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/cardozoaldama.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-26T14:52:36.000Z","updated_at":"2025-10-16T00:27:36.000Z","dependencies_parsed_at":"2025-10-17T14:19:27.126Z","dependency_job_id":"e4e2824d-0d52-4d34-85ca-ded398805082","html_url":"https://github.com/cardozoaldama/bancapp-snpp","commit_stats":null,"previous_names":["cardozoaldama/bancapp-snpp"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/cardozoaldama/bancapp-snpp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cardozoaldama%2Fbancapp-snpp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cardozoaldama%2Fbancapp-snpp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cardozoaldama%2Fbancapp-snpp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cardozoaldama%2Fbancapp-snpp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cardozoaldama","download_url":"https://codeload.github.com/cardozoaldama/bancapp-snpp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cardozoaldama%2Fbancapp-snpp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32345804,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"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":["java","maven","maven-pom","spring","spring-boot","springboot"],"created_at":"2025-10-19T08:21:06.172Z","updated_at":"2026-04-27T16:33:01.198Z","avatar_url":"https://github.com/cardozoaldama.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🏦 Bancapp - Banking Application API\n\nA comprehensive RESTful API for a banking system built with Spring Boot. This project demonstrates best practices in backend development, including entity relationships, transaction management, and exception handling.\n\n\u003e **📚 Educational Project:** This application is designed for learning purposes, showcasing Spring Boot architecture, REST API design, and banking domain modeling.\n\n---\n\n## 📋 Table of Contents\n\n- [Features](#-features)\n- [Tech Stack](#-tech-stack)\n- [Project Structure](#-project-structure)\n- [Domain Model](#-domain-model)\n- [API Endpoints](#-api-endpoints)\n- [Getting Started](#-getting-started)\n- [Configuration](#-configuration)\n- [Exception Handling](#-exception-handling)\n- [Translation Note](#-translation-note)\n\n---\n\n## ✨ Features\n\n### Core Banking Operations\n- ✅ **User Management** - Create and manage bank users\n- ✅ **Account Management** - Savings and checking accounts\n- ✅ **Deposits** - Add funds to accounts\n- ✅ **Transfers** - Transfer money between accounts\n- ✅ **Service Payments** - Pay utility bills (water, electricity, internet, phone, gas, cable)\n- ✅ **Loan Management** - Request and manage loans with status tracking\n\n### Technical Features\n- ✅ **RESTful API** - Complete CRUD operations for all entities\n- ✅ **Transaction Management** - Atomic operations for financial transactions\n- ✅ **Balance Validation** - Prevents overdrafts and invalid transfers\n- ✅ **Audit Trail** - Automatic timestamps (createdAt, updatedAt) on all entities\n- ✅ **Global Exception Handling** - Consistent error responses\n- ✅ **Data Validation** - Bean validation on all inputs\n- ✅ **JPA Auditing** - Automated entity tracking\n\n---\n\n## 🛠️ Tech Stack\n\n### Core Technologies\n- **Java 17+** - Programming language\n- **Spring Boot 3.x** - Application framework\n- **Spring Data JPA** - Data persistence\n- **Hibernate** - ORM implementation\n- **Maven** - Dependency management\n\n### Database\n- **H2 Database** (Development) - In-memory database for testing\n- **PostgreSQL/MySQL** (Production) - Production-ready databases\n\n### Additional Libraries\n- **Lombok** - Reduces boilerplate code\n- **Jakarta Validation** - Bean validation\n- **Spring Web** - RESTful web services\n\n---\n\n## 📁 Project Structure\n\n```\nsrc/main/java/com/intepy/bancapp/\n│\n├── config/\n│   └── JpaAuditingConfig.java          # JPA auditing configuration\n│\n├── controllers/                         # REST API endpoints\n│   ├── UserController.java\n│   ├── AccountController.java\n│   ├── LoanController.java\n│   ├── BillController.java\n│   ├── DepositController.java\n│   ├── TransferController.java\n│   └── ServicePaymentController.java\n│\n├── dto/\n│   └── ErrorResponse.java              # Standardized error responses\n│\n├── entities/                            # Domain models\n│   ├── User.java\n│   ├── Account.java\n│   ├── Loan.java\n│   ├── Service.java\n│   ├── Deposit.java\n│   ├── Transfer.java\n│   ├── ServicePayment.java\n│   └── enums/\n│       ├── AccountType.java            # SAVINGS, CHECKING\n│       ├── LoanStatus.java             # APPROVED, PENDING, REJECTED\n│       └── ServiceType.java            # WATER, ELECTRICITY, INTERNET, etc.\n│\n├── exceptions/                          # Custom exceptions\n│   ├── EntityNotFoundException.java\n│   ├── InsufficientBalanceException.java\n│   ├── InvalidTransferException.java\n│   ├── ValidationException.java\n│   └── GlobalExceptionHandler.java     # Centralized exception handling\n│\n├── repositories/                        # Data access layer\n│   ├── UserRepository.java\n│   ├── AccountRepository.java\n│   ├── LoanRepository.java\n│   ├── ServiceRepository.java\n│   ├── DepositRepository.java\n│   ├── TransferRepository.java\n│   └── ServicePaymentRepository.java\n│\n└── services/                            # Business logic layer\n    ├── UserService.java\n    ├── AccountService.java\n    ├── LoanService.java\n    ├── BillService.java\n    ├── DepositService.java\n    ├── TransferService.java\n    └── ServicePaymentService.java\n```\n\n---\n\n## 🗄️ Domain Model\n\n### Entity Relationships\n\n```\nUser (1) ────── (*) Account\n  │\n  └────── (*) Loan\n\nAccount (1) ────── (*) Deposit\n   │\n   ├────── (*) Transfer (as source)\n   │\n   ├────── (*) Transfer (as destination)\n   │\n   └────── (*) ServicePayment\n\nService (1) ────── (*) ServicePayment\n```\n\n### Key Entities\n\n**User**\n- `id` - Unique identifier\n- `name` - User's full name\n- `email` - Contact email\n- `accounts` - List of bank accounts\n- `loans` - List of loan applications\n\n**Account**\n- `id` - Unique identifier\n- `number` - Account number\n- `balance` - Current balance\n- `accountType` - SAVINGS or CHECKING\n- `user` - Account owner\n- `deposits` - Transaction history\n- `outgoingTransfers` - Sent transfers\n- `incomingTransfers` - Received transfers\n- `payments` - Service payments\n\n**Transfer**\n- `id` - Unique identifier\n- `amount` - Transfer amount\n- `sourceAccount` - Origin account\n- `destinationAccount` - Target account\n- Validates: sufficient balance, different accounts\n\n**Loan**\n- `id` - Unique identifier\n- `amount` - Loan amount\n- `status` - APPROVED, PENDING, or REJECTED\n- `user` - Loan applicant\n\n---\n\n## 🌐 API Endpoints\n\n### Base URL\n```\nhttp://localhost:8080/api\n```\n\n### Users\n```http\nGET    /api/users          # List all users\nGET    /api/users/{id}     # Get user by ID\nPOST   /api/users          # Create new user\nPUT    /api/users/{id}     # Update user\nDELETE /api/users/{id}     # Delete user\n```\n\n### Accounts\n```http\nGET    /api/accounts          # List all accounts\nGET    /api/accounts/{id}     # Get account by ID\nPOST   /api/accounts          # Create new account\nPUT    /api/accounts/{id}     # Update account\nDELETE /api/accounts/{id}     # Delete account\n```\n\n### Deposits\n```http\nGET    /api/deposits          # List all deposits\nGET    /api/deposits/{id}     # Get deposit by ID\nPOST   /api/deposits          # Create deposit (adds to balance)\nPUT    /api/deposits/{id}     # Update deposit\nDELETE /api/deposits/{id}     # Delete deposit (reverts balance)\n```\n\n### Transfers\n```http\nGET    /api/transfers          # List all transfers\nGET    /api/transfers/{id}     # Get transfer by ID\nPOST   /api/transfers          # Create transfer\nPUT    /api/transfers/{id}     # Update transfer\nDELETE /api/transfers/{id}     # Delete transfer (reverts transaction)\n```\n\n### Service Payments\n```http\nGET    /api/payments          # List all payments\nGET    /api/payments/{id}     # Get payment by ID\nPOST   /api/payments          # Make payment\nPUT    /api/payments/{id}     # Update payment\nDELETE /api/payments/{id}     # Delete payment (refunds account)\n```\n\n### Bills (Utility Services)\n```http\nGET    /api/bills          # List available services\nGET    /api/bills/{id}     # Get service by ID\nPOST   /api/bills          # Create new service\nPUT    /api/bills/{id}     # Update service\nDELETE /api/bills/{id}     # Delete service\n```\n\n### Loans\n```http\nGET    /api/loans          # List all loans\nGET    /api/loans/{id}     # Get loan by ID\nPOST   /api/loans          # Request new loan\nPUT    /api/loans/{id}     # Update loan (approve/reject)\nDELETE /api/loans/{id}     # Delete loan\n```\n\n---\n\n## 🚀 Getting Started\n\n### Prerequisites\n- Java 17 or higher\n- Maven 3.6+\n- (Optional) PostgreSQL or MySQL for production\n\n### Installation\n\n1. **Clone the repository**\n   ```bash\n   git clone https://github.com/yourusername/bancapp.git\n   cd bancapp\n   ```\n\n2. **Build the project**\n   ```bash\n   mvn clean install\n   ```\n\n3. **Run the application**\n   ```bash\n   mvn spring-boot:run\n   ```\n\n4. **Access the API**\n   ```\n   http://localhost:8080/api\n   ```\n\n### Quick Test\n\nCreate a user:\n```bash\ncurl -X POST http://localhost:8080/api/users \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"John Doe\",\n    \"email\": \"john.doe@example.com\"\n  }'\n```\n\n---\n\n## ⚙️ Configuration\n\n### application.properties\n\n**Development (H2 Database):**\n```properties\n# H2 Database\nspring.datasource.url=jdbc:h2:mem:bancappdb\nspring.datasource.driverClassName=org.h2.Driver\nspring.datasource.username=sa\nspring.datasource.password=\n\n# JPA/Hibernate\nspring.jpa.database-platform=org.hibernate.dialect.H2Dialect\nspring.jpa.hibernate.ddl-auto=create-drop\nspring.jpa.show-sql=true\n\n# H2 Console (for debugging)\nspring.h2.console.enabled=true\nspring.h2.console.path=/h2-console\n```\n\n**Production (PostgreSQL):**\n```properties\n# PostgreSQL\nspring.datasource.url=jdbc:postgresql://localhost:5432/bancappdb\nspring.datasource.username=your_username\nspring.datasource.password=your_password\n\n# JPA/Hibernate\nspring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect\nspring.jpa.hibernate.ddl-auto=update\nspring.jpa.show-sql=false\n```\n\n---\n\n## ⚠️ Exception Handling\n\nThe API returns standardized error responses:\n\n### Error Response Format\n```json\n{\n  \"status\": 404,\n  \"message\": \"User not found with id: 123\",\n  \"timestamp\": \"2025-10-15T20:45:00\"\n}\n```\n\n### HTTP Status Codes\n\n| Code | Description | Example |\n|------|-------------|---------|\n| `200` | OK | Successful GET, PUT operations |\n| `201` | Created | Successful POST (entity created) |\n| `204` | No Content | Successful DELETE |\n| `400` | Bad Request | Validation error, insufficient balance |\n| `404` | Not Found | Entity not found |\n| `500` | Internal Server Error | Unexpected server error |\n\n### Custom Exceptions\n\n- **EntityNotFoundException** - When requested entity doesn't exist\n- **InsufficientBalanceException** - When account balance is too low\n- **InvalidTransferException** - When transfer validation fails\n- **ValidationException** - When input validation fails\n\n---\n\n## 📚 Learning Objectives\n\nThis project demonstrates:\n\n1. **Spring Boot Architecture**\n   - Layered architecture (Controller → Service → Repository)\n   - Dependency injection\n   - Configuration management\n\n2. **RESTful API Design**\n   - Resource-based URLs\n   - Proper HTTP methods\n   - Status codes\n   - CRUD operations\n\n3. **JPA \u0026 Hibernate**\n   - Entity relationships (@OneToMany, @ManyToOne)\n   - Cascading operations\n   - JPA auditing\n   - Query methods\n\n4. **Transaction Management**\n   - @Transactional annotations\n   - Atomic operations\n   - Rollback handling\n\n5. **Exception Handling**\n   - Global exception handler\n   - Custom exceptions\n   - Consistent error responses\n\n6. **Validation**\n   - Bean Validation (Jakarta)\n   - Custom validators\n   - Error message handling\n\n7. **Business Logic**\n   - Balance management\n   - Transfer validation\n   - Transaction reversal\n\n---\n\n## 🔄 Translation Note\n\nThis project was originally developed in Spanish and has been professionally translated to English to make it more accessible to international developers. All code, comments, API endpoints, and documentation are now in English while maintaining 100% of the original functionality.\n\n**Translation includes:**\n- ✅ All class and method names\n- ✅ All variable names\n- ✅ All API endpoints\n- ✅ All validation and error messages\n- ✅ All code comments\n\n---\n\n## 📖 API Documentation\n\nFor detailed API documentation, you can:\n\n1. **Import to Postman**: Create a collection with the endpoints listed above\n2. **Use Swagger/OpenAPI**: Add SpringDoc dependency for interactive documentation\n3. **Manual Testing**: Use curl or any HTTP client\n\n### Example Requests\n\n**Create Account:**\n```json\nPOST /api/accounts\n{\n  \"number\": \"1234567890\",\n  \"balance\": 1000.00,\n  \"accountType\": \"SAVINGS\",\n  \"user\": {\n    \"id\": 1\n  }\n}\n```\n\n**Make Transfer:**\n```json\nPOST /api/transfers\n{\n  \"amount\": 100.00,\n  \"sourceAccount\": {\n    \"id\": 1\n  },\n  \"destinationAccount\": {\n    \"id\": 2\n  }\n}\n```\n\n**Pay Service:**\n```json\nPOST /api/payments\n{\n  \"amount\": 50.00,\n  \"account\": {\n    \"id\": 1\n  },\n  \"service\": {\n    \"id\": 1\n  }\n}\n```\n\n---\n\n## 🎯 Key Features Explained\n\n### 1. Automatic Balance Management\nWhen you create a deposit, the account balance is automatically updated. When you delete a deposit, the balance is reverted.\n\n### 2. Transfer Validation\nThe system validates:\n- ✅ Source account has sufficient balance\n- ✅ Source and destination are different accounts\n- ✅ Both accounts exist\n\n### 3. Transaction Reversal\nDeleting a transfer or payment automatically reverts the balance changes, maintaining data integrity.\n\n### 4. Audit Trail\nAll entities have `createdAt` and `updatedAt` timestamps that are automatically managed by JPA auditing.\n\n---\n\n## 🤝 Contributing\n\nThis is an educational project. Feel free to:\n- Fork the repository\n- Add new features\n- Improve documentation\n- Report issues\n- Submit pull requests\n\n---\n\n## 📝 License\n\nThis project is for educational purposes. Feel free to use it for learning and teaching.\n\n---\n\n## 👨‍💻 Author\n\n**Intepy**\n\n---\n\n## 🙏 Acknowledgments\n\n- Built with Spring Boot\n- Designed for educational purposes\n- Translated to English for international accessibility\n\n---\n\n## 📬 Contact\n\nFor questions about this educational project, please open an issue on GitHub.\n\n---\n\n**Happy Learning! 🚀**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcardozoaldama%2Fbancapp-snpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcardozoaldama%2Fbancapp-snpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcardozoaldama%2Fbancapp-snpp/lists"}