RFC-TIMETABLE v0.2 Session 3 — Form Builder integration #17

Merged
bert.hausmans merged 8 commits from feat/timetable-session-3 into main 2026-05-08 23:41:42 +02:00
4 changed files with 35 additions and 9 deletions
Showing only changes of commit 889441cb39 - Show all commits

View File

@@ -257,16 +257,13 @@ final class EngagementPortalController extends Controller
// Pass event_id via the context bag — the schema is org-owned (not
// event-owned) and this route has no {event} parameter for the
// FormSubmissionObserver fallback. ARCH-FORM-BUILDER §17.3 footnote.
// idempotency_key column is varchar(30); a SHA-1 hex digest fits in
// 28 chars and uniquely keys "one draft per (schema, engagement)".
$key = 'aa-'.substr(hash('sha1', (string) $resolved->engagement->id), 0, 27);
// idempotency_key column is varchar(30); 'aa:' + 26-char ULID fits.
return $this->submissionService->createDraft(
schema: $schema,
subject: $resolved->subject,
submitter: null,
context: [
'idempotency_key' => $key,
'idempotency_key' => 'aa:'.$resolved->engagement->id,
'event_id' => $resolved->eventId,
],
);

View File

@@ -18,15 +18,18 @@ use App\Models\Organisation;
* The default seeder is idempotent if the org already owns an
* artist_advance schema, the call is a no-op. Safe to re-run.
*
* Skipped during automated tests so existing FormSchema-counting
* tests aren't perturbed; tests that need the auto-seed call
* `ArtistAdvanceDefault::seedFor()` explicitly.
* Gated by `config('artist_advance.bootstrap_on_org_create')`. The
* config defaults to true (production behaviour); phpunit.xml flips
* it to false so existing FormSchema-counting tests aren't perturbed.
* Tests that need the auto-seed call `ArtistAdvanceDefault::seedFor()`
* explicitly. Tracked for removal by BACKLOG entry
* `TECH-OBSERVER-TEST-CONVERGENCE`.
*/
final class OrganisationObserver
{
public function created(Organisation $organisation): void
{
if (app()->runningUnitTests()) {
if (! (bool) config('artist_advance.bootstrap_on_org_create', true)) {
return;
}

View File

@@ -0,0 +1,25 @@
<?php
declare(strict_types=1);
return [
/*
|---------------------------------------------------------------------
| Bootstrap on organisation create
|---------------------------------------------------------------------
|
| When true (production default), OrganisationObserver provisions a
| default artist_advance FormSchema for every newly-created
| Organisation per RFC-TIMETABLE v0.2 D15. When false, the observer
| no-ops and tests opt in to the seeder explicitly via
| `ArtistAdvanceDefault::seedFor()`.
|
| Tracked for removal by BACKLOG: TECH-OBSERVER-TEST-CONVERGENCE
| once existing FormSchema-counting tests are updated to expect the
| auto-bootstrapped schema, this flag goes away (productiegedrag =
| testgedrag, geen branching).
|
*/
'bootstrap_on_org_create' => env('ARTIST_ADVANCE_BOOTSTRAP_ON_ORG_CREATE', true),
];

View File

@@ -35,6 +35,7 @@
<env name="PULSE_ENABLED" value="false"/>
<env name="TELESCOPE_ENABLED" value="false"/>
<env name="NIGHTWATCH_ENABLED" value="false"/>
<env name="ARTIST_ADVANCE_BOOTSTRAP_ON_ORG_CREATE" value="false"/>
<ini name="memory_limit" value="512M"/>
</php>
</phpunit>