{"id":38873056,"url":"https://github.com/abecli/banking-web-app","last_synced_at":"2026-01-17T14:32:58.077Z","repository":{"id":327134846,"uuid":"1086226731","full_name":"abecli/banking-web-app","owner":"abecli","description":null,"archived":false,"fork":false,"pushed_at":"2025-12-28T11:30:38.000Z","size":932,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-12T02:33:05.021Z","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":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/abecli.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-10-30T05:55:18.000Z","updated_at":"2025-12-02T00:34:32.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/abecli/banking-web-app","commit_stats":null,"previous_names":["abe-alt/banking-web-app","abecli/banking-web-app"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/abecli/banking-web-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abecli%2Fbanking-web-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abecli%2Fbanking-web-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abecli%2Fbanking-web-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abecli%2Fbanking-web-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/abecli","download_url":"https://codeload.github.com/abecli/banking-web-app/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abecli%2Fbanking-web-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28509954,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T13:38:16.342Z","status":"ssl_error","status_checked_at":"2026-01-17T13:37:44.060Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"2026-01-17T14:32:58.017Z","updated_at":"2026-01-17T14:32:58.071Z","avatar_url":"https://github.com/abecli.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Banking App (Spring Boot)\n\nRESTful API plus optional console runner for basic banking operations using Spring Boot, JDBC, and MySQL.\n\n**Live demo:** https://mjabank.vercel.app/\n\n## Table of Contents\n- [Prerequisites](#prerequisites)\n- [Database setup](#database-setup)\n- [Configure connection](#configure-connection)\n- [How to run locally](#how-to-run-locally)\n- [Screenshots](#screenshots)\n- [API quick curl checks](#api-quick-curl-checks)\n- [Optional CLI](#optional-cli)\n- [Tests](#tests)\n- [Project Journey Step by Step](#project-journey-step-by-step)\n\n## Prerequisites\n- Java 17+\n- Maven 3.8+\n- MySQL server\n\n## Database setup\n1) Create DB and user (example):\n```sql\nCREATE DATABASE banking_db;\nCREATE USER 'bank_user'@'localhost' IDENTIFIED BY 'user123';\nGRANT ALL ON banking_db.* TO 'bank_user'@'localhost';\nFLUSH PRIVILEGES;\n```\n2) Create the `accounts` table:\n```sql\nUSE banking_db;\nCREATE TABLE accounts (\n  account_number INT PRIMARY KEY,\n  customer_name VARCHAR(255) NOT NULL,\n  balance DECIMAL(15,2) NOT NULL DEFAULT 0\n);\n```\n\n## Configure connection\nExport env vars before running:\n```bash\nexport DB_URL=\"jdbc:mysql://localhost:3306/banking_db\"\nexport DB_USERNAME=\"bank_user\"\nexport DB_PASSWORD=\"user123\"\n```\n`.env` files are not auto-loaded; `set -a; source .env; set +a` will export them if you prefer.\n\n## How to run locally\n- Backend: set DB env vars, ensure MySQL + `accounts` table, then `mvn spring-boot:run`.\n- Frontend (Next.js): `cd banking-frontend \u0026\u0026 npm run dev` (uses port 3000, calls backend at 8080).\n\n## Screenshots\n\n- Login Page : \n![Login or create account](docs/screenshots/login.png)\n\n- Dashboard: \n![Dashboard with actions](docs/screenshots/Dashboard.png)\n\n\n## API quick curl checks\n- Create: `curl -X POST http://localhost:8080/api/accounts -H \"Content-Type: application/json\" -d '{\"accountNumber\":1,\"customerName\":\"Alice\",\"balance\":100}'`\n- Deposit: `curl -X POST http://localhost:8080/api/accounts/1/deposit -H \"Content-Type: application/json\" -d '{\"amount\":50}'`\n- Withdraw: `curl -X POST http://localhost:8080/api/accounts/1/withdraw -H \"Content-Type: application/json\" -d '{\"amount\":20}'`\n- View: `curl http://localhost:8080/api/accounts/1`\n\n\n\n## Optional CLI\nRun the interactive console (non-web):\n```bash\nmvn -DskipTests exec:java -Dexec.mainClass=Banking.BankingApp\n```\n\n## Tests\nRun unit tests (in-memory stub, no DB required):\n```bash\nmvn test\n```\n\n\n# Project Journey (Step-by-Step)\n\nChronological steps we followed to build and wire the app end to end.\n\n## 1) Initial console app\n- Plain Java classes: `Account`, `AccountDAO`, `BnkAccountDaoImpl`, `TransactionController`, `BankingApp`, etc.\n- Manual JDBC with hardcoded URL/user/pass and a CLI loop.\n\n## 2) Maven setup\n- Added `pom.xml` (Java 17) and `.gitignore`.\n- Added MySQL driver dependency.\n- Created Maven layout under `src/main/java`.\n\n## 3) Database config\n- Created `.env` for DB settings and noted exporting env vars (`DB_URL`, `DB_USERNAME`, `DB_PASSWORD`).\n- Defined schema: `accounts` table with `account_number`, `customer_name`, `balance`.\n\n## 4) Testing foundation\n- Added JUnit 5 deps and a controller/service test with in-memory stub DAO.\n\n## 5) Upgrade to Spring Boot API\n- Switched POM to Spring Boot parent with web + JDBC starters.\n- Added Boot entrypoint `BankingApplication`.\n- Added `application.properties` using env-driven datasource config.\n- Refactored DAO to use `JdbcTemplate` with `AccountNotFoundException`.\n- Introduced `TransactionService` for business logic/validation.\n- Added `TransactionRestController` exposing JSON endpoints:\n  - `POST /api/accounts`\n  - `POST /api/accounts/{id}/deposit`\n  - `POST /api/accounts/{id}/withdraw`\n  - `PUT /api/accounts/{id}/balance`\n  - `GET /api/accounts/{id}`\n- Optional CLI updated to run via Spring context without web.\n\n## 6) Frontend (Next.js)\n- Scaffolded `banking-frontend` with `.env.local` pointing to backend (`NEXT_PUBLIC_API_BASE_URL=http://localhost:8080/api`).\n- Implemented main page with:\n  - Login by account number or create account\n  - Show active account details\n  - Deposit, withdraw, refresh balance, logout\n  - Success/error messaging\n\n\n## File + class overview\n- `pom.xml`: Maven config using Spring Boot with web/JDBC/test dependencies.\n- `JOURNEY.md`, `README.md`, `banking_db.sql`: project history, setup notes, and the MySQL schema seed.\n- Java config/entrypoints: `src/main/java/Banking/BankingApplication.java` (Boot launcher), `src/main/java/Banking/BankingApp.java` (optional CLI runner).\n- Java domain/contracts: `src/main/java/Banking/Account.java` (account model), `src/main/java/Banking/TransactionDTO.java` (amount/account payload), `src/main/java/Banking/AccountDAO.java` (DAO contract).\n- Java infrastructure: `src/main/java/Banking/BnkAccountDaoImpl.java` (JdbcTemplate DAO), `src/main/java/Banking/DatabaseConnection.java` (legacy raw JDBC helper, not used by Spring), `src/main/resources/application.properties` (datasource config).\n- Java services/API: `src/main/java/Banking/TransactionService.java` (business rules), `src/main/java/Banking/TransactionRestController.java` (REST endpoints), `src/main/java/Banking/AccountNotFoundException.java` (404 mapping), `src/main/java/Banking/TransactionView.java` (legacy console printer).\n- Tests: `src/test/java/Banking/TransactionControllerTest.java` (service tests with in-memory DAO stub).\n- Frontend core: `banking-frontend/app/page.tsx` (UI flow for login/create/deposit/withdraw), `banking-frontend/app/layout.tsx` (root shell), `banking-frontend/app/globals.css` (styling), `banking-frontend/lib/api.ts` (client for backend).\n- Frontend config/assets: `banking-frontend/next.config.ts`, `banking-frontend/tsconfig.json`, `banking-frontend/postcss.config.mjs`, `banking-frontend/eslint.config.mjs`, `banking-frontend/package.json`, `banking-frontend/package-lock.json`, `banking-frontend/public/*.svg`, `banking-frontend/README.md`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabecli%2Fbanking-web-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabecli%2Fbanking-web-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabecli%2Fbanking-web-app/lists"}