Commit plan
For the lead, who commits: the build ran without git (several workers on one tree), so the
history is cut afterwards. Paths are relative to the root of the repository. Messages follow the
kit's commit discipline: conventional, scope = the bounded context, platform or example,
header of at most 100 characters.
What this plan can and cannot promise
Section titled “What this plan can and cannot promise”- Order. The order is the one the method prescribes: root changes, strategic artefacts, bootstrap, platform, then per context its language, its contracts, its concepts and its use cases, then what proves the whole.
- Size. The target is 20 files and 600 changed lines per commit, generated documents not
counted. Commits over the target say so. They are over for three reasons: a bootstrap is one
command (93 files); an aggregate written by a worker as one file carries the behaviour of
several use cases (the
Calendar, theAppointment); a use case commit carries its specs, which are longer than its code. - Compiling at every commit: not feasible, and not claimed. Files that generators update
at each run (the barrel
<context>.declarations.ts, the permissions, the route list,CONTEXT.md, the tables of a context, the composition files of the platform) exist here only in their final state, and go in the first commit that needs them: they name classes that later commits bring. The project compiles andnpm run verifyis green at these points only: after commit 1 (the kit's repository, untouched by the example), and after the last commit. A history green at every commit needs the generators run in a worktree per slice, which is what the kit'sparallel-workskill prescribes and what this build could not do without git. - Tangled files. When two slices share a file (an aggregate, the table of a context), the file is in the first commit that needs it, whole, as the commit discipline says.
- The last entries of each context named "remaining files" hold what no rule claimed: read their list before committing.
Before committing: npm run check:dashes and npm run example:verify at the root.
Commits
Section titled “Commits”1. chore(example): add the example workspace to the repository
Section titled “1. chore(example): add the example workspace to the repository”Root changes only, in their own commit.
package.jsonpackage-lock.jsoneslint.config.mjsknip.json.github/workflows/ci.yml.gitlab-ci.ymlexamples/README.md2. chore(example): bootstrap the project with one init command
Section titled “2. chore(example): bootstrap the project with one init command”93 files, 92 counted, 4194 lines counted (over the target). Everything init and generate worker wrote, with the hand fixes the workspace needed (scripts/tsc.mjs, scripts/kit.mjs, .dependency-cruiser.workspace.mjs, docker-compose.yml, the realm) and the composition files of src/platform in their final state.
examples/scheduling/.claude/rules/application.mdexamples/scheduling/.claude/rules/domain.mdexamples/scheduling/.claude/rules/infrastructure.mdexamples/scheduling/.claude/rules/platform.mdexamples/scheduling/.claude/rules/presentation.mdexamples/scheduling/.claude/rules/published-language.mdexamples/scheduling/.claude/rules/tests.mdexamples/scheduling/.claude/settings.jsonexamples/scheduling/.dependency-cruiser.cjsexamples/scheduling/.dependency-cruiser.workspace.mjsexamples/scheduling/.dockerignoreexamples/scheduling/.env.exampleexamples/scheduling/.github/branch-protection.mdexamples/scheduling/.github/dependabot.ymlexamples/scheduling/.github/workflows/ci.ymlexamples/scheduling/.github/workflows/codeql.ymlexamples/scheduling/.github/workflows/pr-title.ymlexamples/scheduling/.gitignoreexamples/scheduling/.gitlab-ci.ymlexamples/scheduling/.gitlab/merge-request-settings.mdexamples/scheduling/CLAUDE.mdexamples/scheduling/Dockerfileexamples/scheduling/commitlint.config.mjsexamples/scheduling/ddd-ts-kit.config.jsonexamples/scheduling/docker-compose.ymlexamples/scheduling/docker/keycloak/scheduling-realm.jsonexamples/scheduling/eslint.config.mjsexamples/scheduling/knexfile.jsexamples/scheduling/knip.jsonexamples/scheduling/lefthook.ymlexamples/scheduling/migrations/0001_initial.jsexamples/scheduling/package.jsonexamples/scheduling/renovate.jsonexamples/scheduling/scripts/events.tsexamples/scheduling/scripts/gen.mjsexamples/scheduling/scripts/kit.mjsexamples/scheduling/scripts/openapi.tsexamples/scheduling/scripts/tsc.mjsexamples/scheduling/src/apps/worker/main.tsexamples/scheduling/src/main.tsexamples/scheduling/src/platform/audit/audit.module.tsexamples/scheduling/src/platform/audit/audit.permissions.tsexamples/scheduling/src/platform/audit/audited-events.tsexamples/scheduling/src/platform/audit/create-audit.tsexamples/scheduling/src/platform/audit/list-audit-entries.handler.tsexamples/scheduling/src/platform/audit/list-audit-entries.query.tsexamples/scheduling/src/platform/audit/list-audit-entries.route.tsexamples/scheduling/src/platform/buses/create-command-bus.tsexamples/scheduling/src/platform/buses/create-query-bus.tsexamples/scheduling/src/platform/compose-application.tsexamples/scheduling/src/platform/config/app-config.tsexamples/scheduling/src/platform/config/config-error.tsexamples/scheduling/src/platform/config/load-config.tsexamples/scheduling/src/platform/config/read-tracing.tsexamples/scheduling/src/platform/database/connect-to-database.tsexamples/scheduling/src/platform/database/inert-persistence.tsexamples/scheduling/src/platform/database/open-persistence.tsexamples/scheduling/src/platform/database/open-test-database.tsexamples/scheduling/src/platform/database/persistence-over.tsexamples/scheduling/src/platform/database/persistence.tsexamples/scheduling/src/platform/database/schema.tsexamples/scheduling/src/platform/errors.tsexamples/scheduling/src/platform/events/create-event-provider.tsexamples/scheduling/src/platform/events/event-provider.tsexamples/scheduling/src/platform/events/in-process-events.tsexamples/scheduling/src/platform/events/start-outbox-relay.tsexamples/scheduling/src/platform/http/error-statuses.tsexamples/scheduling/src/platform/http/refusal-for.tsexamples/scheduling/src/platform/http/start-http-server.tsexamples/scheduling/src/platform/http/with-documentation.tsexamples/scheduling/src/platform/job-settings.tsexamples/scheduling/src/platform/lay-foundations.tsexamples/scheduling/src/platform/observability/create-logger.tsexamples/scheduling/src/platform/observability/create-metrics.tsexamples/scheduling/src/platform/platform-test.module.tsexamples/scheduling/src/platform/platform.module.tsexamples/scheduling/src/platform/redis/open-redis.tsexamples/scheduling/src/platform/resilience/adapter-aspects.tsexamples/scheduling/src/platform/resilience/default-resilience.tsexamples/scheduling/src/platform/resilience/own-policy.tsexamples/scheduling/src/platform/resilience/resilience-settings.tsexamples/scheduling/src/platform/resilience/self-governed.tsexamples/scheduling/src/platform/tracing.tsexamples/scheduling/test/architecture/extractable.spec.tsexamples/scheduling/test/e2e/support/auth-environment.tsexamples/scheduling/test/e2e/support/create-credentials.tsexamples/scheduling/test/e2e/support/start-application.tsexamples/scheduling/test/e2e/support/story-of.tsexamples/scheduling/test/e2e/support/test-environment.tsexamples/scheduling/tsconfig.build.jsonexamples/scheduling/tsconfig.jsonexamples/scheduling/vitest.config.tsexamples/scheduling/vitest.e2e.config.ts3. docs(example): state the needs and discover the domain
Section titled “3. docs(example): state the needs and discover the domain”2 files, 2 counted, 148 lines counted.
examples/scheduling/docs/architecture/discovery.mdexamples/scheduling/docs/architecture/needs.md4. docs(example): find the bounded contexts, their language and their map
Section titled “4. docs(example): find the bounded contexts, their language and their map”4 files, 4 counted, 167 lines counted.
examples/scheduling/docs/architecture/before-bootstrap/README.mdexamples/scheduling/docs/architecture/before-bootstrap/context-map.mdexamples/scheduling/docs/architecture/before-bootstrap/glossary.mdexamples/scheduling/docs/architecture/contexts.md5. feat(platform): keep relation tuples in PostgreSQL and combine roles with relationships
Section titled “5. feat(platform): keep relation tuples in PostgreSQL and combine roles with relationships”27 files, 27 counted, 820 lines counted (over the target). The generated files of src/platform/auth are in this commit in their final, rewired state.
examples/scheduling/docs/adr/0001-combine-token-roles-with-relationships-in-one-authorizer.mdexamples/scheduling/src/platform/auth/access-policies.tsexamples/scheduling/src/platform/auth/authorization.tsexamples/scheduling/src/platform/auth/create-authenticator.tsexamples/scheduling/src/platform/auth/create-authorizer.tsexamples/scheduling/src/platform/auth/create-relation-tuple-tables.tsexamples/scheduling/src/platform/auth/create-tuple-store.tsexamples/scheduling/src/platform/auth/http-boundary.tsexamples/scheduling/src/platform/auth/knex-relation-tuple-store.contract.spec.tsexamples/scheduling/src/platform/auth/knex-relation-tuple-store.spec.tsexamples/scheduling/src/platform/auth/knex-relation-tuple-store.tsexamples/scheduling/src/platform/auth/offline-authenticator.tsexamples/scheduling/src/platform/auth/permission-mapping.tsexamples/scheduling/src/platform/auth/permissions.tsexamples/scheduling/src/platform/auth/principal-of.tsexamples/scheduling/src/platform/auth/relate-system-actors.tsexamples/scheduling/src/platform/auth/relation-tuples-table.tsexamples/scheduling/src/platform/auth/relationship-schema.tsexamples/scheduling/src/platform/auth/resource-of.tsexamples/scheduling/src/platform/auth/resource-permissions.tsexamples/scheduling/src/platform/auth/role-grant.tsexamples/scheduling/src/platform/auth/role-grants.tsexamples/scheduling/src/platform/auth/roles-and-relationships.authorizer.spec.tsexamples/scheduling/src/platform/auth/roles-and-relationships.authorizer.tsexamples/scheduling/src/platform/auth/security-schemes.tsexamples/scheduling/src/platform/buses/read-only-impersonation.spec.tsexamples/scheduling/src/platform/buses/read-only-impersonation.ts6. docs(example): plan the slices and brief the workers
Section titled “6. docs(example): plan the slices and brief the workers”8 files, 8 counted, 389 lines counted.
examples/scheduling/docs/architecture/briefings/README.mdexamples/scheduling/docs/architecture/briefings/analytics.mdexamples/scheduling/docs/architecture/briefings/identity.mdexamples/scheduling/docs/architecture/briefings/notification.mdexamples/scheduling/docs/architecture/briefings/scheduling-appointment.mdexamples/scheduling/docs/architecture/briefings/scheduling-calendar.mdexamples/scheduling/docs/architecture/plan.mdexamples/scheduling/docs/architecture/slices.md7. feat(example): share the stamp read models can store
Section titled “7. feat(example): share the stamp read models can store”3 files, 3 counted, 52 lines counted. Workaround of a defect of @ddd-ts-kit/knex; used by the projections of three contexts, so it comes before them.
examples/scheduling/src/shared-kernel/.gitkeepexamples/scheduling/src/shared-kernel/storable-stamp.spec.tsexamples/scheduling/src/shared-kernel/storable-stamp.ts8. docs(example): record the projections directory as a decision
Section titled “8. docs(example): record the projections directory as a decision”1 files, 1 counted, 29 lines counted.
examples/scheduling/docs/adr/0002-keep-read-models-with-projections-in-application-projections.md9. feat(identity): declare the context and its language
Section titled “9. feat(identity): declare the context and its language”7 files, 6 counted, 243 lines counted.
examples/scheduling/src/contexts/identity/CONTEXT.mdexamples/scheduling/src/contexts/identity/application/authorization/identity.permissions.tsexamples/scheduling/src/contexts/identity/identity.declarations.tsexamples/scheduling/src/contexts/identity/infrastructure/persistence/create-identity-tables.schema.tsexamples/scheduling/src/contexts/identity/infrastructure/persistence/identity.schema.tsexamples/scheduling/src/contexts/identity/presentation/http/identity.routes.tsexamples/scheduling/src/contexts/identity/published-language/index.ts10. feat(identity): publish what happens to people, practices and delegations
Section titled “10. feat(identity): publish what happens to people, practices and delegations”44 files, 44 counted, 853 lines counted (over the target).
examples/scheduling/src/contexts/identity/application/integration/publishers/delegation-granted.publisher.tsexamples/scheduling/src/contexts/identity/application/integration/publishers/delegation-revoked.publisher.tsexamples/scheduling/src/contexts/identity/application/integration/publishers/person-registered.publisher.tsexamples/scheduling/src/contexts/identity/application/integration/publishers/practice-member-added.publisher.tsexamples/scheduling/src/contexts/identity/application/integration/publishers/practice-member-removed.publisher.tsexamples/scheduling/src/contexts/identity/application/integration/publishers/practice-opened.publisher.tsexamples/scheduling/src/contexts/identity/domain/events/delegation-granted.event.tsexamples/scheduling/src/contexts/identity/domain/events/delegation-revoked.event.tsexamples/scheduling/src/contexts/identity/domain/events/person-registered.event.tsexamples/scheduling/src/contexts/identity/domain/events/practice-member-added.event.tsexamples/scheduling/src/contexts/identity/domain/events/practice-member-removed.event.tsexamples/scheduling/src/contexts/identity/domain/events/practice-opened.event.tsexamples/scheduling/src/contexts/identity/published-language/delegation-granted.v1.integration-event.tsexamples/scheduling/src/contexts/identity/published-language/delegation-granted.v1.payload.tsexamples/scheduling/src/contexts/identity/published-language/delegation-revoked.v1.integration-event.tsexamples/scheduling/src/contexts/identity/published-language/delegation-revoked.v1.payload.tsexamples/scheduling/src/contexts/identity/published-language/person-registered.v1.integration-event.tsexamples/scheduling/src/contexts/identity/published-language/person-registered.v1.payload.tsexamples/scheduling/src/contexts/identity/published-language/practice-member-added.v1.integration-event.tsexamples/scheduling/src/contexts/identity/published-language/practice-member-added.v1.payload.tsexamples/scheduling/src/contexts/identity/published-language/practice-member-removed.v1.integration-event.tsexamples/scheduling/src/contexts/identity/published-language/practice-member-removed.v1.payload.tsexamples/scheduling/src/contexts/identity/published-language/practice-opened.v1.integration-event.tsexamples/scheduling/src/contexts/identity/published-language/practice-opened.v1.payload.tsexamples/scheduling/src/contexts/identity/test/unit/delegation-granted.event.spec.tsexamples/scheduling/src/contexts/identity/test/unit/delegation-granted.publisher.spec.tsexamples/scheduling/src/contexts/identity/test/unit/delegation-revoked.event.spec.tsexamples/scheduling/src/contexts/identity/test/unit/delegation-revoked.publisher.spec.tsexamples/scheduling/src/contexts/identity/test/unit/person-registered.event.spec.tsexamples/scheduling/src/contexts/identity/test/unit/person-registered.publisher.spec.tsexamples/scheduling/src/contexts/identity/test/unit/practice-member-added.event.spec.tsexamples/scheduling/src/contexts/identity/test/unit/practice-member-added.publisher.spec.tsexamples/scheduling/src/contexts/identity/test/unit/practice-member-removed.event.spec.tsexamples/scheduling/src/contexts/identity/test/unit/practice-member-removed.publisher.spec.tsexamples/scheduling/src/contexts/identity/test/unit/practice-opened.event.spec.tsexamples/scheduling/src/contexts/identity/test/unit/practice-opened.publisher.spec.tsexamples/scheduling/src/contexts/scheduling/published-language/appointment-booked.v1.payload.tsexamples/scheduling/src/contexts/scheduling/published-language/appointment-cancelled.v1.payload.tsexamples/scheduling/src/contexts/scheduling/published-language/appointment-completed.v1.payload.tsexamples/scheduling/src/contexts/scheduling/published-language/appointment-confirmed.v1.payload.tsexamples/scheduling/src/contexts/scheduling/published-language/appointment-expired.v1.payload.tsexamples/scheduling/src/contexts/scheduling/published-language/appointment-marked-no-show.v1.payload.tsexamples/scheduling/src/contexts/scheduling/published-language/appointment-rescheduled.v1.payload.tsexamples/scheduling/src/contexts/scheduling/published-language/calendar-created.v1.payload.ts11. feat(identity): register a person at their first sign-in
Section titled “11. feat(identity): register a person at their first sign-in”30 files, 30 counted, 978 lines counted (over the target).
examples/scheduling/src/contexts/identity/application/commands/register-person/register-person.command.tsexamples/scheduling/src/contexts/identity/application/commands/register-person/register-person.handler.tsexamples/scheduling/src/contexts/identity/domain/aggregates/person.aggregate.tsexamples/scheduling/src/contexts/identity/domain/errors/invalid-display-name.error.tsexamples/scheduling/src/contexts/identity/domain/errors/invalid-email.error.tsexamples/scheduling/src/contexts/identity/domain/errors/person-not-registered.error.tsexamples/scheduling/src/contexts/identity/domain/repositories/person.repository.tsexamples/scheduling/src/contexts/identity/domain/value-objects/display-name.vo.tsexamples/scheduling/src/contexts/identity/domain/value-objects/email.vo.tsexamples/scheduling/src/contexts/identity/infrastructure/persistence/knex-person-directory.reader.tsexamples/scheduling/src/contexts/identity/infrastructure/persistence/knex-person.repository.tsexamples/scheduling/src/contexts/identity/infrastructure/persistence/person-row.schema.tsexamples/scheduling/src/contexts/identity/infrastructure/persistence/person.mapper.tsexamples/scheduling/src/contexts/identity/presentation/http/register-person-accepted.dto.tsexamples/scheduling/src/contexts/identity/presentation/http/register-person-body.dto.tsexamples/scheduling/src/contexts/identity/presentation/http/register-person.route.tsexamples/scheduling/src/contexts/identity/test/builders/person.builder.tsexamples/scheduling/src/contexts/identity/test/fakes/person.repository.fake.tsexamples/scheduling/src/contexts/identity/test/integration/knex-person-directory.reader.spec.tsexamples/scheduling/src/contexts/identity/test/integration/person.repository.contract.spec.tsexamples/scheduling/src/contexts/identity/test/unit/display-name.vo.spec.tsexamples/scheduling/src/contexts/identity/test/unit/email.vo.spec.tsexamples/scheduling/src/contexts/identity/test/unit/invalid-display-name.error.spec.tsexamples/scheduling/src/contexts/identity/test/unit/invalid-email.error.spec.tsexamples/scheduling/src/contexts/identity/test/unit/person-not-registered.error.spec.tsexamples/scheduling/src/contexts/identity/test/unit/person-registered.event-handler.spec.tsexamples/scheduling/src/contexts/identity/test/unit/person.aggregate.spec.tsexamples/scheduling/src/contexts/identity/test/unit/register-person.handler.spec.tsexamples/scheduling/src/contexts/identity/test/unit/register-person.route.spec.tsexamples/scheduling/test/e2e/identity-register-person.e2e.spec.ts12. feat(identity): open a practice with its first manager
Section titled “12. feat(identity): open a practice with its first manager”29 files, 29 counted, 1223 lines counted (over the target).
examples/scheduling/src/contexts/identity/application/commands/open-practice/open-practice.command.tsexamples/scheduling/src/contexts/identity/application/commands/open-practice/open-practice.handler.tsexamples/scheduling/src/contexts/identity/domain/aggregates/practice.aggregate.tsexamples/scheduling/src/contexts/identity/domain/errors/practice-not-found.error.tsexamples/scheduling/src/contexts/identity/domain/errors/unknown-role.error.tsexamples/scheduling/src/contexts/identity/domain/errors/unknown-time-zone.error.tsexamples/scheduling/src/contexts/identity/domain/repositories/practice.repository.tsexamples/scheduling/src/contexts/identity/domain/value-objects/membership.vo.tsexamples/scheduling/src/contexts/identity/domain/value-objects/role.vo.tsexamples/scheduling/src/contexts/identity/domain/value-objects/time-zone.vo.tsexamples/scheduling/src/contexts/identity/infrastructure/persistence/knex-practice.repository.tsexamples/scheduling/src/contexts/identity/infrastructure/persistence/practice-row.schema.tsexamples/scheduling/src/contexts/identity/infrastructure/persistence/practice.mapper.tsexamples/scheduling/src/contexts/identity/presentation/http/open-practice-accepted.dto.tsexamples/scheduling/src/contexts/identity/presentation/http/open-practice-body.dto.tsexamples/scheduling/src/contexts/identity/presentation/http/open-practice.route.tsexamples/scheduling/src/contexts/identity/test/builders/practice.builder.tsexamples/scheduling/src/contexts/identity/test/fakes/practice.repository.fake.tsexamples/scheduling/src/contexts/identity/test/integration/practice.repository.contract.spec.tsexamples/scheduling/src/contexts/identity/test/unit/membership.vo.spec.tsexamples/scheduling/src/contexts/identity/test/unit/open-practice.handler.spec.tsexamples/scheduling/src/contexts/identity/test/unit/open-practice.route.spec.tsexamples/scheduling/src/contexts/identity/test/unit/practice-not-found.error.spec.tsexamples/scheduling/src/contexts/identity/test/unit/practice.aggregate.spec.tsexamples/scheduling/src/contexts/identity/test/unit/role.vo.spec.tsexamples/scheduling/src/contexts/identity/test/unit/time-zone.vo.spec.tsexamples/scheduling/src/contexts/identity/test/unit/unknown-role.error.spec.tsexamples/scheduling/src/contexts/identity/test/unit/unknown-time-zone.error.spec.tsexamples/scheduling/test/e2e/identity-open-practice.e2e.spec.ts13. feat(identity): add and remove the members of a practice
Section titled “13. feat(identity): add and remove the members of a practice”23 files, 23 counted, 946 lines counted (over the target).
examples/scheduling/src/contexts/identity/application/commands/add-member/add-member.command.tsexamples/scheduling/src/contexts/identity/application/commands/add-member/add-member.handler.tsexamples/scheduling/src/contexts/identity/application/commands/remove-member/remove-member.command.tsexamples/scheduling/src/contexts/identity/application/commands/remove-member/remove-member.handler.tsexamples/scheduling/src/contexts/identity/domain/errors/already-member.error.tsexamples/scheduling/src/contexts/identity/domain/errors/not-a-member.error.tsexamples/scheduling/src/contexts/identity/domain/errors/practice-left-unmanaged.error.tsexamples/scheduling/src/contexts/identity/presentation/http/add-member-accepted.dto.tsexamples/scheduling/src/contexts/identity/presentation/http/add-member-body.dto.tsexamples/scheduling/src/contexts/identity/presentation/http/add-member-params.dto.tsexamples/scheduling/src/contexts/identity/presentation/http/add-member.route.tsexamples/scheduling/src/contexts/identity/presentation/http/remove-member-accepted.dto.tsexamples/scheduling/src/contexts/identity/presentation/http/remove-member-params.dto.tsexamples/scheduling/src/contexts/identity/presentation/http/remove-member.route.tsexamples/scheduling/src/contexts/identity/test/unit/add-member.handler.spec.tsexamples/scheduling/src/contexts/identity/test/unit/add-member.route.spec.tsexamples/scheduling/src/contexts/identity/test/unit/already-member.error.spec.tsexamples/scheduling/src/contexts/identity/test/unit/not-a-member.error.spec.tsexamples/scheduling/src/contexts/identity/test/unit/practice-left-unmanaged.error.spec.tsexamples/scheduling/src/contexts/identity/test/unit/remove-member.handler.spec.tsexamples/scheduling/src/contexts/identity/test/unit/remove-member.route.spec.tsexamples/scheduling/test/e2e/identity-add-member.e2e.spec.tsexamples/scheduling/test/e2e/identity-remove-member.e2e.spec.ts14. feat(identity): grant and revoke a delegation on a desk
Section titled “14. feat(identity): grant and revoke a delegation on a desk”42 files, 42 counted, 1760 lines counted (over the target).
examples/scheduling/src/contexts/identity/application/commands/grant-delegation/grant-delegation.command.tsexamples/scheduling/src/contexts/identity/application/commands/grant-delegation/grant-delegation.handler.tsexamples/scheduling/src/contexts/identity/application/commands/revoke-delegation/revoke-delegation.command.tsexamples/scheduling/src/contexts/identity/application/commands/revoke-delegation/revoke-delegation.handler.tsexamples/scheduling/src/contexts/identity/domain/aggregates/delegation.aggregate.tsexamples/scheduling/src/contexts/identity/domain/errors/delegation-already-active.error.tsexamples/scheduling/src/contexts/identity/domain/errors/delegation-ends-in-the-past.error.tsexamples/scheduling/src/contexts/identity/domain/errors/delegation-not-active.error.tsexamples/scheduling/src/contexts/identity/domain/errors/delegation-not-found.error.tsexamples/scheduling/src/contexts/identity/domain/errors/not-a-practitioner.error.tsexamples/scheduling/src/contexts/identity/domain/errors/not-an-assistant.error.tsexamples/scheduling/src/contexts/identity/domain/repositories/delegation.repository.tsexamples/scheduling/src/contexts/identity/domain/value-objects/desk.vo.tsexamples/scheduling/src/contexts/identity/infrastructure/persistence/delegation-row.schema.tsexamples/scheduling/src/contexts/identity/infrastructure/persistence/delegation.mapper.tsexamples/scheduling/src/contexts/identity/infrastructure/persistence/knex-delegation.repository.tsexamples/scheduling/src/contexts/identity/presentation/http/grant-delegation-accepted.dto.tsexamples/scheduling/src/contexts/identity/presentation/http/grant-delegation-body.dto.tsexamples/scheduling/src/contexts/identity/presentation/http/grant-delegation-params.dto.tsexamples/scheduling/src/contexts/identity/presentation/http/grant-delegation.route.tsexamples/scheduling/src/contexts/identity/presentation/http/revoke-delegation-accepted.dto.tsexamples/scheduling/src/contexts/identity/presentation/http/revoke-delegation-params.dto.tsexamples/scheduling/src/contexts/identity/presentation/http/revoke-delegation.route.tsexamples/scheduling/src/contexts/identity/test/builders/delegation.builder.tsexamples/scheduling/src/contexts/identity/test/fakes/delegation.repository.fake.tsexamples/scheduling/src/contexts/identity/test/integration/delegation.repository.contract.spec.tsexamples/scheduling/src/contexts/identity/test/unit/delegation-already-active.error.spec.tsexamples/scheduling/src/contexts/identity/test/unit/delegation-ends-in-the-past.error.spec.tsexamples/scheduling/src/contexts/identity/test/unit/delegation-granted.event-handler.spec.tsexamples/scheduling/src/contexts/identity/test/unit/delegation-not-active.error.spec.tsexamples/scheduling/src/contexts/identity/test/unit/delegation-not-found.error.spec.tsexamples/scheduling/src/contexts/identity/test/unit/delegation-revoked.event-handler.spec.tsexamples/scheduling/src/contexts/identity/test/unit/delegation.aggregate.spec.tsexamples/scheduling/src/contexts/identity/test/unit/desk.vo.spec.tsexamples/scheduling/src/contexts/identity/test/unit/grant-delegation.handler.spec.tsexamples/scheduling/src/contexts/identity/test/unit/grant-delegation.route.spec.tsexamples/scheduling/src/contexts/identity/test/unit/not-a-practitioner.error.spec.tsexamples/scheduling/src/contexts/identity/test/unit/not-an-assistant.error.spec.tsexamples/scheduling/src/contexts/identity/test/unit/revoke-delegation.handler.spec.tsexamples/scheduling/src/contexts/identity/test/unit/revoke-delegation.route.spec.tsexamples/scheduling/test/e2e/identity-grant-delegation.e2e.spec.tsexamples/scheduling/test/e2e/identity-revoke-delegation.e2e.spec.ts15. feat(identity): expire delegations past their end
Section titled “15. feat(identity): expire delegations past their end”5 files, 5 counted, 224 lines counted.
examples/scheduling/src/contexts/identity/application/commands/expire-delegations/expire-delegations.command.tsexamples/scheduling/src/contexts/identity/application/commands/expire-delegations/expire-delegations.handler.tsexamples/scheduling/src/contexts/identity/application/scheduling/expire-delegations.job.tsexamples/scheduling/src/contexts/identity/test/unit/expire-delegations.handler.spec.tsexamples/scheduling/src/contexts/identity/test/unit/expire-delegations.job.spec.ts16. feat(identity): keep relationships in step with memberships and delegations
Section titled “16. feat(identity): keep relationships in step with memberships and delegations”11 files, 11 counted, 410 lines counted.
examples/scheduling/src/contexts/identity/application/event-handlers/delegation-granted.event-handler.tsexamples/scheduling/src/contexts/identity/application/event-handlers/delegation-revoked.event-handler.tsexamples/scheduling/src/contexts/identity/application/event-handlers/person-registered.event-handler.tsexamples/scheduling/src/contexts/identity/application/event-handlers/practice-member-added.event-handler.tsexamples/scheduling/src/contexts/identity/application/event-handlers/practice-member-removed.event-handler.tsexamples/scheduling/src/contexts/identity/application/ports/identity-relationships.port.tsexamples/scheduling/src/contexts/identity/infrastructure/external/remote-identity-relationships.adapter.tsexamples/scheduling/src/contexts/identity/test/fakes/identity-relationships.fake.tsexamples/scheduling/src/contexts/identity/test/integration/remote-identity-relationships.adapter.spec.tsexamples/scheduling/src/contexts/identity/test/unit/practice-member-added.event-handler.spec.tsexamples/scheduling/src/contexts/identity/test/unit/practice-member-removed.event-handler.spec.ts17. feat(identity): answer the person directory to other contexts
Section titled “17. feat(identity): answer the person directory to other contexts”1 files, 1 counted, 10 lines counted.
examples/scheduling/src/contexts/identity/published-language/person-directory.contract.ts18. feat(scheduling): declare the context and its language
Section titled “18. feat(scheduling): declare the context and its language”7 files, 6 counted, 431 lines counted.
examples/scheduling/src/contexts/scheduling/CONTEXT.mdexamples/scheduling/src/contexts/scheduling/application/authorization/scheduling.permissions.tsexamples/scheduling/src/contexts/scheduling/infrastructure/persistence/create-scheduling-tables.schema.tsexamples/scheduling/src/contexts/scheduling/infrastructure/persistence/scheduling.schema.tsexamples/scheduling/src/contexts/scheduling/presentation/http/scheduling.routes.tsexamples/scheduling/src/contexts/scheduling/published-language/index.tsexamples/scheduling/src/contexts/scheduling/scheduling.declarations.ts19. feat(scheduling): publish what happens to calendars and appointments
Section titled “19. feat(scheduling): publish what happens to calendars and appointments”40 files, 40 counted, 987 lines counted (over the target).
examples/scheduling/src/contexts/scheduling/application/integration/publishers/appointment-booked.publisher.tsexamples/scheduling/src/contexts/scheduling/application/integration/publishers/appointment-cancelled.publisher.tsexamples/scheduling/src/contexts/scheduling/application/integration/publishers/appointment-completed.publisher.tsexamples/scheduling/src/contexts/scheduling/application/integration/publishers/appointment-confirmed.publisher.tsexamples/scheduling/src/contexts/scheduling/application/integration/publishers/appointment-expired.publisher.tsexamples/scheduling/src/contexts/scheduling/application/integration/publishers/appointment-marked-no-show.publisher.tsexamples/scheduling/src/contexts/scheduling/application/integration/publishers/appointment-rescheduled.publisher.tsexamples/scheduling/src/contexts/scheduling/application/integration/publishers/calendar-created.publisher.tsexamples/scheduling/src/contexts/scheduling/domain/events/appointment-booked.event.tsexamples/scheduling/src/contexts/scheduling/domain/events/appointment-cancelled.event.tsexamples/scheduling/src/contexts/scheduling/domain/events/appointment-completed.event.tsexamples/scheduling/src/contexts/scheduling/domain/events/appointment-confirmed.event.tsexamples/scheduling/src/contexts/scheduling/domain/events/appointment-expired.event.tsexamples/scheduling/src/contexts/scheduling/domain/events/appointment-marked-no-show.event.tsexamples/scheduling/src/contexts/scheduling/domain/events/appointment-rescheduled.event.tsexamples/scheduling/src/contexts/scheduling/domain/events/calendar-created.event.tsexamples/scheduling/src/contexts/scheduling/published-language/appointment-booked.v1.integration-event.tsexamples/scheduling/src/contexts/scheduling/published-language/appointment-cancelled.v1.integration-event.tsexamples/scheduling/src/contexts/scheduling/published-language/appointment-completed.v1.integration-event.tsexamples/scheduling/src/contexts/scheduling/published-language/appointment-confirmed.v1.integration-event.tsexamples/scheduling/src/contexts/scheduling/published-language/appointment-expired.v1.integration-event.tsexamples/scheduling/src/contexts/scheduling/published-language/appointment-marked-no-show.v1.integration-event.tsexamples/scheduling/src/contexts/scheduling/published-language/appointment-rescheduled.v1.integration-event.tsexamples/scheduling/src/contexts/scheduling/published-language/calendar-created.v1.integration-event.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-booked.event.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-booked.publisher.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-cancelled.event.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-cancelled.publisher.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-completed.event.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-completed.publisher.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-confirmed.event.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-confirmed.publisher.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-expired.event.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-expired.publisher.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-marked-no-show.event.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-marked-no-show.publisher.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-rescheduled.event.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-rescheduled.publisher.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/calendar-created.event.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/calendar-created.publisher.spec.ts20. feat(scheduling): know the practitioners of a practice from identity
Section titled “20. feat(scheduling): know the practitioners of a practice from identity”8 files, 8 counted, 283 lines counted.
examples/scheduling/src/contexts/scheduling/application/ports/practitioner-directory.port.tsexamples/scheduling/src/contexts/scheduling/application/projections/practitioners.projection.tsexamples/scheduling/src/contexts/scheduling/domain/errors/unknown-practitioner.error.tsexamples/scheduling/src/contexts/scheduling/infrastructure/persistence/knex-practitioner-directory.repository.tsexamples/scheduling/src/contexts/scheduling/test/fakes/practitioner-directory.fake.tsexamples/scheduling/src/contexts/scheduling/test/integration/knex-practitioner-directory.repository.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/practitioners.projection.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/unknown-practitioner.error.spec.ts21. feat(scheduling): create a calendar for a practitioner
Section titled “21. feat(scheduling): create a calendar for a practitioner”30 files, 30 counted, 1477 lines counted (over the target). The Calendar aggregate is in this commit whole, with the behaviour the next four use cases call: the workers built it as one file.
examples/scheduling/src/contexts/scheduling/application/commands/create-calendar/create-calendar.command.tsexamples/scheduling/src/contexts/scheduling/application/commands/create-calendar/create-calendar.handler.tsexamples/scheduling/src/contexts/scheduling/domain/aggregates/calendar.aggregate.tsexamples/scheduling/src/contexts/scheduling/domain/errors/invalid-booking-window.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/unknown-calendar.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/unknown-time-zone.error.tsexamples/scheduling/src/contexts/scheduling/domain/repositories/calendar.repository.tsexamples/scheduling/src/contexts/scheduling/domain/value-objects/booking-window.vo.tsexamples/scheduling/src/contexts/scheduling/domain/value-objects/time-zone.vo.tsexamples/scheduling/src/contexts/scheduling/infrastructure/persistence/calendar-row.schema.tsexamples/scheduling/src/contexts/scheduling/infrastructure/persistence/calendar.mapper.tsexamples/scheduling/src/contexts/scheduling/infrastructure/persistence/knex-calendar.repository.tsexamples/scheduling/src/contexts/scheduling/presentation/http/create-calendar-accepted.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/create-calendar-body.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/create-calendar.route.tsexamples/scheduling/src/contexts/scheduling/test/builders/calendar.builder.tsexamples/scheduling/src/contexts/scheduling/test/fakes/calendar.repository.fake.tsexamples/scheduling/src/contexts/scheduling/test/integration/calendar.repository.contract.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/booking-window.vo.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/calendar-appointment-type-defined.event.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/calendar-created.event-handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/calendar-exception-added.event.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/calendar-opening-hours-set.event.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/calendar-time-off-added.event.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/calendar.aggregate.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/create-calendar.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/create-calendar.route.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/invalid-booking-window.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/time-zone.vo.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/unknown-time-zone.error.spec.ts22. feat(scheduling): set the opening hours of a calendar
Section titled “22. feat(scheduling): set the opening hours of a calendar”16 files, 16 counted, 545 lines counted.
examples/scheduling/src/contexts/scheduling/application/commands/set-opening-hours/set-opening-hours.command.tsexamples/scheduling/src/contexts/scheduling/application/commands/set-opening-hours/set-opening-hours.handler.tsexamples/scheduling/src/contexts/scheduling/domain/errors/invalid-range.error.tsexamples/scheduling/src/contexts/scheduling/domain/events/calendar-opening-hours-set.event.tsexamples/scheduling/src/contexts/scheduling/domain/value-objects/opening-hours.vo.tsexamples/scheduling/src/contexts/scheduling/domain/value-objects/range.vo.tsexamples/scheduling/src/contexts/scheduling/presentation/http/opening-range.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/set-opening-hours-accepted.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/set-opening-hours-body.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/set-opening-hours-params.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/set-opening-hours.route.tsexamples/scheduling/src/contexts/scheduling/test/unit/invalid-range.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/opening-hours.vo.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/range.vo.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/set-opening-hours.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/set-opening-hours.route.spec.ts23. feat(scheduling): add an exception to a day
Section titled “23. feat(scheduling): add an exception to a day”13 files, 13 counted, 361 lines counted.
examples/scheduling/src/contexts/scheduling/application/commands/add-exception/add-exception.command.tsexamples/scheduling/src/contexts/scheduling/application/commands/add-exception/add-exception.handler.tsexamples/scheduling/src/contexts/scheduling/domain/errors/invalid-day.error.tsexamples/scheduling/src/contexts/scheduling/domain/events/calendar-exception-added.event.tsexamples/scheduling/src/contexts/scheduling/domain/value-objects/exception.vo.tsexamples/scheduling/src/contexts/scheduling/presentation/http/add-exception-accepted.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/add-exception-body.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/add-exception-params.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/add-exception.route.tsexamples/scheduling/src/contexts/scheduling/test/unit/add-exception.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/add-exception.route.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/exception.vo.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/invalid-day.error.spec.ts24. feat(scheduling): add a time off
Section titled “24. feat(scheduling): add a time off”15 files, 15 counted, 393 lines counted.
examples/scheduling/src/contexts/scheduling/application/commands/add-time-off/add-time-off.command.tsexamples/scheduling/src/contexts/scheduling/application/commands/add-time-off/add-time-off.handler.tsexamples/scheduling/src/contexts/scheduling/domain/errors/invalid-time-off.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/time-off-over-appointments.error.tsexamples/scheduling/src/contexts/scheduling/domain/events/calendar-time-off-added.event.tsexamples/scheduling/src/contexts/scheduling/domain/value-objects/time-off.vo.tsexamples/scheduling/src/contexts/scheduling/presentation/http/add-time-off-accepted.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/add-time-off-body.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/add-time-off-params.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/add-time-off.route.tsexamples/scheduling/src/contexts/scheduling/test/unit/add-time-off.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/add-time-off.route.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/invalid-time-off.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/time-off-over-appointments.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/time-off.vo.spec.ts25. feat(scheduling): define an appointment type
Section titled “25. feat(scheduling): define an appointment type”23 files, 23 counted, 524 lines counted (over the target).
examples/scheduling/src/contexts/scheduling/application/commands/define-appointment-type/define-appointment-type.command.tsexamples/scheduling/src/contexts/scheduling/application/commands/define-appointment-type/define-appointment-type.handler.tsexamples/scheduling/src/contexts/scheduling/domain/errors/booking-too-far.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/booking-too-late.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/invalid-appointment-type.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/off-grid.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/outside-availability.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/unknown-appointment-type.error.tsexamples/scheduling/src/contexts/scheduling/domain/events/calendar-appointment-type-defined.event.tsexamples/scheduling/src/contexts/scheduling/domain/value-objects/appointment-type.vo.tsexamples/scheduling/src/contexts/scheduling/presentation/http/define-appointment-type-accepted.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/define-appointment-type-body.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/define-appointment-type-params.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/define-appointment-type.route.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-type.vo.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/booking-too-far.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/booking-too-late.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/define-appointment-type.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/define-appointment-type.route.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/invalid-appointment-type.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/off-grid.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/outside-availability.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/unknown-appointment-type.error.spec.ts26. feat(scheduling): hold a slot once, by the domain and by the database
Section titled “26. feat(scheduling): hold a slot once, by the domain and by the database”41 files, 41 counted, 2202 lines counted (over the target). The Appointment aggregate with its whole life, the Scheduler, the exclusion constraint adapter and the concurrent booking spec. Larger than the target: one aggregate, written as one file.
examples/scheduling/src/contexts/scheduling/domain/aggregates/appointment.aggregate.tsexamples/scheduling/src/contexts/scheduling/domain/errors/appointment-already-confirmed.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/appointment-ended.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/appointment-not-found.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/appointment-not-started.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/invalid-booking.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/invalid-slot.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/patient-limit-reached.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/reason-required.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/slot-taken.error.tsexamples/scheduling/src/contexts/scheduling/domain/repositories/appointment.repository.tsexamples/scheduling/src/contexts/scheduling/domain/services/scheduler.service.tsexamples/scheduling/src/contexts/scheduling/domain/value-objects/booking.vo.tsexamples/scheduling/src/contexts/scheduling/domain/value-objects/cancellation.vo.tsexamples/scheduling/src/contexts/scheduling/domain/value-objects/slot.vo.tsexamples/scheduling/src/contexts/scheduling/infrastructure/persistence/appointment-row.schema.tsexamples/scheduling/src/contexts/scheduling/infrastructure/persistence/appointment.mapper.tsexamples/scheduling/src/contexts/scheduling/infrastructure/persistence/knex-appointment.repository.tsexamples/scheduling/src/contexts/scheduling/test/builders/appointment.builder.tsexamples/scheduling/src/contexts/scheduling/test/fakes/appointment.repository.fake.tsexamples/scheduling/src/contexts/scheduling/test/integration/appointment-journey.spec.tsexamples/scheduling/src/contexts/scheduling/test/integration/appointment.repository.contract.spec.tsexamples/scheduling/src/contexts/scheduling/test/integration/concurrent-booking.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-already-confirmed.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-booked.event-handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-cancelled.event-handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-ended.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-expired.event-handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-not-found.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-not-started.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment-rescheduled.event-handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/appointment.aggregate.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/booking.vo.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/cancellation.vo.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/invalid-booking.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/invalid-slot.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/patient-limit-reached.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/reason-required.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/scheduler.service.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/slot-taken.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/slot.vo.spec.ts27. feat(scheduling): keep relationships in step with calendars and appointments
Section titled “27. feat(scheduling): keep relationships in step with calendars and appointments”6 files, 6 counted, 139 lines counted.
examples/scheduling/src/contexts/scheduling/application/event-handlers/appointment-booked.event-handler.tsexamples/scheduling/src/contexts/scheduling/application/event-handlers/calendar-created.event-handler.tsexamples/scheduling/src/contexts/scheduling/application/ports/scheduling-relationships.port.tsexamples/scheduling/src/contexts/scheduling/infrastructure/external/remote-scheduling-relationships.adapter.tsexamples/scheduling/src/contexts/scheduling/test/fakes/scheduling-relationships.fake.tsexamples/scheduling/src/contexts/scheduling/test/integration/remote-scheduling-relationships.adapter.spec.ts28. feat(scheduling): book an appointment
Section titled “28. feat(scheduling): book an appointment”7 files, 7 counted, 365 lines counted.
examples/scheduling/src/contexts/scheduling/application/commands/book-appointment/book-appointment.command.tsexamples/scheduling/src/contexts/scheduling/application/commands/book-appointment/book-appointment.handler.tsexamples/scheduling/src/contexts/scheduling/presentation/http/book-appointment-accepted.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/book-appointment-body.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/book-appointment.route.tsexamples/scheduling/src/contexts/scheduling/test/unit/book-appointment.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/book-appointment.route.spec.ts29. feat(scheduling): confirm a requested appointment
Section titled “29. feat(scheduling): confirm a requested appointment”7 files, 7 counted, 215 lines counted.
examples/scheduling/src/contexts/scheduling/application/commands/confirm-appointment/confirm-appointment.command.tsexamples/scheduling/src/contexts/scheduling/application/commands/confirm-appointment/confirm-appointment.handler.tsexamples/scheduling/src/contexts/scheduling/presentation/http/confirm-appointment-accepted.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/confirm-appointment-params.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/confirm-appointment.route.tsexamples/scheduling/src/contexts/scheduling/test/unit/confirm-appointment.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/confirm-appointment.route.spec.ts30. feat(scheduling): cancel an appointment, the patient until 24 hours before
Section titled “30. feat(scheduling): cancel an appointment, the patient until 24 hours before”10 files, 10 counted, 357 lines counted.
examples/scheduling/src/contexts/scheduling/application/authorization/patient-cancels-until-notice.policy.tsexamples/scheduling/src/contexts/scheduling/application/commands/cancel-appointment/cancel-appointment.command.tsexamples/scheduling/src/contexts/scheduling/application/commands/cancel-appointment/cancel-appointment.handler.tsexamples/scheduling/src/contexts/scheduling/presentation/http/cancel-appointment-accepted.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/cancel-appointment-body.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/cancel-appointment-params.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/cancel-appointment.route.tsexamples/scheduling/src/contexts/scheduling/test/unit/cancel-appointment.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/cancel-appointment.route.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/patient-cancels-until-notice.policy.spec.ts31. feat(scheduling): reschedule an appointment in one step
Section titled “31. feat(scheduling): reschedule an appointment in one step”10 files, 10 counted, 411 lines counted.
examples/scheduling/src/contexts/scheduling/application/authorization/patient-reschedules-until-notice.policy.tsexamples/scheduling/src/contexts/scheduling/application/commands/reschedule-appointment/reschedule-appointment.command.tsexamples/scheduling/src/contexts/scheduling/application/commands/reschedule-appointment/reschedule-appointment.handler.tsexamples/scheduling/src/contexts/scheduling/presentation/http/reschedule-appointment-accepted.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/reschedule-appointment-body.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/reschedule-appointment-params.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/reschedule-appointment.route.tsexamples/scheduling/src/contexts/scheduling/test/unit/patient-reschedules-until-notice.policy.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/reschedule-appointment.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/reschedule-appointment.route.spec.ts32. feat(scheduling): complete an appointment or mark a no-show
Section titled “32. feat(scheduling): complete an appointment or mark a no-show”14 files, 14 counted, 438 lines counted.
examples/scheduling/src/contexts/scheduling/application/commands/complete-appointment/complete-appointment.command.tsexamples/scheduling/src/contexts/scheduling/application/commands/complete-appointment/complete-appointment.handler.tsexamples/scheduling/src/contexts/scheduling/application/commands/mark-appointment-no-show/mark-appointment-no-show.command.tsexamples/scheduling/src/contexts/scheduling/application/commands/mark-appointment-no-show/mark-appointment-no-show.handler.tsexamples/scheduling/src/contexts/scheduling/presentation/http/complete-appointment-accepted.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/complete-appointment-params.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/complete-appointment.route.tsexamples/scheduling/src/contexts/scheduling/presentation/http/mark-appointment-no-show-accepted.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/mark-appointment-no-show-params.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/mark-appointment-no-show.route.tsexamples/scheduling/src/contexts/scheduling/test/unit/complete-appointment.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/complete-appointment.route.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/mark-appointment-no-show.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/mark-appointment-no-show.route.spec.ts33. feat(scheduling): expire unconfirmed appointments
Section titled “33. feat(scheduling): expire unconfirmed appointments”5 files, 5 counted, 216 lines counted.
examples/scheduling/src/contexts/scheduling/application/commands/expire-unconfirmed-appointments/expire-unconfirmed-appointments.command.tsexamples/scheduling/src/contexts/scheduling/application/commands/expire-unconfirmed-appointments/expire-unconfirmed-appointments.handler.tsexamples/scheduling/src/contexts/scheduling/application/scheduling/expire-unconfirmed-appointments.job.tsexamples/scheduling/src/contexts/scheduling/test/unit/expire-unconfirmed-appointments.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/expire-unconfirmed-appointments.job.spec.ts34. feat(scheduling): list appointments and the agenda of a practice by access scope
Section titled “34. feat(scheduling): list appointments and the agenda of a practice by access scope”22 files, 22 counted, 1113 lines counted (over the target).
examples/scheduling/src/contexts/scheduling/application/ports/agenda.port.tsexamples/scheduling/src/contexts/scheduling/application/projections/agenda.projection.tsexamples/scheduling/src/contexts/scheduling/application/queries/list-appointments/list-appointments.handler.tsexamples/scheduling/src/contexts/scheduling/application/queries/list-appointments/list-appointments.query.tsexamples/scheduling/src/contexts/scheduling/application/queries/list-appointments/list-appointments.result.tsexamples/scheduling/src/contexts/scheduling/application/queries/list-practice-agenda/list-practice-agenda.handler.tsexamples/scheduling/src/contexts/scheduling/application/queries/list-practice-agenda/list-practice-agenda.query.tsexamples/scheduling/src/contexts/scheduling/application/queries/list-practice-agenda/list-practice-agenda.result.tsexamples/scheduling/src/contexts/scheduling/infrastructure/persistence/knex-agenda.repository.tsexamples/scheduling/src/contexts/scheduling/presentation/http/list-appointments-line.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/list-appointments.route.tsexamples/scheduling/src/contexts/scheduling/presentation/http/list-practice-agenda-line.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/list-practice-agenda-params.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/list-practice-agenda.route.tsexamples/scheduling/src/contexts/scheduling/test/builders/agenda-entry.builder.tsexamples/scheduling/src/contexts/scheduling/test/fakes/agenda.fake.tsexamples/scheduling/src/contexts/scheduling/test/integration/knex-agenda.repository.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/agenda.projection.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/list-appointments.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/list-appointments.route.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/list-practice-agenda.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/list-practice-agenda.route.spec.ts35. feat(scheduling): show an appointment with the name of its patient
Section titled “35. feat(scheduling): show an appointment with the name of its patient”12 files, 12 counted, 371 lines counted.
examples/scheduling/src/contexts/scheduling/application/ports/person-directory-gateway.port.tsexamples/scheduling/src/contexts/scheduling/application/queries/get-appointment/get-appointment.handler.tsexamples/scheduling/src/contexts/scheduling/application/queries/get-appointment/get-appointment.query.tsexamples/scheduling/src/contexts/scheduling/application/queries/get-appointment/get-appointment.result.tsexamples/scheduling/src/contexts/scheduling/infrastructure/external/in-process-person-directory.gateway.tsexamples/scheduling/src/contexts/scheduling/presentation/http/get-appointment-answer.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/get-appointment-params.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/get-appointment.route.tsexamples/scheduling/src/contexts/scheduling/test/fakes/person-directory-gateway.fake.tsexamples/scheduling/src/contexts/scheduling/test/integration/person-directory-gateway.contract.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/get-appointment.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/get-appointment.route.spec.ts36. feat(scheduling): show the day of a calendar, busy without the name
Section titled “36. feat(scheduling): show the day of a calendar, busy without the name”8 files, 8 counted, 475 lines counted.
examples/scheduling/src/contexts/scheduling/application/queries/get-calendar-day/get-calendar-day.handler.tsexamples/scheduling/src/contexts/scheduling/application/queries/get-calendar-day/get-calendar-day.query.tsexamples/scheduling/src/contexts/scheduling/application/queries/get-calendar-day/get-calendar-day.result.tsexamples/scheduling/src/contexts/scheduling/presentation/http/get-calendar-day-answer.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/get-calendar-day-params.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/get-calendar-day.route.tsexamples/scheduling/src/contexts/scheduling/test/unit/get-calendar-day.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/get-calendar-day.route.spec.ts37. feat(scheduling): offer a freed slot to the first waiter
Section titled “37. feat(scheduling): offer a freed slot to the first waiter”37 files, 37 counted, 1316 lines counted (over the target).
examples/scheduling/src/contexts/scheduling/application/commands/join-waitlist/join-waitlist.command.tsexamples/scheduling/src/contexts/scheduling/application/commands/join-waitlist/join-waitlist.handler.tsexamples/scheduling/src/contexts/scheduling/application/commands/offer-freed-slot/offer-freed-slot.command.tsexamples/scheduling/src/contexts/scheduling/application/commands/offer-freed-slot/offer-freed-slot.handler.tsexamples/scheduling/src/contexts/scheduling/application/event-handlers/appointment-cancelled.event-handler.tsexamples/scheduling/src/contexts/scheduling/application/event-handlers/appointment-expired.event-handler.tsexamples/scheduling/src/contexts/scheduling/application/event-handlers/appointment-rescheduled.event-handler.tsexamples/scheduling/src/contexts/scheduling/domain/aggregates/waitlist.aggregate.tsexamples/scheduling/src/contexts/scheduling/domain/errors/already-waiting.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/invalid-offer.error.tsexamples/scheduling/src/contexts/scheduling/domain/errors/invalid-waiter.error.tsexamples/scheduling/src/contexts/scheduling/domain/events/waitlist-joined.event.tsexamples/scheduling/src/contexts/scheduling/domain/events/waitlist-slot-offered.event.tsexamples/scheduling/src/contexts/scheduling/domain/repositories/waitlist.repository.tsexamples/scheduling/src/contexts/scheduling/domain/value-objects/offer.vo.tsexamples/scheduling/src/contexts/scheduling/domain/value-objects/waiter.vo.tsexamples/scheduling/src/contexts/scheduling/infrastructure/persistence/knex-waitlist.repository.tsexamples/scheduling/src/contexts/scheduling/infrastructure/persistence/waitlist-row.schema.tsexamples/scheduling/src/contexts/scheduling/infrastructure/persistence/waitlist.mapper.tsexamples/scheduling/src/contexts/scheduling/presentation/http/join-waitlist-accepted.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/join-waitlist-body.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/join-waitlist-params.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/join-waitlist.route.tsexamples/scheduling/src/contexts/scheduling/test/builders/waitlist.builder.tsexamples/scheduling/src/contexts/scheduling/test/fakes/waitlist.repository.fake.tsexamples/scheduling/src/contexts/scheduling/test/integration/waitlist.repository.contract.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/already-waiting.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/invalid-offer.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/invalid-waiter.error.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/join-waitlist.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/join-waitlist.route.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/offer-freed-slot.handler.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/offer.vo.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/waiter.vo.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/waitlist-joined.event.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/waitlist-slot-offered.event.spec.tsexamples/scheduling/src/contexts/scheduling/test/unit/waitlist.aggregate.spec.ts38. feat(scheduling): answer the appointment export to other contexts
Section titled “38. feat(scheduling): answer the appointment export to other contexts”3 files, 3 counted, 216 lines counted.
examples/scheduling/src/contexts/scheduling/infrastructure/persistence/knex-appointment-export.repository.tsexamples/scheduling/src/contexts/scheduling/published-language/appointment-export.contract.tsexamples/scheduling/src/contexts/scheduling/test/integration/knex-appointment-export.repository.spec.ts39. feat(scheduling): remaining files of the context
Section titled “39. feat(scheduling): remaining files of the context”6 files, 6 counted, 91 lines counted. Whatever no pattern above claimed: read the list, it should be short.
examples/scheduling/src/contexts/scheduling/presentation/http/calendar-day-appointment-type.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/calendar-day-appointment.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/calendar-day-busy.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/calendar-day-span.dto.tsexamples/scheduling/src/contexts/scheduling/presentation/http/day-range.dto.tsexamples/scheduling/src/contexts/scheduling/test/unit/unknown-calendar.error.spec.ts40. feat(notification): declare the context and its language
Section titled “40. feat(notification): declare the context and its language”7 files, 6 counted, 198 lines counted.
examples/scheduling/src/contexts/notification/CONTEXT.mdexamples/scheduling/src/contexts/notification/application/authorization/notification.permissions.tsexamples/scheduling/src/contexts/notification/infrastructure/persistence/create-notification-tables.schema.tsexamples/scheduling/src/contexts/notification/infrastructure/persistence/notification.schema.tsexamples/scheduling/src/contexts/notification/notification.declarations.tsexamples/scheduling/src/contexts/notification/presentation/http/notification.routes.tsexamples/scheduling/src/contexts/notification/published-language/index.ts41. feat(notification): know the contact of a person from identity
Section titled “41. feat(notification): know the contact of a person from identity”8 files, 8 counted, 233 lines counted.
examples/scheduling/src/contexts/notification/application/ports/contacts.port.tsexamples/scheduling/src/contexts/notification/application/projections/contacts.projection.tsexamples/scheduling/src/contexts/notification/domain/errors/contact-unknown.error.tsexamples/scheduling/src/contexts/notification/infrastructure/persistence/knex-contacts.repository.tsexamples/scheduling/src/contexts/notification/test/fakes/contacts.fake.tsexamples/scheduling/src/contexts/notification/test/integration/knex-contacts.repository.spec.tsexamples/scheduling/src/contexts/notification/test/unit/contact-unknown.error.spec.tsexamples/scheduling/src/contexts/notification/test/unit/contacts.projection.spec.ts42. feat(notification): send a notification for each fact of an appointment
Section titled “42. feat(notification): send a notification for each fact of an appointment”33 files, 33 counted, 1586 lines counted (over the target). The Notification aggregate, the Mailer port with its development adapter and its resilience policy, the command and the five consumers.
examples/scheduling/src/contexts/notification/application/commands/send-notification/send-notification.command.tsexamples/scheduling/src/contexts/notification/application/commands/send-notification/send-notification.handler.tsexamples/scheduling/src/contexts/notification/application/integration/handlers/scheduling-appointment-booked.integration-handler.tsexamples/scheduling/src/contexts/notification/application/integration/handlers/scheduling-appointment-cancelled.integration-handler.tsexamples/scheduling/src/contexts/notification/application/integration/handlers/scheduling-appointment-confirmed.integration-handler.tsexamples/scheduling/src/contexts/notification/application/integration/handlers/scheduling-appointment-expired.integration-handler.tsexamples/scheduling/src/contexts/notification/application/integration/handlers/scheduling-appointment-rescheduled.integration-handler.tsexamples/scheduling/src/contexts/notification/application/ports/mailer.port.tsexamples/scheduling/src/contexts/notification/domain/aggregates/notification.aggregate.tsexamples/scheduling/src/contexts/notification/domain/errors/invalid-notification-kind.error.tsexamples/scheduling/src/contexts/notification/domain/events/notification-sent.event.tsexamples/scheduling/src/contexts/notification/domain/repositories/notification.repository.tsexamples/scheduling/src/contexts/notification/domain/value-objects/notification-kind.vo.tsexamples/scheduling/src/contexts/notification/infrastructure/external/remote-mailer.adapter.tsexamples/scheduling/src/contexts/notification/infrastructure/persistence/knex-notification.repository.tsexamples/scheduling/src/contexts/notification/infrastructure/persistence/notification-row.schema.tsexamples/scheduling/src/contexts/notification/infrastructure/persistence/notification.mapper.tsexamples/scheduling/src/contexts/notification/test/builders/notification.builder.tsexamples/scheduling/src/contexts/notification/test/fakes/mailer.fake.tsexamples/scheduling/src/contexts/notification/test/fakes/notification.repository.fake.tsexamples/scheduling/src/contexts/notification/test/integration/mailer-outage.spec.tsexamples/scheduling/src/contexts/notification/test/integration/notification.repository.contract.spec.tsexamples/scheduling/src/contexts/notification/test/integration/remote-mailer.adapter.spec.tsexamples/scheduling/src/contexts/notification/test/unit/invalid-notification-kind.error.spec.tsexamples/scheduling/src/contexts/notification/test/unit/notification-kind.vo.spec.tsexamples/scheduling/src/contexts/notification/test/unit/notification-sent.event.spec.tsexamples/scheduling/src/contexts/notification/test/unit/notification.aggregate.spec.tsexamples/scheduling/src/contexts/notification/test/unit/scheduling-appointment-booked.integration-handler.spec.tsexamples/scheduling/src/contexts/notification/test/unit/scheduling-appointment-cancelled.integration-handler.spec.tsexamples/scheduling/src/contexts/notification/test/unit/scheduling-appointment-confirmed.integration-handler.spec.tsexamples/scheduling/src/contexts/notification/test/unit/scheduling-appointment-expired.integration-handler.spec.tsexamples/scheduling/src/contexts/notification/test/unit/scheduling-appointment-rescheduled.integration-handler.spec.tsexamples/scheduling/src/contexts/notification/test/unit/send-notification.handler.spec.ts43. feat(notification): plan, withdraw and send reminders once
Section titled “43. feat(notification): plan, withdraw and send reminders once”28 files, 28 counted, 1266 lines counted (over the target).
examples/scheduling/src/contexts/notification/application/commands/plan-reminder/plan-reminder.command.tsexamples/scheduling/src/contexts/notification/application/commands/plan-reminder/plan-reminder.handler.tsexamples/scheduling/src/contexts/notification/application/commands/send-due-reminders/send-due-reminders.command.tsexamples/scheduling/src/contexts/notification/application/commands/send-due-reminders/send-due-reminders.handler.tsexamples/scheduling/src/contexts/notification/application/commands/withdraw-reminder/withdraw-reminder.command.tsexamples/scheduling/src/contexts/notification/application/commands/withdraw-reminder/withdraw-reminder.handler.tsexamples/scheduling/src/contexts/notification/application/event-handlers/notification-sent.event-handler.tsexamples/scheduling/src/contexts/notification/application/event-handlers/reminder-sent.event-handler.tsexamples/scheduling/src/contexts/notification/application/scheduling/send-due-reminders.job.tsexamples/scheduling/src/contexts/notification/domain/aggregates/reminder.aggregate.tsexamples/scheduling/src/contexts/notification/domain/errors/reminder-not-due.error.tsexamples/scheduling/src/contexts/notification/domain/events/reminder-sent.event.tsexamples/scheduling/src/contexts/notification/domain/repositories/reminder.repository.tsexamples/scheduling/src/contexts/notification/infrastructure/persistence/knex-reminder.repository.tsexamples/scheduling/src/contexts/notification/infrastructure/persistence/reminder-row.schema.tsexamples/scheduling/src/contexts/notification/infrastructure/persistence/reminder.mapper.tsexamples/scheduling/src/contexts/notification/test/builders/reminder.builder.tsexamples/scheduling/src/contexts/notification/test/fakes/reminder.repository.fake.tsexamples/scheduling/src/contexts/notification/test/integration/reminder.repository.contract.spec.tsexamples/scheduling/src/contexts/notification/test/unit/notification-sent.event-handler.spec.tsexamples/scheduling/src/contexts/notification/test/unit/plan-reminder.handler.spec.tsexamples/scheduling/src/contexts/notification/test/unit/reminder-not-due.error.spec.tsexamples/scheduling/src/contexts/notification/test/unit/reminder-sent.event-handler.spec.tsexamples/scheduling/src/contexts/notification/test/unit/reminder-sent.event.spec.tsexamples/scheduling/src/contexts/notification/test/unit/reminder.aggregate.spec.tsexamples/scheduling/src/contexts/notification/test/unit/send-due-reminders.handler.spec.tsexamples/scheduling/src/contexts/notification/test/unit/send-due-reminders.job.spec.tsexamples/scheduling/src/contexts/notification/test/unit/withdraw-reminder.handler.spec.ts44. feat(notification): list the notifications of a person
Section titled “44. feat(notification): list the notifications of a person”12 files, 12 counted, 581 lines counted.
examples/scheduling/src/contexts/notification/application/ports/list-notifications-reader.port.tsexamples/scheduling/src/contexts/notification/application/queries/list-notifications/list-notifications.handler.tsexamples/scheduling/src/contexts/notification/application/queries/list-notifications/list-notifications.query.tsexamples/scheduling/src/contexts/notification/application/queries/list-notifications/list-notifications.result.tsexamples/scheduling/src/contexts/notification/infrastructure/persistence/knex-list-notifications-reader.repository.tsexamples/scheduling/src/contexts/notification/presentation/http/list-notifications-line.dto.tsexamples/scheduling/src/contexts/notification/presentation/http/list-notifications.route.tsexamples/scheduling/src/contexts/notification/test/fakes/list-notifications-reader.fake.tsexamples/scheduling/src/contexts/notification/test/integration/knex-list-notifications-reader.repository.spec.tsexamples/scheduling/src/contexts/notification/test/unit/list-notifications.handler.spec.tsexamples/scheduling/src/contexts/notification/test/unit/list-notifications.route.spec.tsexamples/scheduling/test/e2e/notification-list-notifications.e2e.spec.ts45. feat(analytics): declare the context and its language
Section titled “45. feat(analytics): declare the context and its language”7 files, 6 counted, 162 lines counted.
examples/scheduling/src/contexts/analytics/CONTEXT.mdexamples/scheduling/src/contexts/analytics/analytics.declarations.tsexamples/scheduling/src/contexts/analytics/application/authorization/analytics.permissions.tsexamples/scheduling/src/contexts/analytics/infrastructure/persistence/analytics.schema.tsexamples/scheduling/src/contexts/analytics/infrastructure/persistence/create-analytics-tables.schema.tsexamples/scheduling/src/contexts/analytics/presentation/http/analytics.routes.tsexamples/scheduling/src/contexts/analytics/published-language/index.ts46. feat(analytics): project the outcome of appointments and the occupancy of days
Section titled “46. feat(analytics): project the outcome of appointments and the occupancy of days”21 files, 21 counted, 1032 lines counted (over the target).
examples/scheduling/src/contexts/analytics/application/ports/occupancy-register.port.tsexamples/scheduling/src/contexts/analytics/application/ports/outcome-register.port.tsexamples/scheduling/src/contexts/analytics/application/projections/occupancy.projection.tsexamples/scheduling/src/contexts/analytics/application/projections/outcomes.projection.tsexamples/scheduling/src/contexts/analytics/domain/errors/invalid-day.error.tsexamples/scheduling/src/contexts/analytics/domain/services/occupancy-measure.service.tsexamples/scheduling/src/contexts/analytics/domain/value-objects/day.vo.tsexamples/scheduling/src/contexts/analytics/infrastructure/persistence/knex-occupancy-register.repository.tsexamples/scheduling/src/contexts/analytics/infrastructure/persistence/knex-outcome-register.repository.tsexamples/scheduling/src/contexts/analytics/test/builders/appointment-fact.builder.tsexamples/scheduling/src/contexts/analytics/test/builders/occupancy.builder.tsexamples/scheduling/src/contexts/analytics/test/builders/outcome.builder.tsexamples/scheduling/src/contexts/analytics/test/fakes/occupancy-register.fake.tsexamples/scheduling/src/contexts/analytics/test/fakes/outcome-register.fake.tsexamples/scheduling/src/contexts/analytics/test/integration/occupancy-register.contract.spec.tsexamples/scheduling/src/contexts/analytics/test/integration/outcome-register.contract.spec.tsexamples/scheduling/src/contexts/analytics/test/unit/day.vo.spec.tsexamples/scheduling/src/contexts/analytics/test/unit/invalid-day.error.spec.tsexamples/scheduling/src/contexts/analytics/test/unit/occupancy-measure.service.spec.tsexamples/scheduling/src/contexts/analytics/test/unit/occupancy.projection.spec.tsexamples/scheduling/src/contexts/analytics/test/unit/outcomes.projection.spec.ts47. feat(analytics): read the occupancy of the calendars one measures
Section titled “47. feat(analytics): read the occupancy of the calendars one measures”8 files, 8 counted, 315 lines counted.
examples/scheduling/src/contexts/analytics/application/queries/list-occupancy/list-occupancy.handler.tsexamples/scheduling/src/contexts/analytics/application/queries/list-occupancy/list-occupancy.query.tsexamples/scheduling/src/contexts/analytics/application/queries/list-occupancy/list-occupancy.result.tsexamples/scheduling/src/contexts/analytics/presentation/http/list-occupancy-line.dto.tsexamples/scheduling/src/contexts/analytics/presentation/http/list-occupancy-params.dto.tsexamples/scheduling/src/contexts/analytics/presentation/http/list-occupancy.route.tsexamples/scheduling/src/contexts/analytics/test/unit/list-occupancy.handler.spec.tsexamples/scheduling/src/contexts/analytics/test/unit/list-occupancy.route.spec.ts48. feat(analytics): verify occupancy nightly and rebuild outcomes from scheduling
Section titled “48. feat(analytics): verify occupancy nightly and rebuild outcomes from scheduling”11 files, 11 counted, 522 lines counted.
examples/scheduling/src/contexts/analytics/application/commands/verify-occupancy/verify-occupancy.command.tsexamples/scheduling/src/contexts/analytics/application/commands/verify-occupancy/verify-occupancy.handler.tsexamples/scheduling/src/contexts/analytics/application/ports/appointment-export-gateway.port.tsexamples/scheduling/src/contexts/analytics/application/scheduling/verify-occupancy.job.tsexamples/scheduling/src/contexts/analytics/infrastructure/external/in-process-appointment-export.gateway.tsexamples/scheduling/src/contexts/analytics/test/fakes/appointment-export-contract.fake.tsexamples/scheduling/src/contexts/analytics/test/fakes/appointment-export-gateway.fake.tsexamples/scheduling/src/contexts/analytics/test/integration/appointment-export-gateway.contract.spec.tsexamples/scheduling/src/contexts/analytics/test/integration/outcome-register.rebuild.spec.tsexamples/scheduling/src/contexts/analytics/test/unit/verify-occupancy.handler.spec.tsexamples/scheduling/src/contexts/analytics/test/unit/verify-occupancy.job.spec.ts49. docs(example): generate the contracts and the integration notes
Section titled “49. docs(example): generate the contracts and the integration notes”5 files, 2 counted, 163 lines counted. Generated documents; they belong with the last commit that changed a route or an event. Given once here because the build was parallel.
examples/scheduling/docs/context-map.mdexamples/scheduling/docs/integration/README.mdexamples/scheduling/docs/integration/asyncapi.jsonexamples/scheduling/docs/integration/event-catalog.mdexamples/scheduling/openapi/openapi.json50. test(example): prove the contexts together, from a booking to its trace
Section titled “50. test(example): prove the contexts together, from a booking to its trace”11 files, 11 counted, 714 lines counted (over the target).
examples/scheduling/test/e2e/journey-authorization.e2e.spec.tsexamples/scheduling/test/e2e/journey-booking.e2e.spec.tsexamples/scheduling/test/e2e/journey-observability.e2e.spec.tsexamples/scheduling/test/e2e/support/book-appointment.tsexamples/scheduling/test/e2e/support/listed.tsexamples/scheduling/test/e2e/support/log-lines.tsexamples/scheduling/test/e2e/support/open-staffed-practice.tsexamples/scheduling/test/e2e/support/register-people.tsexamples/scheduling/test/e2e/support/slot-starting.tsexamples/scheduling/test/e2e/support/staffed-practice.tsexamples/scheduling/test/e2e/support/storage-outage.ts51. feat(example): script the real run and record its transcript
Section titled “51. feat(example): script the real run and record its transcript”5 files, 5 counted, 585 lines counted.
examples/scheduling/docs/demo-transcript.mdexamples/scheduling/scripts/demo.mjsexamples/scheduling/scripts/demo/glitchtip.mjsexamples/scheduling/scripts/demo/keycloak.mjsexamples/scheduling/scripts/demo/transcript.mjs52. docs(example): measure the tooling and present the example
Section titled “52. docs(example): measure the tooling and present the example”5 files, 5 counted, 951 lines counted (over the target).
examples/scheduling/README.mdexamples/scheduling/docs/commit-plan.mdexamples/scheduling/docs/tooling-report.mdexamples/scheduling/docs/tooling/generator-log.jsonlexamples/scheduling/scripts/measure-tooling.mjs