{"id":18386461,"url":"https://github.com/stemmlerjs/dddforumv2","last_synced_at":"2025-06-21T11:04:11.473Z","repository":{"id":179789540,"uuid":"663247233","full_name":"stemmlerjs/dddforumv2","owner":"stemmlerjs","description":null,"archived":false,"fork":false,"pushed_at":"2024-05-30T17:30:34.000Z","size":1857,"stargazers_count":45,"open_issues_count":2,"forks_count":10,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-07T00:33:26.922Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/stemmlerjs.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}},"created_at":"2023-07-06T22:14:54.000Z","updated_at":"2025-02-15T02:18:21.000Z","dependencies_parsed_at":"2024-05-30T20:04:01.603Z","dependency_job_id":null,"html_url":"https://github.com/stemmlerjs/dddforumv2","commit_stats":null,"previous_names":["stemmlerjs/ddd-forum-bp-first","stemmlerjs/dddforumv2"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/stemmlerjs/dddforumv2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stemmlerjs%2Fdddforumv2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stemmlerjs%2Fdddforumv2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stemmlerjs%2Fdddforumv2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stemmlerjs%2Fdddforumv2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stemmlerjs","download_url":"https://codeload.github.com/stemmlerjs/dddforumv2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stemmlerjs%2Fdddforumv2/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261110584,"owners_count":23111061,"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","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":"2024-11-06T01:22:09.125Z","updated_at":"2025-06-21T11:04:06.459Z","avatar_url":"https://github.com/stemmlerjs.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DDDForum V2: Phases of Craftship\n\n## What is this?\n\nThis is the v2 of [dddforum]() which we're using to demonstrate moving through the Phases of Craftship in The Software Essentialist. \n\n## Phases\n\n1. Code-First\n2. Best Practice-First\n3. Pattern-First\n4. Responsibility-First\n5. Value-First\n\n## The Best Practice-First Phase\n\nAt this level, the focus is on implementing the most valuable techniques from BDD, Continuous Delivery, Object-Oriented Design, TDD \u0026 so on. \n\nThe work we have to do here is broken into 4 key parts:\n\n1. | Automated Backend E2E tests\n2. | Test a Walking Skeleton (E2e UI to Backend Test Infrastructure)\n3. | Deploying the Skeleton to a Minimal Deployment Pipeline (w/ GitHub Actions, Render \u0026 Netlify)\n4. | Development Environment Refinements (for greater Discoverability \u0026 Understanding)\n\n#### What's most important here?\n\nAssuming we want to test everything from this folder, you can test/explore the following.\n\n### Pre-requisites\n\n**Docker**\n\nEnsure you've [installed Docker](https://www.docker.com/products/docker-desktop/) on your machine and have it started.\n\nThis will allow us to run the local services we need (such as Postgres) without messy setup.\n\nThis keeps our development environments simple and reproducible.\n\n**Packages**\n\n```bash\nnpm ci\n```\n\n### 1. Automated Backend E2E tests\n\nAutomated tests are _superior_. Here's how we can do it on the backend.\n\n![](https://private-user-images.githubusercontent.com/6892666/252122992-4463f520-75fc-464f-8cfc-b8afecac5271.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJrZXkxIiwiZXhwIjoxNjg4ODcwOTU3LCJuYmYiOjE2ODg4NzA2NTcsInBhdGgiOiIvNjg5MjY2Ni8yNTIxMjI5OTItNDQ2M2Y1MjAtNzVmYy00NjRmLThjZmMtYjhhZmVjYWM1MjcxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzA3MDklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMwNzA5VDAyNDQxN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTRhOGQ1MTRmMDFhY2FiYWJlMDFhNjA2MjcxMmFiOWZjNjU1MDFiN2M5ZWFjN2FkYmJiNmYwMWE3M2U2YTFlODImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.9YW3nzEjFCYeqHrfTl-IOooe3nCjVyL16niTqJtEL9U)\n\n**Run the E2E tests**\n\nWith the services built, you can now run the E2E tests.\n\n```bash\nnpm run test:e2e\n```\n\n**Note**: This will start a PostgreSQL docker container, generate the Prisma client, run migrations, and start the backend server.\n\n### 2. Test a Walking Skeleton (E2e UI to Backend Test Infrastructure)\n\nA walking skeleton is a minimal slice of functionality through all of your major architectural components from the user's perspective.\n\n![](https://private-user-images.githubusercontent.com/6892666/252123183-84b45357-f051-4bf7-a0c5-0fe1367bb731.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJrZXkxIiwiZXhwIjoxNjg4ODcxMzI5LCJuYmYiOjE2ODg4NzEwMjksInBhdGgiOiIvNjg5MjY2Ni8yNTIxMjMxODMtODRiNDUzNTctZjA1MS00YmY3LWEwYzUtMGZlMTM2N2JiNzMxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzA3MDklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMwNzA5VDAyNTAyOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ1N2ViMTQxMGUyODJkNDQ0YTg4ZmY3NTc2Y2UzZWQxNTg3MDNkZGU0ZjE5MTM4YzI0ZjkzZjNkMzdhN2UzZDAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.b3E_gRfDbiKIa4YvgPWmyPCv3V62Cq4KT0Mqeltu7Xo)\n\nHere's how you can test it out locally.\n\n**Step 1: Run the backend in a separate console.**\n\n```bash\nnpm run start:dev:backend\n```\n\n\u003e **Note**: This will start a PostgreSQL docker container, generate the Prisma client, run migrations, and start the backend server.\n\n**Step 2: Run the frontend server in a separate console.**\n\n```bash\nnpm run start:dev:frontend\n```\n\n### 3. Deploying the Skeleton to a Minimal Deployment Pipeline (w/ GitHub Actions, Render \u0026 Netlify)\n\n\u003e Image incoming\n\n... description incoming\n\n### 4. Development Environment Refinements (for greater Discoverability \u0026 Understanding)\n\n\u003e Image incoming\n\n... description incoming\n\n## Other\n\n### Run the Backend Integration Tests\n\nWe run a few tests on the backend as well to prove that we can:\n\n- Start and stop the web server\n- Connect to the database\n\nYou can test these with:\n\n```bash\nnpm run test:infra\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstemmlerjs%2Fdddforumv2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstemmlerjs%2Fdddforumv2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstemmlerjs%2Fdddforumv2/lists"}