{"id":31826024,"url":"https://github.com/venki1402/atm","last_synced_at":"2025-10-11T16:56:34.774Z","repository":{"id":317157278,"uuid":"1066191883","full_name":"Venki1402/atm","owner":"Venki1402","description":"lld for atm","archived":false,"fork":false,"pushed_at":"2025-09-29T08:19:23.000Z","size":2,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-29T09:12:20.487Z","etag":null,"topics":["java","lld"],"latest_commit_sha":null,"homepage":"","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/Venki1402.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-09-29T06:41:41.000Z","updated_at":"2025-09-29T08:19:26.000Z","dependencies_parsed_at":"2025-09-29T09:12:40.663Z","dependency_job_id":"b34a7535-aeee-4386-87b6-a4c9ed0268a8","html_url":"https://github.com/Venki1402/atm","commit_stats":null,"previous_names":["venki1402/atm"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Venki1402/atm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Venki1402%2Fatm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Venki1402%2Fatm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Venki1402%2Fatm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Venki1402%2Fatm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Venki1402","download_url":"https://codeload.github.com/Venki1402/atm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Venki1402%2Fatm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279007971,"owners_count":26084369,"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-10-11T02:00:06.511Z","response_time":55,"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","lld"],"created_at":"2025-10-11T16:56:30.375Z","updated_at":"2025-10-11T16:56:34.765Z","avatar_url":"https://github.com/Venki1402.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ATM LLD\n\n\u003e Requirements\n\n- Has card reader\n- Interface for entry pin (physical / digital)\n- Cash dispense → Minimize carry notes\n- Print (prints details of transactions)\n- Mini statement\n- Change pin\n- Extensible to all banks\n- Deposit (deposit slot)\n\n\u003e UML Diagram\n\n```mermaid\nclassDiagram\n%%======================\n%% Context \u0026 State Pattern\n%%======================\nclass ATM {\n  -currentState : ATMState\n  -cardReader : CardReader\n  -pinEntry : IPinEntry\n  -display : Display\n  -printer : Printer\n  -cashDispenser : CashDispenser\n  -depositSlot : DepositSlot\n  -bankConnector : IBankConnector\n  -txnFactory : TransactionFactory\n  +setState(state : ATMState)\n  +insertCard(card)\n  +enterPin(pin)\n  +selectTransaction(type, params)\n  +performTransaction(txnType, params)\n  +dispenseCash(amount)\n  +ejectCard()\n  +shutdown()\n}\n\nclass ATMState {\n  +insertCard(card)\n  +enterPin(pin)\n  +selectTransaction(type, params)\n  +performTransaction(txnType, params)\n  +dispenseCash(amount)\n  +ejectCard()\n}\n\nclass IdleState\nclass CardInsertedState\nclass AuthenticatedState\nclass ProcessingState\nclass OutOfServiceState\n\nATMState \u003c|.. IdleState\nATMState \u003c|.. CardInsertedState\nATMState \u003c|.. AuthenticatedState\nATMState \u003c|.. ProcessingState\nATMState \u003c|.. OutOfServiceState\nATM o-- ATMState : currentState\n\n%%======================\n%% Hardware Components\n%%======================\nclass CardReader {\n  +readCard() : Card\n  +ejectCard()\n  +retainCard()\n}\n\nclass IPinEntry {\n  +capturePin() : EncryptedPin\n}\n\nclass PhysicalPinPad {\n  +capturePin()\n}\nclass OnScreenPinEntry {\n  +capturePin()\n}\nIPinEntry \u003c|.. PhysicalPinPad\nIPinEntry \u003c|.. OnScreenPinEntry\n\nclass Display {\n  +show(message)\n  +showMenu(menu)\n  +showMiniStatement(records)\n}\n\nclass Printer {\n  +print(text)\n  +printReceipt(txn)\n}\n\nclass CashDispenser {\n  -inventory : Map\u003cint,int\u003e\n  -strategy : INoteDispenserStrategy\n  +dispense(amount)\n  +loadNotes(denom, count)\n  +setStrategy(strategy)\n}\n\nclass INoteDispenserStrategy {\n  +computeNotes(amount, inventory)\n}\n\nclass GreedyNoteStrategy {\n  +computeNotes(amount, inventory)\n}\nclass MinNotesStrategy {\n  +computeNotes(amount, inventory)\n}\nINoteDispenserStrategy \u003c|.. GreedyNoteStrategy\nINoteDispenserStrategy \u003c|.. MinNotesStrategy\n\nclass DepositSlot {\n  +acceptCashBundle(bundle)\n  +acceptCheque(cheque)\n  +validateBundle(bundle)\n}\n\nATM o-- CardReader\nATM o-- IPinEntry\nATM o-- Display\nATM o-- Printer\nATM o-- CashDispenser\nATM o-- DepositSlot\nCashDispenser o-- INoteDispenserStrategy\n\n%%======================\n%% Bank Connector (Adapter)\n%%======================\nclass IBankConnector {\n  +authorize(cardNumber, pin, amount)\n  +postTransaction(txn)\n  +getMiniStatement(accountId, count)\n  +changePin(accountId, oldPin, newPin)\n  +deposit(accountId, depositDetails)\n}\n\nclass HDFCConnector {\n  +authorize(cardNumber, pin, amount)\n  +postTransaction(txn)\n  +getMiniStatement(accountId, count)\n  +changePin(accountId, oldPin, newPin)\n  +deposit(accountId, depositDetails)\n}\nIBankConnector \u003c|.. HDFCConnector\nATM o-- IBankConnector\n\n%%======================\n%% Transaction Hierarchy\n%%======================\nclass Transaction {\n  -id : UUID\n  -accountId : String\n  -amount : int\n  -timestamp : DateTime\n  +execute(bank : IBankConnector)\n  +validate()\n}\n\nclass Withdrawal {\n  +execute(bank)\n}\nclass DepositTxn {\n  +execute(bank)\n}\nclass MiniStatementTxn {\n  +execute(bank)\n}\nclass ChangePinTxn {\n  +execute(bank)\n}\n\nTransaction \u003c|-- Withdrawal\nTransaction \u003c|-- DepositTxn\nTransaction \u003c|-- MiniStatementTxn\nTransaction \u003c|-- ChangePinTxn\n\nclass TransactionFactory {\n  +create(txnType : String, params : Map) : Transaction\n}\nATM o-- TransactionFactory\nTransaction --\u003e IBankConnector\n\n%%======================\n%% Value Objects\n%%======================\nclass Card {\n  -cardNumber : String\n  -cardHolder : String\n  -expiry : Date\n}\nclass AuthorizationResult\nclass TransactionResult\nclass TransactionRecord\nclass ValidationResult\nclass DispenseResult\nclass DepositResult\n\nATM --\u003e Card\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvenki1402%2Fatm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvenki1402%2Fatm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvenki1402%2Fatm/lists"}