{"id":20772221,"url":"https://github.com/ericneves/solidprinciples","last_synced_at":"2026-04-09T07:01:54.788Z","repository":{"id":238942167,"uuid":"793843000","full_name":"EricNeves/solidPrinciples","owner":"EricNeves","description":"🦆 this project is built on SOLID principles/package-by-feature and created with Typescript, Express, PostgreSQL, Prisma, Jest and Docker.","archived":false,"fork":false,"pushed_at":"2024-05-10T18:41:54.000Z","size":375,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-11T05:43:09.216Z","etag":null,"topics":["docker","express","jest","postgresql","prisma","solid-principles","typescript"],"latest_commit_sha":null,"homepage":"https://solidprinciples-api.onrender.com/doc","language":"TypeScript","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}},"created_at":"2024-04-30T01:13:28.000Z","updated_at":"2025-02-17T14:53:51.000Z","dependencies_parsed_at":"2024-11-18T00:04:14.863Z","dependency_job_id":null,"html_url":"https://github.com/EricNeves/solidPrinciples","commit_stats":null,"previous_names":["ericneves/solidprinciples"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/EricNeves/solidPrinciples","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricNeves%2FsolidPrinciples","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricNeves%2FsolidPrinciples/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricNeves%2FsolidPrinciples/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricNeves%2FsolidPrinciples/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EricNeves","download_url":"https://codeload.github.com/EricNeves/solidPrinciples/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EricNeves%2FsolidPrinciples/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269201296,"owners_count":24377460,"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-08-07T02:00:09.698Z","response_time":73,"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":["docker","express","jest","postgresql","prisma","solid-principles","typescript"],"created_at":"2024-11-17T12:19:47.242Z","updated_at":"2025-12-30T21:49:16.491Z","avatar_url":"https://github.com/EricNeves.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch4 align=\"center\"\u003e\n  \u003cbr /\u003e\n  \u003cimg src=\".doc/icon.png\"\u003e\n  \u003cbr /\u003e\n    Solid Principles\n  \u003cbr /\u003e\n\u003c/h4\u003e\n\n\u003cp align=\"center\"\u003eAplicação criada com base nos \u003cstrong\u003ePricípios SOLID\u003c/strong\u003e e \u003cstrong\u003ePackage By Feature\u003c/strong\u003e, além de utilizar recursos como, \u003cstrong\u003eTypescript\u003c/strong\u003e, \u003cstrong\u003eExpress\u003c/strong\u003e, \u003cstrong\u003ePostgreSQL\u003c/strong\u003e, \u003cstrong\u003ePrisma\u003c/strong\u003e, \u003cstrong\u003eJest\u003c/strong\u003e e \u003cstrong\u003eDocker\u003c/strong\u003e.\u003c/p\u003e\n\n\u003ch4 align=\"center\"\u003e\n  \n\u003c/h4\u003e \n\n\u003cp align=\"center\"\u003eData de criação: May 8, 2024\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/last-commit/ericneves/solidprinciples?display_timestamp=author\u0026style=flat-square\u0026logo=github\u0026color=%2303AED2\" alt=\"Github\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/languages/count/ericneves/solidprinciples?style=flat-square\u0026logo=progress\u0026color=%2341B06E\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/languages/top/ericneves/solidprinciples?style=flat-square\u0026logo=typescript\u0026logoColor=%23FFBB70\u0026color=%23FFBB70\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/license/ericneves/solidprinciples?style=flat-square\u0026logo=git\u0026color=%23F05032\"\u003e\n\u003c/p\u003e\n\n\u003cimg src=\".doc/screenshotA.png\"\u003e\n\u003cimg src=\".doc/screenshotB.png\"\u003e\n\n#### Intro 📜\n\nEste projeto tem como foco a implementação dos princípios **SOLID**, nos quais visam trazer para a aplicação mais **flexibilidade**, **escalabilidade** e **fácil manutenção**.\n\nTais princípios, representados por cada letra do próprio nome.\n\n\u003e [!NOTE]\n\u003e - **S** (**Single Responsibility Principle**): Uma classe deve ter apenas uma razão para mudar, ou seja, ela deve ter uma única responsabilidade dentro do sistema.\n\u003e - **O** (**Open-Closed Principle**): As entidades/objetos de um software devem ser abertas para extensão, mas fechadas para modificação. Isso significa que quando novos comportamentos forem adicionados, devemos estender e não alterar o código-fonte original.\n\u003e - **L** (**Liskov Substitution Principle**): Os objetos de uma classe derivada devem ser substituíveis por objetos de sua classe base sem interromper o funcionamento do programa.\n\u003e - **I** (**Interface Segregation Principle**): Uma funcionalidade não deve depender de interfaces que não utilizam. Em vez disso, interfaces específicas devem ser criadas para partes específicas do software.\n\u003e - **D** (**Dependency Inversion Principle**): Módulos de alto nível não devem depender de módulos de baixo nível, mas ambos devem depender de abstrações e não das implementações.\n\u003e****\n\nEsses padrões facilitam o processo de desenvolvimento de software ao permitir o **reuso**, **dividir** **responsabilidades** e possibilitar a **integração** de diferentes tipos de **banco de dados**. Além disso, tornam a implementação de **testes automatizados**, seja de **testes unitários**, **integração** ou **end-to-end** (**E2E**), mais fácil.\n\nAlém do mais, foi implementado o padrão arquitetural **package-by-feature**, diferentemente do **package-by-layer** como na **arquitetura em camadas**, esse padrão foca em organizar código em torno de funcionalidades específicas e centradas no domínio. Todos os componentes de uma funcionalidade são organizados juntos (**controllers**, **useCases**, **DTO**, **Factory** e etc...), o que facilita a compreensão e manutenção, além de outros recursos.\n\nO projeto faz a utilização de `testes unitários` com jest, apesar dos testes serem efetuados em apenas alguns pontos do domínio o app está todo adptado para ser testado.\n\n#### Features 💡\n\n- 📁 Padrão Package By Feature\n- ✅ Criar usuário\n- 🔐 Autenticação - JWT\n- 👾 Informações do Usuário\n- 🖊️ Editar Usuário\n- 🧹 Deletar Usuário\n- ⚡ Dependencies:\n  - typescript: `^5.4.5`\n  - jest: `^29.7.0`\n  - prisma: `^5.13.0`\n  - @prisma/client: `^5.13.0`\n  - bcrypt: `^5.1.1`\n  - cors: `^2.8.5`\n  - express: `^4.19.2`\n  - express-async-errors: `^3.1.1`\n  - joi: `^17.13.0`\n  - jsonwebtoken: `^9.0.2`\n  - swagger-ui-express: `5.0.0`\n  - and more...\n\n#### Execution ⚙️\n\n\u003e\n\u003e [!NOTE]\n\u003e Siga os passos abaixo para a execução do projeto.\n\nO primeiro passo, é nomear o arquivo `.env.example` para `.env`.\n\n```sh \n\n# Install Deps\n$ cd app \u0026\u0026 pnpm install\n\n# Docker\n$ docker-compose -f \"docker-compose-dev.yml\" up -d --build\n\n# Tests\n$ pnpm test\n$ pnpm test:coverage\n\n```\n\n#### Alive 🔋\n\nApós o processo de instalação o serviço estará disponível na porta `3030`. \nAcessando o endpoint `127.0.0.1:3030/doc`, terá a documentação para o uso da `api`.\n\nEm produção, o projeto está hospedado no serviço gratuito da empresa [Render](https://render.com/), rodando todo o app em `docker`.\n\n\u003e\n\u003e [!NOTE]\n\u003e Por ser um serviço gratuito, leva alguns segundos ou minutos para abrir a conexão, após isso, poderá usar o serviço normalmente.\n\u003e \n\nLink: ([SOLID Principles API](https://solidprinciples-api.onrender.com))\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/solidprinciples?style=flat-square\u0026logo=git\u0026color=%23F05032\"\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericneves%2Fsolidprinciples","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fericneves%2Fsolidprinciples","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericneves%2Fsolidprinciples/lists"}