{"id":21806411,"url":"https://github.com/ericneves/personalfinance","last_synced_at":"2025-10-14T21:37:16.846Z","repository":{"id":264070089,"uuid":"875747978","full_name":"EricNeves/personalFinance","owner":"EricNeves","description":"Application created with PHP (Ports and Adapters Architecture, Postgresql, Tests), Angular (PrimeNG, PrimeIcons, NgxPaginator), Docker, NGINX and more...","archived":false,"fork":false,"pushed_at":"2025-05-28T14:04:14.000Z","size":421,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-28T15:21:25.057Z","etag":null,"topics":["angular","docker","nginx","php","ports-and-adapters","postgresql","typescript"],"latest_commit_sha":null,"homepage":"","language":"PHP","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/EricNeves.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":"2024-10-20T18:35:39.000Z","updated_at":"2025-05-28T14:04:28.000Z","dependencies_parsed_at":"2025-01-07T17:58:39.838Z","dependency_job_id":"281ebc58-4446-4882-832d-0ea2b9222158","html_url":"https://github.com/EricNeves/personalFinance","commit_stats":null,"previous_names":["ericneves/personalfinance"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/EricNeves/personalFinance","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricNeves%2FpersonalFinance","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricNeves%2FpersonalFinance/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricNeves%2FpersonalFinance/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricNeves%2FpersonalFinance/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EricNeves","download_url":"https://codeload.github.com/EricNeves/personalFinance/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricNeves%2FpersonalFinance/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278862885,"owners_count":26059036,"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-07T02:00:06.786Z","response_time":59,"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":["angular","docker","nginx","php","ports-and-adapters","postgresql","typescript"],"created_at":"2024-11-27T12:19:29.328Z","updated_at":"2025-10-07T23:31:08.416Z","avatar_url":"https://github.com/EricNeves.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch4 align=\"center\"\u003e\n  \u003cbr /\u003e\n  \u003cimg src=\"resources/doc/icon.png\"\u003e\n  \u003cbr /\u003e\n    Personal Finance \n  \u003cbr /\u003e\n\u003c/h4\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/last-commit/EricNeves/personalFinance?display_timestamp=author\u0026style=flat-square\u0026logo=git\u0026labelColor=%23010409\u0026color=%23F05032\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/languages/top/ericneves/personalFinance?style=flat-square\u0026logo=php\u0026logoColor=%23fff\u0026label=PHP\u0026labelColor=%23777BB4\u0026color=%231C47CB\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/license/ericneves/personalFinance?style=flat-square\u0026logo=github\u0026logoColor=white\u0026labelColor=%23000000\u0026color=%23DEEB52\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    Aplicação web desenvolvida com \u003cstrong\u003ePHP\u003c/strong\u003e e \u003cstrong\u003eAngular\u003c/strong\u003e, destacando a implementação de princípios de componentização no backend, como \u003cstrong\u003eREP (Release/Reuse Equivalence Principle)\u003c/strong\u003e, \u003cstrong\u003eCCP (Common Closure Principle)\u003c/strong\u003e e \u003cstrong\u003eCRP (Common Reuse Principle)\u003c/strong\u003e, além da adoção do princípio arquitetural \u003cstrong\u003ePorts and Adapters (Hexagonal)\u003c/strong\u003e e testes automatizados com \u003cstrong\u003ePest\u003c/strong\u003e.\n\u003c/p\u003e \n\n\u003cp align=\"center\"\u003eData de criação: Oct 20, 2024\u003c/p\u003e\n\nhttps://github.com/user-attachments/assets/24dfde31-f6d9-4b3d-92ae-18ad7eea7ec4\n\n#### Intro 📖\n\n**Personal Finance** é um sistema web desenvolvido com **PHP** e **Angular**, concebido para o gerenciamento de finanças pessoais, garantindo que os usuários mantenham o controle financeiro em dia.\n\nNo backend o projeto incorpora recursos que foram mencionados no livro **Arquitetura Limpa** de **Uncle Bob**, como princípios de componentização, que priorizam a manutenção do código. Em determinados cenários, a **manutenção** é mais importante do que a **reutilização**, garantindo que os impactos de mudanças sejam minimizados ao revalidar e reimplantar o código-fonte.\n\n**Obs**: Embora a precisão em valores monetários seja crucial em cenários reais, neste projeto ela não foi necessária devido à simplicidade do contexto.\n\n#### Component Principles\n\n\u003e \n\u003e **REP (Release/Reuse Equivalence Principle)** \n\u003e - Do ponto de vista do design e da arquitetura de software, esse princípio significa que as classes e módulos formados em um componente devem pertencer a um grupo coeso. O componente não pode simplesmente consistir em uma mistura aleatória de classes e módulos, mas deve haver algum tema ou propósito abrangente que todos esses módulos compartilhem.\n\u003e\n\n\u003e\n\u003e **CCP (Common Closure Principle)**\n\u003e - Esse é o Single Responsibility Principle reformulado para ser aplicável aos componentes. Assim como SRP diz que uma classe não deve conter muitas razões para mudar, CCP diz que um componente não deve ter várias razões para mudar.\n\u003e - Quando o código de uma aplicação tem que mudar, é preferível que todas as mudanças ocorram em um componente em vez de serem distribuídas por vários componentes.\n\u003e - O CCP determina que todas as classes com probabilidade de mudar pelas mesmas razões sejam reunidas em um só lugar.\n\u003e \n\n\u003e\n\u003e **CRP (Common Reuse Principle)**\n\u003e - Segundo esse princípio, as classes e módulos que tendem a ser reutilizados juntos pertecem ao mesmo componente.\n\u003e - Classes que possuem um forte aclopamento entre si e são reutilizadas juntas devem pertencer ao mesmo componente.\n\u003e - Segundo o CRP, as classes que não têm uma forte ligação entre si não devem ficar no mesmo componente.\n\u003e \n\nEsses princípios, juntamente com outros como o **SOLID**, facilitam a **manutenção** e a **escalabilidade** da aplicação, reduzindo os recursos necessários para criar e manter o **software**, além de promoverem uma estrutura mais **robusta** e **flexível**.\n\n- [x] Ports and Adapters Architecture\n- [x] Solid Principles\n- [x] Component Principles\n- [x] Automated Tests - (Unit/Functional)\n- [x] PSR 1,4 and 7\n\nNo **frontend**, o projeto adota uma organização modular, separando pages, components, services, models e outros elementos, bem como a manipulação de eventos e ciclo de vida dos componentes.\n\n- [x] Reactive Forms\n- [x] Services\n- [x] Modules\n- [x] Guards\n- [x] Interceptors\n- [x] Components\n- [x] Utils\n\n#### Features 🚀\n\n- Backend\n  - PHP 8.2\n  - Ports and Adapters Architecture\n  - Authentication - JWT\n  - Middlewares\n  - Routes\n  - Http\n  - Database\n    - Postres:15\n  - Dependencies\n    - vlucas/phpdotenv: ^5.6\n    - ramsey/uuid: ^4.7\n    - pestphp/pest: ^3.5\n    - mockery/mockery: ^1.6\n- Frontend\n  - Angular 17\n  - Routes\n  - Guards\n  - Interceptors\n  - Models\n  - Services\n  - Dependencies\n    - ngx-pagination: ^6.0.3\n    - primeflex: ^3.3.1\n    - primeng: ^17.18.11\n    - primeicons: ^7.0.0\n- DevOps\n  - Docker\n  - Docker Compose\n  - Nginx (Reverse Proxy)\n\n#### How to execute ? 💡\n\n\u003e [!NOTE]\n\u003e\n\u003e Para garantir a execução bem-sucedida da aplicação, execute o comando abaixo.\n\u003e\n\n```sh\n\n# dir\n$ cd personalFinance\n\n# docker command\n$ docker compose up -d \n\n```\n\n#### Tests 🔋\n\n```sh\n# enter the container\n$ docker exec -it www bash\n\n# run tests\n$ composer test\n```\n\n#### Author 🗿\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003ca href=\"https://www.instagram.com/ericneves_dev/\"\u003e\n        \u003cimg src=\"https://avatars.githubusercontent.com/u/32256029\" width=\"100px;\" alt=\"\"/\u003e\n        \u003cbr /\u003e\n        \u003csub\u003e\n          \u003cb\u003eEric Neves\u003c/b\u003e\n        \u003c/sub\u003e\n      \u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003ca href=\"https://www.instagram.com/ericneves_dev/\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/Instagram-E4405F?style=for-the-badge\u0026logo=instagram\u0026logoColor=white\" width=\"100%\"\u003e\n      \u003c/a\u003e \n      \u003cbr /\u003e\n      \u003ca href=\"https://linkedin.com/in/ericnevesrr\"\u003e \n        \u003cimg src=\"https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white\" width=\"100%\"\u003e\n      \u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n#### License 📋\n\n\u003cimg src=\"https://img.shields.io/github/license/ericneves/personalFinance?style=flat-square\u0026logo=github\u0026logoColor=white\u0026labelColor=%23000000\u0026color=%23DEEB52\"\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericneves%2Fpersonalfinance","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fericneves%2Fpersonalfinance","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericneves%2Fpersonalfinance/lists"}