Plan des commits
Pour le responsable, qui committe : la construction s'est faite sans git (plusieurs workers sur
un seul arbre), donc l'historique est découpé après coup. Les chemins sont relatifs à la racine du
dépôt. Les messages suivent la discipline de commit du kit : conventionnels, portée = le contexte
délimité, platform ou example, en-tête de 100 caractères au plus.
Ce que ce plan peut promettre, et ce qu'il ne peut pas
Section intitulée « Ce que ce plan peut promettre, et ce qu'il ne peut pas »- Ordre. L'ordre est celui que prescrit la méthode : les changements de la racine, les artefacts stratégiques, l'amorçage, la plateforme, puis pour chaque contexte son langage, ses contrats, ses concepts et ses cas d'usage, puis ce qui prouve l'ensemble.
- Taille. La cible est de 20 fichiers et 600 lignes changées par commit, documents générés
non comptés. Les commits au-dessus de la cible le disent. Ils le sont pour trois raisons : un
amorçage est une seule commande (93 fichiers) ; un agrégat écrit par un worker en un seul
fichier porte le comportement de plusieurs cas d'usage (le
Calendar, l'Appointment) ; un commit de cas d'usage porte ses specs, qui sont plus longues que son code. - Compiler à chaque commit : pas faisable, et pas prétendu. Les fichiers que les générateurs
mettent à jour à chaque exécution (le barrel
<context>.declarations.ts, les permissions, la liste des routes,CONTEXT.md, les tables d'un contexte, les fichiers de composition de la plateforme) n'existent ici que dans leur état final, et vont dans le premier commit qui en a besoin : ils nomment des classes qu'apportent des commits ultérieurs. Le projet compile etnpm run verifyest vert à ces points seulement : après le commit 1 (le dépôt du kit, que l'exemple ne touche pas), et après le dernier commit. Un historique vert à chaque commit demande d'exécuter les générateurs dans un worktree par tranche, ce que prescrit la skillparallel-workdu kit et ce que cette construction ne pouvait pas faire sans git. - Fichiers emmêlés. Quand deux tranches partagent un fichier (un agrégat, la table d'un contexte), le fichier est dans le premier commit qui en a besoin, entier, comme le dit la discipline de commit.
- Les dernières entrées de chaque contexte, nommées « remaining files », contiennent ce qu'aucune règle n'a réclamé : lisez leur liste avant de committer.
Avant de committer : npm run check:dashes et npm run example:verify à la racine.
Les commits
Section intitulée « Les commits »1. chore(example): add the example workspace to the repository
Section intitulée « 1. chore(example): add the example workspace to the repository »Les changements de la racine seulement, dans leur propre 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 intitulée « 2. chore(example): bootstrap the project with one init command »93 fichiers, 92 comptés, 4194 lignes comptées (au-dessus de la cible). Tout ce qu'ont écrit init et generate worker, avec les corrections à la main dont le workspace avait besoin (scripts/tsc.mjs, scripts/kit.mjs, .dependency-cruiser.workspace.mjs, docker-compose.yml, le realm) et les fichiers de composition de src/platform dans leur état final.
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 intitulée « 3. docs(example): state the needs and discover the domain »2 fichiers, 2 comptés, 148 lignes comptées.
examples/scheduling/docs/architecture/discovery.mdexamples/scheduling/docs/architecture/needs.md4. docs(example): find the bounded contexts, their language and their map
Section intitulée « 4. docs(example): find the bounded contexts, their language and their map »4 fichiers, 4 comptés, 167 lignes comptées.
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 intitulée « 5. feat(platform): keep relation tuples in PostgreSQL and combine roles with relationships »27 fichiers, 27 comptés, 820 lignes comptées (au-dessus de la cible). Les fichiers générés de src/platform/auth sont dans ce commit dans leur état final, recâblé.
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 intitulée « 6. docs(example): plan the slices and brief the workers »8 fichiers, 8 comptés, 389 lignes comptées.
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 intitulée « 7. feat(example): share the stamp read models can store »3 fichiers, 3 comptés, 52 lignes comptées. Contournement d'un défaut de @ddd-ts-kit/knex ; utilisé par les projections de trois contextes, il vient donc avant elles.
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 intitulée « 8. docs(example): record the projections directory as a decision »1 fichier, 1 compté, 29 lignes comptées.
examples/scheduling/docs/adr/0002-keep-read-models-with-projections-in-application-projections.md9. feat(identity): declare the context and its language
Section intitulée « 9. feat(identity): declare the context and its language »7 fichiers, 6 comptés, 243 lignes comptées.
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 intitulée « 10. feat(identity): publish what happens to people, practices and delegations »44 fichiers, 44 comptés, 853 lignes comptées (au-dessus de la cible).
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 intitulée « 11. feat(identity): register a person at their first sign-in »30 fichiers, 30 comptés, 978 lignes comptées (au-dessus de la cible).
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 intitulée « 12. feat(identity): open a practice with its first manager »29 fichiers, 29 comptés, 1223 lignes comptées (au-dessus de la cible).
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 intitulée « 13. feat(identity): add and remove the members of a practice »23 fichiers, 23 comptés, 946 lignes comptées (au-dessus de la cible).
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 intitulée « 14. feat(identity): grant and revoke a delegation on a desk »42 fichiers, 42 comptés, 1760 lignes comptées (au-dessus de la cible).
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 intitulée « 15. feat(identity): expire delegations past their end »5 fichiers, 5 comptés, 224 lignes comptées.
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 intitulée « 16. feat(identity): keep relationships in step with memberships and delegations »11 fichiers, 11 comptés, 410 lignes comptées.
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 intitulée « 17. feat(identity): answer the person directory to other contexts »1 fichier, 1 compté, 10 lignes comptées.
examples/scheduling/src/contexts/identity/published-language/person-directory.contract.ts18. feat(scheduling): declare the context and its language
Section intitulée « 18. feat(scheduling): declare the context and its language »7 fichiers, 6 comptés, 431 lignes comptées.
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 intitulée « 19. feat(scheduling): publish what happens to calendars and appointments »40 fichiers, 40 comptés, 987 lignes comptées (au-dessus de la cible).
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 intitulée « 20. feat(scheduling): know the practitioners of a practice from identity »8 fichiers, 8 comptés, 283 lignes comptées.
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 intitulée « 21. feat(scheduling): create a calendar for a practitioner »30 fichiers, 30 comptés, 1477 lignes comptées (au-dessus de la cible). L'agrégat Calendar est entier dans ce commit, avec le comportement qu'appellent les quatre cas d'usage suivants : les workers l'ont construit en un seul fichier.
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 intitulée « 22. feat(scheduling): set the opening hours of a calendar »16 fichiers, 16 comptés, 545 lignes comptées.
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 intitulée « 23. feat(scheduling): add an exception to a day »13 fichiers, 13 comptés, 361 lignes comptées.
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 intitulée « 24. feat(scheduling): add a time off »15 fichiers, 15 comptés, 393 lignes comptées.
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 intitulée « 25. feat(scheduling): define an appointment type »23 fichiers, 23 comptés, 524 lignes comptées (au-dessus de la cible).
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 intitulée « 26. feat(scheduling): hold a slot once, by the domain and by the database »41 fichiers, 41 comptés, 2202 lignes comptées (au-dessus de la cible). L'agrégat Appointment avec toute sa vie, le Scheduler, l'adaptateur de la contrainte d'exclusion et la spec des réservations concurrentes. Plus gros que la cible : un seul agrégat, écrit en un seul fichier.
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 intitulée « 27. feat(scheduling): keep relationships in step with calendars and appointments »6 fichiers, 6 comptés, 139 lignes comptées.
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 intitulée « 28. feat(scheduling): book an appointment »7 fichiers, 7 comptés, 365 lignes comptées.
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 intitulée « 29. feat(scheduling): confirm a requested appointment »7 fichiers, 7 comptés, 215 lignes comptées.
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 intitulée « 30. feat(scheduling): cancel an appointment, the patient until 24 hours before »10 fichiers, 10 comptés, 357 lignes comptées.
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 intitulée « 31. feat(scheduling): reschedule an appointment in one step »10 fichiers, 10 comptés, 411 lignes comptées.
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 intitulée « 32. feat(scheduling): complete an appointment or mark a no-show »14 fichiers, 14 comptés, 438 lignes comptées.
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 intitulée « 33. feat(scheduling): expire unconfirmed appointments »5 fichiers, 5 comptés, 216 lignes comptées.
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 intitulée « 34. feat(scheduling): list appointments and the agenda of a practice by access scope »22 fichiers, 22 comptés, 1113 lignes comptées (au-dessus de la cible).
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 intitulée « 35. feat(scheduling): show an appointment with the name of its patient »12 fichiers, 12 comptés, 371 lignes comptées.
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 intitulée « 36. feat(scheduling): show the day of a calendar, busy without the name »8 fichiers, 8 comptés, 475 lignes comptées.
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 intitulée « 37. feat(scheduling): offer a freed slot to the first waiter »37 fichiers, 37 comptés, 1316 lignes comptées (au-dessus de la cible).
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 intitulée « 38. feat(scheduling): answer the appointment export to other contexts »3 fichiers, 3 comptés, 216 lignes comptées.
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 intitulée « 39. feat(scheduling): remaining files of the context »6 fichiers, 6 comptés, 91 lignes comptées. Ce qu'aucun motif ci-dessus n'a réclamé : lisez la liste, elle devrait être courte.
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 intitulée « 40. feat(notification): declare the context and its language »7 fichiers, 6 comptés, 198 lignes comptées.
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 intitulée « 41. feat(notification): know the contact of a person from identity »8 fichiers, 8 comptés, 233 lignes comptées.
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 intitulée « 42. feat(notification): send a notification for each fact of an appointment »33 fichiers, 33 comptés, 1586 lignes comptées (au-dessus de la cible). L'agrégat Notification, le port Mailer avec son adaptateur de développement et sa politique de résilience, la commande et les cinq consommateurs.
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 intitulée « 43. feat(notification): plan, withdraw and send reminders once »28 fichiers, 28 comptés, 1266 lignes comptées (au-dessus de la cible).
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 intitulée « 44. feat(notification): list the notifications of a person »12 fichiers, 12 comptés, 581 lignes comptées.
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 intitulée « 45. feat(analytics): declare the context and its language »7 fichiers, 6 comptés, 162 lignes comptées.
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 intitulée « 46. feat(analytics): project the outcome of appointments and the occupancy of days »21 fichiers, 21 comptés, 1032 lignes comptées (au-dessus de la cible).
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 intitulée « 47. feat(analytics): read the occupancy of the calendars one measures »8 fichiers, 8 comptés, 315 lignes comptées.
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 intitulée « 48. feat(analytics): verify occupancy nightly and rebuild outcomes from scheduling »11 fichiers, 11 comptés, 522 lignes comptées.
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 intitulée « 49. docs(example): generate the contracts and the integration notes »5 fichiers, 2 comptés, 163 lignes comptées. Des documents générés ; ils vont avec le dernier commit qui a changé une route ou un événement. Donnés une seule fois ici parce que la construction était parallèle.
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 intitulée « 50. test(example): prove the contexts together, from a booking to its trace »11 fichiers, 11 comptés, 714 lignes comptées (au-dessus de la cible).
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 intitulée « 51. feat(example): script the real run and record its transcript »5 fichiers, 5 comptés, 585 lignes comptées.
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 intitulée « 52. docs(example): measure the tooling and present the example »5 fichiers, 5 comptés, 951 lignes comptées (au-dessus de la cible).
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